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

marble

  • sources
  • kde-4.12
  • 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  MarbleWidget* m_marbleWidget;
62 
63  RoutingInputLineEdit *m_lineEdit;
64 
65  QPushButton* m_removeButton;
66 
67  SearchRunnerManager m_placemarkRunnerManager;
68  ReverseGeocodingRunnerManager m_reverseGeocodingRunnerManager;
69 
70  MarblePlacemarkModel *m_placemarkModel;
71 
72  RouteRequest *m_route;
73 
74  int m_index;
75 
76  QTimer m_nominatimTimer;
77 
78  QVector<QIcon> m_progressAnimation;
79 
80  int m_currentFrame;
81 
82  QAction* m_bookmarkAction;
83 
84  QAction* m_mapInput;
85 
86  QAction* m_currentLocationAction;
87 
88  QAction* m_centerAction;
89 
90  QMenu *m_menu;
91 
93  RoutingInputWidgetPrivate( MarbleWidget* widget, int index, QWidget *parent );
94 
96  void adjustText();
97 
98  void createMenu( RoutingInputWidget *parent );
99 
100  QMenu* createBookmarkMenu( RoutingInputWidget *parent );
101 
102  void createBookmarkActions( QMenu* menu, GeoDataFolder* bookmarksFolder, QObject *parent );
103 
104  QPixmap addDropDownIndicator( const QPixmap &pixmap ) const;
105 
106  void updateDescription();
107 };
108 
109 void RoutingInputWidgetPrivate::updateDescription()
110 {
111  GeoDataPlacemark const placemark = (*m_route)[m_index];
112  GeoDataExtendedData const address = placemark.extendedData();
113  if ( address.contains( "house_number" ) && address.contains( "road" ) && address.contains( "city" ) )
114  {
115  QString const name = QObject::tr("%1 %2, %3", "An address with parameters %1=house number, %2=road, %3=city");
116  QString const houseNumber = address.value( "house_number" ).value().toString();
117  QString const road = address.value( "road" ).value().toString();
118  QString const city = address.value( "city" ).value().toString();
119  m_lineEdit->setText( name.arg( houseNumber ).arg( road ).arg( city ) );
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 #if QT_VERSION >= 0x40700
136  setPlaceholderText( QObject::tr( "Address or search term..." ) );
137 #endif
138 }
139 
140 void RoutingInputLineEdit::keyPressEvent(QKeyEvent *event)
141 {
142  MarbleLineEdit::keyPressEvent( event );
143  bool const returnPressed = event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter;
144  if ( returnPressed ) {
145  event->accept();
146  }
147 }
148 
149 RoutingInputWidgetPrivate::RoutingInputWidgetPrivate( MarbleWidget* widget, int index, QWidget *parent ) :
150  m_marbleModel( widget->model() ), m_marbleWidget( widget ), m_lineEdit( 0 ),
151  m_placemarkRunnerManager( m_marbleModel ),
152  m_reverseGeocodingRunnerManager( m_marbleModel ),
153  m_placemarkModel( 0 ), m_route( m_marbleModel->routingManager()->routeRequest() ), m_index( index ),
154  m_currentFrame( 0 ),
155  m_bookmarkAction( 0 ), m_mapInput( 0 ), m_currentLocationAction( 0 ),
156  m_centerAction( 0 )
157 {
158  m_lineEdit = new RoutingInputLineEdit( parent );
159  m_lineEdit->setDecorator( addDropDownIndicator( m_route->pixmap( m_index ) ) );
160 
161  m_removeButton = new QPushButton( parent );
162 #ifdef Q_WS_MAEMO_5
163  // maemo window background color is black, the 'X' is not visible -> use the red '-' sign
164  m_removeButton->setIcon( QIcon( ":/icons/remove.png" ) );
165 #else
166  m_removeButton->setIcon( QIcon( ":/marble/routing/icon-remove.png" ) );
167 #endif
168  m_removeButton->setToolTip( QObject::tr( "Remove via point" ) );
169  m_removeButton->setFlat( true );
170  m_removeButton->setMaximumWidth( 18 );
171 
172  m_nominatimTimer.setInterval( 1000 );
173  m_nominatimTimer.setSingleShot( true );
174 }
175 
176 void RoutingInputWidgetPrivate::adjustText()
177 {
178  m_nominatimTimer.start();
179 }
180 
181 void RoutingInputWidgetPrivate::createMenu( RoutingInputWidget *parent )
182 {
183  QMenu* result = new QMenu( parent );
184 
185  m_centerAction = result->addAction( QIcon( m_route->pixmap( m_index ) ), QObject::tr( "&Center Map here" ),
186  parent, SLOT(requestActivity()) );
187  result->addSeparator();
188 
189  m_currentLocationAction = result->addAction( QIcon( ":/icons/gps.png" ), QObject::tr( "Current &Location" ),
190  parent, SLOT(setCurrentLocation()) );
191  m_currentLocationAction->setEnabled( false );
192 
193  m_mapInput = result->addAction( QIcon( ":/icons/crosshairs.png" ), QObject::tr( "From &Map..." ) );
194  m_mapInput->setCheckable( true );
195  QObject::connect( m_mapInput, SIGNAL(triggered(bool)), parent, SLOT(setMapInputModeEnabled(bool)) );
196 
197  m_bookmarkAction = result->addAction( QIcon( ":/icons/bookmarks.png" ), QObject::tr( "From &Bookmark" ) );
198  m_bookmarkAction->setMenu( createBookmarkMenu( parent ) );
199 
200  m_menu = result;
201 }
202 
203 QMenu* RoutingInputWidgetPrivate::createBookmarkMenu( RoutingInputWidget *parent )
204 {
205  QMenu* result = new QMenu( parent );
206  result->addAction( QIcon( ":/icons/go-home.png" ), QObject::tr( "&Home" ), parent, SLOT(setHomePosition()) );
207 
208  QVector<GeoDataFolder*> folders = m_marbleModel->bookmarkManager()->folders();
209 
210  if ( folders.size() == 1 ) {
211  createBookmarkActions( result, folders.first(), parent );
212  } else {
213  QVector<GeoDataFolder*>::const_iterator i = folders.constBegin();
214  QVector<GeoDataFolder*>::const_iterator end = folders.constEnd();
215 
216  for (; i != end; ++i ) {
217  QMenu* menu = result->addMenu( QIcon( ":/icons/folder-bookmark.png" ), (*i)->name() );
218  createBookmarkActions( menu, *i, parent );
219  }
220  }
221 
222  return result;
223 }
224 
225 void RoutingInputWidgetPrivate::createBookmarkActions( QMenu* menu, GeoDataFolder* bookmarksFolder, QObject *parent )
226 {
227  QVector<GeoDataPlacemark*> bookmarks = bookmarksFolder->placemarkList();
228  QVector<GeoDataPlacemark*>::const_iterator i = bookmarks.constBegin();
229  QVector<GeoDataPlacemark*>::const_iterator end = bookmarks.constEnd();
230 
231  for (; i != end; ++i ) {
232  QAction *bookmarkAction = new QAction( (*i)->name(), parent );
233  bookmarkAction->setData( qVariantFromValue( (*i)->coordinate() ) );
234  menu->addAction( bookmarkAction );
235  QObject::connect( menu, SIGNAL(triggered(QAction*)), parent, SLOT(setBookmarkPosition(QAction*)) );
236  }
237 }
238 
239 QPixmap RoutingInputWidgetPrivate::addDropDownIndicator(const QPixmap &pixmap) const
240 {
241  QPixmap result( pixmap.size() + QSize( 8, pixmap.height() ) );
242  result.fill( QColor( Qt::transparent ) );
243  QPainter painter( &result );
244  painter.drawPixmap( 0, 0, pixmap );
245  QPoint const one( pixmap.width() + 1, pixmap.height() - 8 );
246  QPoint const two( one.x() + 6, one.y() );
247  QPoint const three( one.x() + 3, one.y() + 4 );
248  painter.setRenderHint( QPainter::Antialiasing, true );
249  painter.setPen( Qt::NoPen );
250  painter.setBrush( QColor( Oxygen::aluminumGray4 ) );
251  painter.drawConvexPolygon( QPolygon() << one << two << three );
252  return result;
253 }
254 
255 RoutingInputWidget::RoutingInputWidget( MarbleWidget* widget, int index, QWidget *parent ) :
256  QWidget( parent ), d( new RoutingInputWidgetPrivate( widget, index, this ) )
257 {
258  connect(d->m_lineEdit, SIGNAL(decoratorButtonClicked()), this, SLOT(showMenu()));
259  QHBoxLayout *layout = new QHBoxLayout( this );
260  layout->setSpacing( 0 );
261  layout->setMargin( 0 );
262 
263  bool const smallScreen = MarbleGlobal::getInstance()->profiles() & MarbleGlobal::SmallScreen;
264  if ( smallScreen ) {
265  layout->addWidget( d->m_lineEdit );
266  layout->addWidget( d->m_removeButton );
267  connect( d->m_lineEdit, SIGNAL(decoratorButtonClicked()), this, SLOT(openTargetSelectionDialog()) );
268  } else {
269  d->createMenu( this );
270  layout->addWidget( d->m_lineEdit );
271  layout->addWidget(d->m_removeButton);
272  }
273 
274  connect( d->m_removeButton, SIGNAL(clicked()), this, SLOT(requestRemoval()) );
275  connect( d->m_marbleModel->bookmarkManager(), SIGNAL(bookmarksChanged()),
276  this, SLOT(reloadBookmarks()) );
277  connect( d->m_marbleModel->positionTracking(), SIGNAL(statusChanged(PositionProviderStatus)),
278  this, SLOT(updateCurrentLocationButton(PositionProviderStatus)) );
279  connect( &d->m_placemarkRunnerManager, SIGNAL(searchResultChanged(QAbstractItemModel*)),
280  this, SLOT(setPlacemarkModel(QAbstractItemModel*)) );
281  connect( &d->m_reverseGeocodingRunnerManager, SIGNAL(reverseGeocodingFinished(GeoDataCoordinates,GeoDataPlacemark)),
282  this, SLOT(retrieveReverseGeocodingResult(GeoDataCoordinates,GeoDataPlacemark)) );
283  connect( d->m_lineEdit, SIGNAL(returnPressed()),
284  this, SLOT(findPlacemarks()) );
285  connect( d->m_lineEdit, SIGNAL(textEdited(QString)),
286  this, SLOT(setInvalid()) );
287  connect( &d->m_placemarkRunnerManager, SIGNAL(searchFinished(QString)),
288  this, SLOT(finishSearch()) );
289  connect( d->m_marbleModel->routingManager()->routeRequest(), SIGNAL(positionChanged(int,GeoDataCoordinates)),
290  this, SLOT(updatePosition(int,GeoDataCoordinates)) );
291  connect( &d->m_nominatimTimer, SIGNAL(timeout()),
292  this, SLOT(reverseGeocoding()) );
293  connect( this, SIGNAL(targetValidityChanged(bool)), this, SLOT(updateCenterButton(bool)) );
294  updateCenterButton( hasTargetPosition() );
295 
296  d->adjustText();
297 }
298 
299 RoutingInputWidget::~RoutingInputWidget()
300 {
301  delete d;
302 }
303 
304 void RoutingInputWidget::reverseGeocoding()
305 {
306  if ( !hasTargetPosition() ) {
307  return;
308  }
309 
310  QString const name = d->m_route->name( d->m_index );
311  if ( name.isEmpty() || name == tr( "Current Location" ) ) {
312  d->m_reverseGeocodingRunnerManager.reverseGeocoding( targetPosition() );
313  } else {
314  d->updateDescription();
315  }
316 }
317 
318 void RoutingInputWidget::setPlacemarkModel( QAbstractItemModel *model )
319 {
320  d->m_placemarkModel = dynamic_cast<MarblePlacemarkModel*>(model);
321 }
322 
323 void RoutingInputWidget::setTargetPosition( const GeoDataCoordinates &position, const QString &name )
324 {
325  if ( d->m_mapInput ) {
326  d->m_mapInput->setChecked( false );
327  }
328  d->m_route->setPosition( d->m_index, position, name );
329  if ( !name.isEmpty() ) {
330  d->updateDescription();
331  }
332  emit targetValidityChanged( true );
333 }
334 
335 bool RoutingInputWidget::hasTargetPosition() const
336 {
337  GeoDataCoordinates pos = targetPosition();
338  return pos.longitude() != 0.0 && pos.latitude() != 0.0;
339 }
340 
341 GeoDataCoordinates RoutingInputWidget::targetPosition() const
342 {
343  if ( d->m_index < d->m_route->size() ) {
344  return d->m_route->at( d->m_index );
345  } else {
346  return GeoDataCoordinates();
347  }
348 }
349 
350 void RoutingInputWidget::findPlacemarks()
351 {
352  QString text = d->m_lineEdit->text();
353  if ( text.isEmpty() ) {
354  setInvalid();
355  } else {
356  d->m_lineEdit->setBusy(true);
357  d->m_placemarkRunnerManager.findPlacemarks( text );
358  }
359 }
360 
361 MarblePlacemarkModel *RoutingInputWidget::searchResultModel()
362 {
363  return d->m_placemarkModel;
364 }
365 
366 void RoutingInputWidget::requestActivity()
367 {
368  if ( hasTargetPosition() ) {
369  emit activityRequest( this );
370  }
371 }
372 
373 void RoutingInputWidget::requestRemoval()
374 {
375  emit removalRequest( this );
376 }
377 
378 bool RoutingInputWidget::hasInput() const
379 {
380  return !d->m_lineEdit->text().isEmpty();
381 }
382 
383 void RoutingInputWidget::setMapInputModeEnabled( bool enabled )
384 {
385  emit mapInputModeEnabled( this, enabled );
386 }
387 
388 void RoutingInputWidget::finishSearch()
389 {
390  d->m_lineEdit->setBusy(false);
391  emit searchFinished( this );
392 }
393 
394 void RoutingInputWidget::setInvalid()
395 {
396  d->m_route->setPosition( d->m_index, GeoDataCoordinates() );
397  emit targetValidityChanged( false );
398 }
399 
400 void RoutingInputWidget::abortMapInputRequest()
401 {
402  if ( d->m_mapInput ) {
403  d->m_mapInput->setChecked( false );
404  }
405 }
406 
407 void RoutingInputWidget::setIndex( int index )
408 {
409  d->m_index = index;
410  d->m_lineEdit->setBusy(false);
411  d->m_lineEdit->setDecorator( d->addDropDownIndicator( d->m_route->pixmap( index ) ) );
412 }
413 
414 void RoutingInputWidget::updatePosition( int index, const GeoDataCoordinates & )
415 {
416  if ( index == d->m_index ) {
417  d->m_lineEdit->setBusy(false);
418  emit targetValidityChanged( hasTargetPosition() );
419  d->adjustText();
420  }
421 }
422 
423 void RoutingInputWidget::clear()
424 {
425  d->m_nominatimTimer.stop();
426  d->m_lineEdit->setBusy(false);
427  d->m_route->setPosition( d->m_index, GeoDataCoordinates() );
428  d->m_lineEdit->clear();
429  emit targetValidityChanged( false );
430 }
431 
432 void RoutingInputWidget::retrieveReverseGeocodingResult( const GeoDataCoordinates &, const GeoDataPlacemark &placemark )
433 {
434  (*d->m_route)[d->m_index] = placemark;
435  d->updateDescription();
436 }
437 
438 void RoutingInputWidget::setProgressAnimation( const QVector<QIcon> &animation )
439 {
440  d->m_progressAnimation = animation;
441 }
442 
443 void RoutingInputWidget::reloadBookmarks()
444 {
445  if ( d->m_bookmarkAction ) {
446  d->m_bookmarkAction->setMenu( d->createBookmarkMenu( this ) );
447  }
448 }
449 
450 void RoutingInputWidget::setHomePosition()
451 {
452  qreal lon( 0.0 ), lat( 0.0 );
453  int zoom( 0 );
454  d->m_marbleModel->home( lon, lat, zoom );
455  GeoDataCoordinates home( lon, lat, 0.0, GeoDataCoordinates::Degree );
456  setTargetPosition( home );
457  requestActivity();
458 }
459 
460 void RoutingInputWidget::updateCurrentLocationButton( PositionProviderStatus status )
461 {
462  if ( d->m_currentLocationAction ) {
463  d->m_currentLocationAction->setEnabled( status == PositionProviderStatusAvailable );
464  }
465 }
466 
467 void RoutingInputWidget::setCurrentLocation()
468 {
469  setTargetPosition( d->m_marbleModel->positionTracking()->currentLocation() );
470  requestActivity();
471 }
472 
473 void RoutingInputWidget::updateCenterButton( bool hasPosition )
474 {
475  if ( d->m_centerAction ) {
476  d->m_centerAction->setEnabled( hasPosition );
477  }
478 }
479 
480 void RoutingInputWidget::setBookmarkPosition( QAction* bookmark )
481 {
482  if ( !bookmark->data().isNull() ) {
483  setTargetPosition( bookmark->data().value<GeoDataCoordinates>() );
484  requestActivity();
485  }
486 }
487 
488 void RoutingInputWidget::openTargetSelectionDialog()
489 {
490  QPointer<GoToDialog> dialog = new GoToDialog( d->m_marbleModel, this );
491  dialog->setWindowTitle( tr( "Choose Placemark" ) );
492  dialog->setShowRoutingItems( false );
493  dialog->setSearchEnabled( false );
494  if ( dialog->exec() == QDialog::Accepted ) {
495  const GeoDataCoordinates coordinates = dialog->coordinates();
496  setTargetPosition( coordinates );
497  }
498  delete dialog;
499 }
500 
501 void RoutingInputWidget::showMenu()
502 {
503  d->m_menu->exec( mapToGlobal( QPoint( 0, size().height() ) ) );
504 }
505 
506 } // namespace Marble
507 
508 #include "RoutingInputWidget.moc"
QPainter
Marble::GeoDataCoordinates
A 3d point representation.
Definition: GeoDataCoordinates.h:52
Marble::RoutingInputWidget::setIndex
void setIndex(int index)
Change the data index in the route request model.
Definition: RoutingInputWidget.cpp:407
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
MarbleModel.h
This file contains the headers for MarbleModel.
QWidget
Marble::RoutingInputWidget::targetPosition
GeoDataCoordinates targetPosition() const
Returns the geoposition selected by the user, or a default constructed geoposition if hasTargetPositi...
Definition: RoutingInputWidget.cpp:341
GeoDataExtendedData.h
Marble::GeoDataCoordinates::latitude
qreal latitude(GeoDataCoordinates::Unit unit=GeoDataCoordinates::Radian) const
retrieves the latitude of the GeoDataCoordinates object use the unit parameter to switch between Radi...
Definition: GeoDataCoordinates.cpp:751
QObject
Marble::RoutingInputWidget::searchFinished
void searchFinished(RoutingInputWidget *)
All runners are finished.
Marble::GeoDataCoordinates::Degree
Definition: GeoDataCoordinates.h:66
BookmarkManager.h
Marble::RoutingInputWidget::hasInput
bool hasInput() const
Returns false iff the input text is empty.
Definition: RoutingInputWidget.cpp:378
Marble::RoutingInputWidget::searchResultModel
MarblePlacemarkModel * searchResultModel()
Returns the placemark model that contains search results.
Definition: RoutingInputWidget.cpp:361
Marble::MarbleWidget
A widget class that displays a view of the earth.
Definition: MarbleWidget.h:102
Marble::RoutingInputWidget::reloadBookmarks
void reloadBookmarks()
Reload the bookmarks menu.
Definition: RoutingInputWidget.cpp:443
RoutingInputWidget.h
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:323
GoToDialog.h
Marble::Oxygen::aluminumGray4
QColor const aluminumGray4
Definition: MarbleColors.h:92
Marble::RoutingInputWidget::setProgressAnimation
void setProgressAnimation(const QVector< QIcon > &animation)
Set the progress animation to use.
Definition: RoutingInputWidget.cpp:438
Marble::RoutingInputWidget::findPlacemarks
void findPlacemarks()
Search for placemarks matching the current input text.
Definition: RoutingInputWidget.cpp:350
Marble::RoutingInputWidget::abortMapInputRequest
void abortMapInputRequest()
Cancel a started input request from the map.
Definition: RoutingInputWidget.cpp:400
Marble::RoutingInputWidget::targetValidityChanged
void targetValidityChanged(bool targetValid)
hasTargetPosition changed because of selecting a placemark or changing the search term ...
Marble::RoutingInputWidget::activityRequest
void activityRequest(RoutingInputWidget *)
User requests to activate this widget.
ReverseGeocodingRunnerManager.h
MarblePlacemarkModel.h
MarbleLocale.h
Marble::PositionProviderStatus
PositionProviderStatus
Definition: PositionProviderPluginInterface.h:25
QAbstractItemModel
Marble::GeoDataCoordinates::longitude
qreal longitude(GeoDataCoordinates::Unit unit=GeoDataCoordinates::Radian) const
retrieves the longitude of the GeoDataCoordinates object use the unit parameter to switch between Rad...
Definition: GeoDataCoordinates.cpp:739
Marble::RoutingInputWidget::mapInputModeEnabled
void mapInputModeEnabled(RoutingInputWidget *, bool enabled)
User requests position input from the map.
Marble::RoutingInputWidget::clear
void clear()
Remove target position and user input, if any.
Definition: RoutingInputWidget.cpp:423
Marble::MarbleGlobal::SmallScreen
Definition: MarbleGlobal.h:268
Marble::MarbleGlobal::getInstance
static MarbleGlobal * getInstance()
Definition: MarbleGlobal.cpp:37
GeoDataFolder.h
Marble::RoutingInputWidget::hasTargetPosition
bool hasTargetPosition() const
Returns true if the user has selected a valid geo position.
Definition: RoutingInputWidget.cpp:335
MarbleLineEdit.h
Marble::RoutingInputWidget::removalRequest
void removalRequest(RoutingInputWidget *)
User requests to remove this widget.
Marble::MarbleGlobal::profiles
Profiles profiles() const
Definition: MarbleGlobal.cpp:48
SearchRunnerManager.h
MarbleWidget.h
This file contains the headers for MarbleWidget.
RouteRequest.h
Marble::PositionProviderStatusAvailable
Definition: PositionProviderPluginInterface.h:29
MarbleWidget
Wraps a Marble::MarbleWidget, providing access to important properties and methods.
Definition: MarbleDeclarativeWidget.h:50
PositionTracking.h
Marble::GeoDataPlacemark
a class representing a point of interest on the map
Definition: GeoDataPlacemark.h:54
Marble::RoutingInputWidget::~RoutingInputWidget
~RoutingInputWidget()
Destructor.
Definition: RoutingInputWidget.cpp:299
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:38:52 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
  • kstars
  • libkdeedu
  •   keduvocdocument
  • 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