• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

marble

  • sources
  • kde-4.14
  • kdeedu
  • marble
  • src
  • lib
  • marble
  • routing
RoutingInputWidget.cpp
Go to the documentation of this file.
1 //
2 // This file is part of the Marble Virtual Globe.
3 //
4 // This program is free software licensed under the GNU LGPL. You can
5 // find a copy of this license in LICENSE.txt in the top directory of
6 // the source code.
7 //
8 // Copyright 2010 Dennis Nienhüser <earthwings@gentoo.org>
9 // Copyright 2012 Illya Kovalevskyy <illya.kovalevskyy@gmail.com>
10 //
11 
12 #include "RoutingInputWidget.h"
13 
14 #include "MarbleLocale.h"
15 #include "MarblePlacemarkModel.h"
16 #include "RouteRequest.h"
17 #include "TinyWebBrowser.h"
18 #include "BookmarkManager.h"
19 #include "MarbleModel.h"
20 #include "MarbleWidget.h"
21 #include "routing/RoutingManager.h"
22 #include "GeoDataFolder.h"
23 #include "GeoDataExtendedData.h"
24 #include "PositionTracking.h"
25 #include "ReverseGeocodingRunnerManager.h"
26 #include "SearchRunnerManager.h"
27 #include "MarbleLineEdit.h"
28 #include "GoToDialog.h"
29 
30 #include <QTimer>
31 #include <QUrl>
32 #include <QHBoxLayout>
33 #include <QIcon>
34 #include <QPushButton>
35 #include <QMenu>
36 #include <QToolButton>
37 #include <QKeyEvent>
38 #include <QDomDocument>
39 
40 namespace Marble
41 {
42 
47 class RoutingInputLineEdit : public MarbleLineEdit
48 {
49 public:
50  RoutingInputLineEdit( QWidget *parent = 0 );
51 
52 protected:
53  virtual void keyPressEvent(QKeyEvent *);
54 };
55 
56 class RoutingInputWidgetPrivate
57 {
58 public:
59  MarbleModel* m_marbleModel;
60 
61  RoutingInputLineEdit *m_lineEdit;
62 
63  QPushButton* m_removeButton;
64 
65  SearchRunnerManager m_placemarkRunnerManager;
66  ReverseGeocodingRunnerManager m_reverseGeocodingRunnerManager;
67 
68  MarblePlacemarkModel *m_placemarkModel;
69 
70  RouteRequest *m_route;
71 
72  int m_index;
73 
74  QTimer m_nominatimTimer;
75 
76  QAction* m_bookmarkAction;
77 
78  QAction* m_mapInput;
79 
80  QAction* m_currentLocationAction;
81 
82  QAction* m_centerAction;
83 
84  QMenu *m_menu;
85 
87  RoutingInputWidgetPrivate( MarbleModel* model, int index, QWidget *parent );
88 
90  void adjustText();
91 
92  void createMenu( RoutingInputWidget *parent );
93 
94  QMenu* createBookmarkMenu( RoutingInputWidget *parent );
95 
96  static void createBookmarkActions( QMenu* menu, GeoDataFolder* bookmarksFolder, QObject *parent );
97 
98  static QPixmap addDropDownIndicator( const QPixmap &pixmap );
99 
100  void updateDescription();
101 };
102 
103 void RoutingInputWidgetPrivate::updateDescription()
104 {
105  GeoDataPlacemark const placemark = (*m_route)[m_index];
106  GeoDataExtendedData const address = placemark.extendedData();
107  if ( address.contains( "road" ) && address.contains( "city" ) )
108  {
109  QString const road = address.value( "road" ).value().toString();
110  QString const city = address.value( "city" ).value().toString();
111 
112  if ( address.contains( "house_number" ) ) {
113  QString const houseNumber = address.value( "house_number" ).value().toString();
114  QString const name = QObject::tr("%1 %2, %3", "An address with parameters %1=house number, %2=road, %3=city");
115  m_lineEdit->setText( name.arg( houseNumber ).arg( road ).arg( city ) );
116  } else {
117  QString const name = QObject::tr("%2, %3", "An address with parameters %1=road, %2=city");
118  m_lineEdit->setText( name.arg( road ).arg( city ) );
119  }
120  }
121  else if ( m_route->name( m_index ).isEmpty() )
122  {
123  m_lineEdit->setText( placemark.coordinate().toString().trimmed() );
124  }
125  else
126  {
127  m_lineEdit->setText( placemark.name() );
128  }
129  m_lineEdit->setCursorPosition( 0 );
130 }
131 
132 RoutingInputLineEdit::RoutingInputLineEdit( QWidget *parent ) :
133  MarbleLineEdit( parent )
134 {
135  setPlaceholderText( QObject::tr( "Address or search term..." ) );
136 }
137 
138 void RoutingInputLineEdit::keyPressEvent(QKeyEvent *event)
139 {
140  MarbleLineEdit::keyPressEvent( event );
141  bool const returnPressed = event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter;
142  if ( returnPressed ) {
143  event->accept();
144  }
145 }
146 
147 RoutingInputWidgetPrivate::RoutingInputWidgetPrivate( MarbleModel* model, int index, QWidget *parent ) :
148  m_marbleModel( model ),
149  m_lineEdit( 0 ),
150  m_placemarkRunnerManager( m_marbleModel ),
151  m_reverseGeocodingRunnerManager( m_marbleModel ),
152  m_placemarkModel( 0 ), m_route( m_marbleModel->routingManager()->routeRequest() ), m_index( index ),
153  m_bookmarkAction( 0 ), m_mapInput( 0 ), m_currentLocationAction( 0 ),
154  m_centerAction( 0 ),
155  m_menu( 0 )
156 {
157  m_lineEdit = new RoutingInputLineEdit( parent );
158  m_lineEdit->setDecorator( addDropDownIndicator( m_route->pixmap( m_index ) ) );
159 
160  m_removeButton = new QPushButton( parent );
161 #ifdef Q_WS_MAEMO_5
162  // maemo window background color is black, the 'X' is not visible -> use the red '-' sign
163  m_removeButton->setIcon( QIcon( ":/icons/remove.png" ) );
164 #else
165  m_removeButton->setIcon( QIcon( ":/marble/routing/icon-remove.png" ) );
166 #endif
167  m_removeButton->setToolTip( QObject::tr( "Remove via point" ) );
168  m_removeButton->setFlat( true );
169  m_removeButton->setMaximumWidth( 18 );
170 
171  m_nominatimTimer.setInterval( 1000 );
172  m_nominatimTimer.setSingleShot( true );
173 }
174 
175 void RoutingInputWidgetPrivate::adjustText()
176 {
177  m_nominatimTimer.start();
178 }
179 
180 void RoutingInputWidgetPrivate::createMenu( RoutingInputWidget *parent )
181 {
182  QMenu* result = new QMenu( parent );
183 
184  m_centerAction = result->addAction( QIcon( m_route->pixmap( m_index ) ), QObject::tr( "&Center Map here" ),
185  parent, SLOT(requestActivity()) );
186  result->addSeparator();
187 
188  m_currentLocationAction = result->addAction( QIcon( ":/icons/gps.png" ), QObject::tr( "Current &Location" ),
189  parent, SLOT(setCurrentLocation()) );
190  m_currentLocationAction->setEnabled( false );
191 
192  m_mapInput = result->addAction( QIcon( ":/icons/crosshairs.png" ), QObject::tr( "From &Map..." ) );
193  m_mapInput->setCheckable( true );
194  QObject::connect( m_mapInput, SIGNAL(triggered(bool)), parent, SLOT(setMapInputModeEnabled(bool)) );
195 
196  m_bookmarkAction = result->addAction( QIcon( ":/icons/bookmarks.png" ), QObject::tr( "From &Bookmark" ) );
197  m_bookmarkAction->setMenu( createBookmarkMenu( parent ) );
198 
199  m_menu = result;
200 }
201 
202 QMenu* RoutingInputWidgetPrivate::createBookmarkMenu( RoutingInputWidget *parent )
203 {
204  QMenu* result = new QMenu( parent );
205  result->addAction( QIcon( ":/icons/go-home.png" ), QObject::tr( "&Home" ), parent, SLOT(setHomePosition()) );
206 
207  QVector<GeoDataFolder*> folders = m_marbleModel->bookmarkManager()->folders();
208 
209  if ( folders.size() == 1 ) {
210  createBookmarkActions( result, folders.first(), parent );
211  } else {
212  QVector<GeoDataFolder*>::const_iterator i = folders.constBegin();
213  QVector<GeoDataFolder*>::const_iterator end = folders.constEnd();
214 
215  for (; i != end; ++i ) {
216  QMenu* menu = result->addMenu( QIcon( ":/icons/folder-bookmark.png" ), (*i)->name() );
217  createBookmarkActions( menu, *i, parent );
218  }
219  }
220 
221  return result;
222 }
223 
224 void RoutingInputWidgetPrivate::createBookmarkActions( QMenu* menu, GeoDataFolder* bookmarksFolder, QObject *parent )
225 {
226  QVector<GeoDataPlacemark*> bookmarks = bookmarksFolder->placemarkList();
227  QVector<GeoDataPlacemark*>::const_iterator i = bookmarks.constBegin();
228  QVector<GeoDataPlacemark*>::const_iterator end = bookmarks.constEnd();
229 
230  for (; i != end; ++i ) {
231  QAction *bookmarkAction = new QAction( (*i)->name(), parent );
232  bookmarkAction->setData( qVariantFromValue( (*i)->coordinate() ) );
233  menu->addAction( bookmarkAction );
234  QObject::connect( menu, SIGNAL(triggered(QAction*)), parent, SLOT(setBookmarkPosition(QAction*)) );
235  }
236 }
237 
238 QPixmap RoutingInputWidgetPrivate::addDropDownIndicator(const QPixmap &pixmap)
239 {
240  QPixmap result( pixmap.size() + QSize( 8, pixmap.height() ) );
241  result.fill( QColor( Qt::transparent ) );
242  QPainter painter( &result );
243  painter.drawPixmap( 0, 0, pixmap );
244  QPoint const one( pixmap.width() + 1, pixmap.height() - 8 );
245  QPoint const two( one.x() + 6, one.y() );
246  QPoint const three( one.x() + 3, one.y() + 4 );
247  painter.setRenderHint( QPainter::Antialiasing, true );
248  painter.setPen( Qt::NoPen );
249  painter.setBrush( QColor( Oxygen::aluminumGray4 ) );
250  painter.drawConvexPolygon( QPolygon() << one << two << three );
251  return result;
252 }
253 
254 RoutingInputWidget::RoutingInputWidget( MarbleModel* model, int index, QWidget *parent ) :
255  QWidget( parent ), d( new RoutingInputWidgetPrivate( model, index, this ) )
256 {
257  QHBoxLayout *layout = new QHBoxLayout( this );
258  layout->setSpacing( 0 );
259  layout->setMargin( 0 );
260  layout->addWidget( d->m_lineEdit );
261  layout->addWidget( d->m_removeButton );
262 
263  bool const smallScreen = MarbleGlobal::getInstance()->profiles() & MarbleGlobal::SmallScreen;
264  if ( smallScreen ) {
265  connect( d->m_lineEdit, SIGNAL(decoratorButtonClicked()), this, SLOT(openTargetSelectionDialog()) );
266  } else {
267  d->createMenu( this );
268  connect(d->m_lineEdit, SIGNAL(decoratorButtonClicked()), this, SLOT(showMenu()));
269  }
270 
271  connect( d->m_removeButton, SIGNAL(clicked()), this, SLOT(requestRemoval()) );
272  connect( d->m_marbleModel->bookmarkManager(), SIGNAL(bookmarksChanged()),
273  this, SLOT(reloadBookmarks()) );
274  connect( d->m_marbleModel->positionTracking(), SIGNAL(statusChanged(PositionProviderStatus)),
275  this, SLOT(updateCurrentLocationButton(PositionProviderStatus)) );
276  connect( &d->m_placemarkRunnerManager, SIGNAL(searchResultChanged(QAbstractItemModel*)),
277  this, SLOT(setPlacemarkModel(QAbstractItemModel*)) );
278  connect( &d->m_reverseGeocodingRunnerManager, SIGNAL(reverseGeocodingFinished(GeoDataCoordinates,GeoDataPlacemark)),
279  this, SLOT(retrieveReverseGeocodingResult(GeoDataCoordinates,GeoDataPlacemark)) );
280  connect( d->m_lineEdit, SIGNAL(returnPressed()),
281  this, SLOT(findPlacemarks()) );
282  connect( d->m_lineEdit, SIGNAL(textEdited(QString)),
283  this, SLOT(setInvalid()) );
284  connect( &d->m_placemarkRunnerManager, SIGNAL(searchFinished(QString)),
285  this, SLOT(finishSearch()) );
286  connect( d->m_marbleModel->routingManager()->routeRequest(), SIGNAL(positionChanged(int,GeoDataCoordinates)),
287  this, SLOT(updatePosition(int,GeoDataCoordinates)) );
288  connect( &d->m_nominatimTimer, SIGNAL(timeout()),
289  this, SLOT(reverseGeocoding()) );
290  connect( this, SIGNAL(targetValidityChanged(bool)), this, SLOT(updateCenterButton(bool)) );
291  updateCenterButton( hasTargetPosition() );
292 
293  d->adjustText();
294 }
295 
296 RoutingInputWidget::~RoutingInputWidget()
297 {
298  delete d;
299 }
300 
301 void RoutingInputWidget::reverseGeocoding()
302 {
303  if ( !hasTargetPosition() ) {
304  return;
305  }
306 
307  QString const name = d->m_route->name( d->m_index );
308  if ( name.isEmpty() || name == tr( "Current Location" ) ) {
309  d->m_reverseGeocodingRunnerManager.reverseGeocoding( targetPosition() );
310  } else {
311  d->updateDescription();
312  }
313 }
314 
315 void RoutingInputWidget::setPlacemarkModel( QAbstractItemModel *model )
316 {
317  d->m_placemarkModel = dynamic_cast<MarblePlacemarkModel*>(model);
318 }
319 
320 void RoutingInputWidget::setTargetPosition( const GeoDataCoordinates &position, const QString &name )
321 {
322  if ( d->m_mapInput ) {
323  d->m_mapInput->setChecked( false );
324  }
325  d->m_route->setPosition( d->m_index, position, name );
326  if ( !name.isEmpty() ) {
327  d->updateDescription();
328  }
329  emit targetValidityChanged( true );
330 }
331 
332 bool RoutingInputWidget::hasTargetPosition() const
333 {
334  return targetPosition().isValid();
335 }
336 
337 GeoDataCoordinates RoutingInputWidget::targetPosition() const
338 {
339  if ( d->m_index < d->m_route->size() ) {
340  return d->m_route->at( d->m_index );
341  } else {
342  return GeoDataCoordinates();
343  }
344 }
345 
346 void RoutingInputWidget::findPlacemarks()
347 {
348  QString text = d->m_lineEdit->text();
349  if ( text.isEmpty() ) {
350  setInvalid();
351  } else {
352  d->m_lineEdit->setBusy(true);
353  d->m_placemarkRunnerManager.findPlacemarks( text );
354  }
355 }
356 
357 MarblePlacemarkModel *RoutingInputWidget::searchResultModel()
358 {
359  return d->m_placemarkModel;
360 }
361 
362 void RoutingInputWidget::requestActivity()
363 {
364  if ( hasTargetPosition() ) {
365  emit activityRequest( this );
366  }
367 }
368 
369 void RoutingInputWidget::requestRemoval()
370 {
371  emit removalRequest( this );
372 }
373 
374 bool RoutingInputWidget::hasInput() const
375 {
376  return !d->m_lineEdit->text().isEmpty();
377 }
378 
379 void RoutingInputWidget::setMapInputModeEnabled( bool enabled )
380 {
381  emit mapInputModeEnabled( this, enabled );
382 }
383 
384 void RoutingInputWidget::finishSearch()
385 {
386  d->m_lineEdit->setBusy(false);
387  emit searchFinished( this );
388 }
389 
390 void RoutingInputWidget::setInvalid()
391 {
392  d->m_route->setPosition( d->m_index, GeoDataCoordinates() );
393  emit targetValidityChanged( false );
394 }
395 
396 void RoutingInputWidget::abortMapInputRequest()
397 {
398  if ( d->m_mapInput ) {
399  d->m_mapInput->setChecked( false );
400  }
401 }
402 
403 void RoutingInputWidget::setIndex( int index )
404 {
405  d->m_index = index;
406  d->m_lineEdit->setBusy(false);
407  d->m_lineEdit->setDecorator( d->addDropDownIndicator( d->m_route->pixmap( index ) ) );
408 }
409 
410 void RoutingInputWidget::updatePosition( int index, const GeoDataCoordinates & )
411 {
412  if ( index == d->m_index ) {
413  d->m_lineEdit->setBusy(false);
414  emit targetValidityChanged( hasTargetPosition() );
415  d->adjustText();
416  }
417 }
418 
419 void RoutingInputWidget::clear()
420 {
421  d->m_nominatimTimer.stop();
422  d->m_lineEdit->setBusy(false);
423  d->m_route->setPosition( d->m_index, GeoDataCoordinates() );
424  d->m_lineEdit->clear();
425  emit targetValidityChanged( false );
426 }
427 
428 void RoutingInputWidget::retrieveReverseGeocodingResult( const GeoDataCoordinates &, const GeoDataPlacemark &placemark )
429 {
430  (*d->m_route)[d->m_index] = placemark;
431  d->updateDescription();
432 }
433 
434 void RoutingInputWidget::reloadBookmarks()
435 {
436  if ( d->m_bookmarkAction ) {
437  d->m_bookmarkAction->setMenu( d->createBookmarkMenu( this ) );
438  }
439 }
440 
441 void RoutingInputWidget::setHomePosition()
442 {
443  qreal lon( 0.0 ), lat( 0.0 );
444  int zoom( 0 );
445  d->m_marbleModel->home( lon, lat, zoom );
446  GeoDataCoordinates home( lon, lat, 0.0, GeoDataCoordinates::Degree );
447  setTargetPosition( home );
448  requestActivity();
449 }
450 
451 void RoutingInputWidget::updateCurrentLocationButton( PositionProviderStatus status )
452 {
453  if ( d->m_currentLocationAction ) {
454  d->m_currentLocationAction->setEnabled( status == PositionProviderStatusAvailable );
455  }
456 }
457 
458 void RoutingInputWidget::setCurrentLocation()
459 {
460  setTargetPosition( d->m_marbleModel->positionTracking()->currentLocation() );
461  requestActivity();
462 }
463 
464 void RoutingInputWidget::updateCenterButton( bool hasPosition )
465 {
466  if ( d->m_centerAction ) {
467  d->m_centerAction->setEnabled( hasPosition );
468  }
469 }
470 
471 void RoutingInputWidget::setBookmarkPosition( QAction* bookmark )
472 {
473  if ( !bookmark->data().isNull() ) {
474  setTargetPosition( bookmark->data().value<GeoDataCoordinates>() );
475  requestActivity();
476  }
477 }
478 
479 void RoutingInputWidget::openTargetSelectionDialog()
480 {
481  QPointer<GoToDialog> dialog = new GoToDialog( d->m_marbleModel, this );
482  dialog->setWindowTitle( tr( "Choose Placemark" ) );
483  dialog->setShowRoutingItems( false );
484  dialog->setSearchEnabled( false );
485  if ( dialog->exec() == QDialog::Accepted ) {
486  const GeoDataCoordinates coordinates = dialog->coordinates();
487  setTargetPosition( coordinates );
488  }
489  delete dialog;
490 }
491 
492 void RoutingInputWidget::showMenu()
493 {
494  d->m_menu->exec( mapToGlobal( QPoint( 0, size().height() ) ) );
495 }
496 
497 } // namespace Marble
498 
499 #include "RoutingInputWidget.moc"
QWidget::layout
QLayout * layout() const
QPixmap::size
QSize size() const
Marble::GeoDataCoordinates
A 3d point representation.
Definition: GeoDataCoordinates.h:52
QWidget
Marble::RoutingInputWidget::setIndex
void setIndex(int index)
Change the data index in the route request model.
Definition: RoutingInputWidget.cpp:403
Marble::MarblePlacemarkModel
This class represents a model of all place marks which are currently available through a given Placem...
Definition: MarblePlacemarkModel.h:37
TinyWebBrowser.h
QPixmap::width
int width() const
MarbleModel.h
This file contains the headers for MarbleModel.
QAction::data
QVariant data() const
QVector::constEnd
const_iterator constEnd() const
QMenu::addAction
void addAction(QAction *action)
QPointer
QWidget::mapToGlobal
QPoint mapToGlobal(const QPoint &pos) const
QHBoxLayout
QVariant::value
T value() const
Marble::RoutingInputWidget::targetPosition
GeoDataCoordinates targetPosition() const
Returns the geoposition selected by the user, or a default constructed geoposition if hasTargetPositi...
Definition: RoutingInputWidget.cpp:337
QPoint
QVector::first
T & first()
GeoDataExtendedData.h
Marble::RoutingInputWidget::searchFinished
void searchFinished(RoutingInputWidget *)
All runners are finished.
QObject::tr
QString tr(const char *sourceText, const char *disambiguation, int n)
Marble::GeoDataCoordinates::Degree
Definition: GeoDataCoordinates.h:66
BookmarkManager.h
QPolygon
Marble::RoutingInputWidget::hasInput
bool hasInput() const
Returns false iff the input text is empty.
Definition: RoutingInputWidget.cpp:374
Marble::RoutingInputWidget::searchResultModel
MarblePlacemarkModel * searchResultModel()
Returns the placemark model that contains search results.
Definition: RoutingInputWidget.cpp:357
Marble::RoutingInputWidget::reloadBookmarks
void reloadBookmarks()
Reload the bookmarks menu.
Definition: RoutingInputWidget.cpp:434
QWidget::size
QSize size() const
RoutingInputWidget.h
QBoxLayout::addWidget
void addWidget(QWidget *widget, int stretch, QFlags< Qt::AlignmentFlag > alignment)
RoutingManager.h
Marble::RoutingInputWidget::setTargetPosition
void setTargetPosition(const GeoDataCoordinates &position, const QString &name=QString())
Set the target position to the given coordinates, eliminating any previously set positions.
Definition: RoutingInputWidget.cpp:320
GoToDialog.h
QTimer
Marble::Oxygen::aluminumGray4
QColor const aluminumGray4
Definition: MarbleColors.h:92
QVariant::isNull
bool isNull() const
QObject
Marble::RoutingInputWidget::findPlacemarks
void findPlacemarks()
Search for placemarks matching the current input text.
Definition: RoutingInputWidget.cpp:346
Marble::RoutingInputWidget::abortMapInputRequest
void abortMapInputRequest()
Cancel a started input request from the map.
Definition: RoutingInputWidget.cpp:396
Marble::RoutingInputWidget::targetValidityChanged
void targetValidityChanged(bool targetValid)
hasTargetPosition changed because of selecting a placemark or changing the search term ...
QPainter
QString::isEmpty
bool isEmpty() const
Marble::RoutingInputWidget::activityRequest
void activityRequest(RoutingInputWidget *)
User requests to activate this widget.
ReverseGeocodingRunnerManager.h
QMenu::addSeparator
QAction * addSeparator()
QString
MarblePlacemarkModel.h
QColor
MarbleLocale.h
QLayout::setMargin
void setMargin(int margin)
QPixmap
Marble::PositionProviderStatus
PositionProviderStatus
Definition: PositionProviderPluginInterface.h:25
QAction::setData
void setData(const QVariant &userData)
QMenu
QSize
Marble::RoutingInputWidget::mapInputModeEnabled
void mapInputModeEnabled(RoutingInputWidget *, bool enabled)
User requests position input from the map.
QPixmap::height
int height() const
Marble::RoutingInputWidget::clear
void clear()
Remove target position and user input, if any.
Definition: RoutingInputWidget.cpp:419
Marble::MarbleGlobal::SmallScreen
Definition: MarbleGlobal.h:287
Marble::MarbleGlobal::getInstance
static MarbleGlobal * getInstance()
Definition: MarbleGlobal.cpp:37
GeoDataFolder.h
QKeyEvent
Marble::MarbleModel
The data model (not based on QAbstractModel) for a MarbleWidget.
Definition: MarbleModel.h:97
QVector::constBegin
const_iterator constBegin() const
Marble::RoutingInputWidget::hasTargetPosition
bool hasTargetPosition() const
Returns true if the user has selected a valid geo position.
Definition: RoutingInputWidget.cpp:332
MarbleLineEdit.h
QVector
QIcon::name
QString name() const
QMenu::addMenu
QAction * addMenu(QMenu *menu)
Marble::RoutingInputWidget::removalRequest
void removalRequest(RoutingInputWidget *)
User requests to remove this widget.
QAction
Marble::MarbleGlobal::profiles
Profiles profiles() const
Definition: MarbleGlobal.cpp:48
SearchRunnerManager.h
QAbstractItemModel
MarbleWidget.h
This file contains the headers for MarbleWidget.
RouteRequest.h
Marble::PositionProviderStatusAvailable
Definition: PositionProviderPluginInterface.h:29
QPushButton
Marble::GeoDataCoordinates::isValid
bool isValid() const
Returns.
Definition: GeoDataCoordinates.cpp:624
PositionTracking.h
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QVector::size
int size() const
QString::arg
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
Marble::GeoDataPlacemark
a class representing a point of interest on the map
Definition: GeoDataPlacemark.h:54
QBoxLayout::setSpacing
void setSpacing(int spacing)
QWidget::height
int height() const
QIcon
Marble::RoutingInputWidget::~RoutingInputWidget
~RoutingInputWidget()
Destructor.
Definition: RoutingInputWidget.cpp:296
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:13:41 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

marble

Skip menu "marble"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal