• 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
  • apps
  • marble-qt
QtMainWindow.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 2006-2010 Torsten Rahn <tackat@kde.org>
9 // Copyright 2007 Inge Wallin <ingwa@kde.org>
10 // Copyright 2011-2013 Bernhard Beschow <bbeschow@cs.tu-berlin.de>
11 // Copyright 2012 Illya Kovalevskyy <illya.kovalevskyy@gmail.com>
12 // Copyright 2012 Mohammed Nafees <nafees.technocool@gmail.com>
13 //
14 
15 #include "QtMainWindow.h"
16 
17 #include "MarbleDebug.h"
18 #include <QList>
19 #include <QSettings>
20 #include <QUrl>
21 #include <QCloseEvent>
22 #include <QTimer>
23 #include <QVariant>
24 #include <QVector>
25 #include <QAction>
26 #include <QLabel>
27 #include <QWhatsThis>
28 #include <QApplication>
29 #include <QIcon>
30 #include <QMenuBar>
31 #include <QStatusBar>
32 #include <QProgressBar>
33 #include <QToolBar>
34 #include <QDesktopServices>
35 #include <QFileDialog>
36 #include <QMessageBox>
37 #include <QPrintDialog>
38 #include <QPrinter>
39 #include <QDialogButtonBox>
40 #include <QHBoxLayout>
41 #include <QScrollArea>
42 #include <QClipboard>
43 #include <QShortcut>
44 #include <QDockWidget>
45 #include <QNetworkProxy>
46 
47 #include "EditBookmarkDialog.h"
48 #include "BookmarkManagerDialog.h"
49 #include "CurrentLocationWidget.h"
50 #include "MapViewWidget.h"
51 #include "MarbleDirs.h"
52 #include "MarbleAboutDialog.h"
53 #include "QtMarbleConfigDialog.h"
54 #include "SunControlWidget.h"
55 #include "TimeControlWidget.h"
56 #include "MarbleLocale.h"
57 #include "DownloadRegionDialog.h"
58 #include "ViewportParams.h"
59 #include "AbstractDataPlugin.h"
60 #include "AbstractFloatItem.h"
61 #include "MarbleModel.h"
62 #include "MarbleClock.h"
63 #include "HttpDownloadManager.h"
64 #include "BookmarkManager.h"
65 #include "NewBookmarkFolderDialog.h"
66 #include "GeoDataCoordinates.h"
67 #include "GeoDataDocument.h"
68 #include "GeoDataPlacemark.h"
69 #include "GeoUriParser.h"
70 #include "routing/RoutingManager.h"
71 #include "routing/RoutingProfilesModel.h"
72 #include "routing/RoutingWidget.h"
73 #include "routing/RouteRequest.h"
74 #include "ParseRunnerPlugin.h"
75 #include "PositionTracking.h"
76 #include "PositionProviderPlugin.h"
77 #include "PluginManager.h"
78 #include "MapThemeDownloadDialog.h"
79 #include "MapWizard.h"
80 #include "GoToDialog.h"
81 #include "MarbleWidgetInputHandler.h"
82 #include "Planet.h"
83 #include "cloudsync/CloudSyncManager.h"
84 #include "cloudsync/BookmarkSyncManager.h"
85 #include "cloudsync/RouteSyncManager.h"
86 #include "MovieCaptureDialog.h"
87 #include "DataMigration.h"
88 
89 namespace
90 {
91  const char* POSITION_STRING = "Position:";
92  const char* DISTANCE_STRING = "Altitude:";
93  const char* ZOOM_STRING = "Zoom:";
94  const char* DATETIME_STRING = "Time:";
95 }
96 
97 using namespace Marble;
98 /* TRANSLATOR Marble::MainWindow */
99 
100 MainWindow::MainWindow(const QString& marbleDataPath, const QVariantMap& cmdLineSettings, QWidget *parent) :
101  QMainWindow(parent),
102  m_controlView( 0 ),
103  m_savedSize( QSize(-1, -1) ),
104  m_sunControlDialog( 0 ),
105  m_timeControlDialog( 0 ),
106  m_configDialog( 0 ),
107  m_downloadRegionDialog( 0 ),
108  m_movieCaptureDialog( 0 ),
109 
110  // File Menu
111  m_fileMenu( 0 ),
112  m_viewMenu( 0 ),
113  m_helpMenu( 0 ),
114  m_settingsMenu( 0 ),
115  m_panelMenu( 0 ),
116  m_viewSizeMenu( 0 ),
117  m_infoBoxesMenu( 0 ),
118  m_onlineServicesMenu( 0 ),
119  m_bookmarkMenu( 0 ),
120  m_openAction( 0 ),
121  m_exportMapAction( 0 ),
122  m_downloadAction( 0 ),
123  m_downloadRegionAction( 0 ),
124  m_printPreviewAction( 0 ),
125  m_printAction( 0 ),
126  m_workOfflineAction( 0 ),
127  m_quitAction( 0 ),
128  m_mapWizardAction( 0 ),
129 
130  // Edit Menu
131  m_copyMapAction( 0 ),
132  m_copyCoordinatesAction( 0 ),
133  m_osmEditAction( 0 ),
134  m_recordMovieAction( 0 ),
135  m_stopRecordingAction( 0 ),
136 
137  // View Menu
138  m_showCloudsAction( 0 ),\
139  m_controlSunAction( 0 ),
140  m_controlTimeAction( 0 ),
141  m_reloadAction( 0 ),
142 
143  // Settings Menu
144  m_fullScreenAction( 0 ),
145  m_statusBarAction( 0 ),
146  m_configDialogAction( 0 ),
147  m_viewSizeActsGroup( 0 ),
148 
149  // Help Menu
150  m_whatsThisAction( 0 ),
151  m_aboutMarbleAction( 0 ),
152  m_aboutQtAction( 0 ),
153  m_lockFloatItemsAction( 0 ),
154  m_handbookAction( 0 ),
155 
156  // Status Bar
157  m_positionLabel( 0 ),
158  m_distanceLabel( 0 ),
159  m_zoomLabel( 0 ),
160  m_clockLabel( 0 ),
161  m_downloadProgressBar( 0 ),
162  m_toggleTileLevelAction( 0 ),
163 
164  //Bookmark Menu
165  m_addBookmarkAction( 0 ),
166  m_setHomeAction( 0 ),
167  m_toggleBookmarkDisplayAction( 0 ),
168  m_manageBookmarksAction( 0 )
169 {
170  setUpdatesEnabled( false );
171 
172  QString selectedPath = marbleDataPath.isEmpty() ? readMarbleDataPath() : marbleDataPath;
173  if ( !selectedPath.isEmpty() )
174  MarbleDirs::setMarbleDataPath( selectedPath );
175 
176 #ifdef Q_OS_WIN
177  DataMigration* migration = new DataMigration(this);
178  migration->exec();
179 #endif
180 
181  m_controlView = new ControlView( this );
182 
183  setWindowTitle( tr("Marble - Virtual Globe") );
184  setWindowIcon( QIcon(":/icons/marble.png") );
185  setCentralWidget( m_controlView );
186 
187  // Initializing config dialog
188  m_configDialog = new QtMarbleConfigDialog( m_controlView->marbleWidget(),
189  m_controlView->cloudSyncManager(),
190  this );
191  connect( m_configDialog, SIGNAL(settingsChanged()),
192  this, SLOT(updateSettings()) );
193  connect( m_configDialog, SIGNAL(clearVolatileCacheClicked()),
194  m_controlView->marbleWidget(), SLOT(clearVolatileTileCache()) );
195  connect( m_configDialog, SIGNAL(clearPersistentCacheClicked()),
196  m_controlView->marbleModel(), SLOT(clearPersistentTileCache()) );
197  connect( m_configDialog, SIGNAL(syncNowClicked()),
198  m_controlView->cloudSyncManager()->bookmarkSyncManager(), SLOT(startBookmarkSync()) );
199  connect(m_configDialog, SIGNAL(syncNowClicked()),
200  m_configDialog, SLOT(disableSyncNow()));
201 
202  // Load bookmark file. If it does not exist, a default one will be used.
203  m_controlView->marbleModel()->bookmarkManager()->loadFile( "bookmarks/bookmarks.kml" );
204 
205  createActions();
206  QList<QAction*> const panelActions = m_controlView->setupDockWidgets( this );
207  createMenus( panelActions );
208  createStatusBar();
209 
210  connect( m_controlView->marbleWidget(), SIGNAL(themeChanged(QString)),
211  this, SLOT(updateMapEditButtonVisibility(QString)) );
212  connect( m_controlView, SIGNAL(showMapWizard()), this, SLOT(showMapWizard()) );
213  connect( m_controlView, SIGNAL(mapThemeDeleted()), this, SLOT(fallBackToDefaultTheme()) );
214 
215  setUpdatesEnabled( true );
216 
217  m_position = tr( NOT_AVAILABLE );
218  m_distance = marbleWidget()->distanceString();
219  m_zoom = QString::number( marbleWidget()->tileZoomLevel() );
220 
221  m_clock = QLocale().toString( m_controlView->marbleModel()->clockDateTime().addSecs( m_controlView->marbleModel()->clockTimezone() ), QLocale::ShortFormat );
222  QMetaObject::invokeMethod(this,
223  "initObject", Qt::QueuedConnection,
224  Q_ARG(QVariantMap, cmdLineSettings));
225 }
226 
227 MainWindow::~MainWindow()
228 {
229  delete m_movieCaptureDialog;
230 }
231 
232 void MainWindow::addGeoDataFile( const QString &fileName )
233 {
234  QFileInfo file( fileName );
235 
236  if ( !file.exists() )
237  return;
238 
239  // delay file loading to initObject(), such that restoring view from previous session in readSettings()
240  // doesn't interfere with focusing on these files
241  m_commandlineFilePaths << file.absoluteFilePath();
242 }
243 
244 void MainWindow::initObject(const QVariantMap& cmdLineSettings)
245 {
246  QCoreApplication::processEvents ();
247  setupStatusBar();
248  readSettings(cmdLineSettings);
249 
250  foreach ( const QString &path, m_commandlineFilePaths ) {
251  m_controlView->marbleModel()->addGeoDataFile( path );
252  }
253  m_commandlineFilePaths.clear();
254 }
255 
256 void MainWindow::createActions()
257  {
258  m_openAction = new QAction( QIcon(":/icons/document-open.png"), tr( "&Open..."), this );
259  m_openAction->setShortcut( tr( "Ctrl+O" ) );
260  m_openAction->setStatusTip( tr( "Open a file for viewing on Marble"));
261  connect( m_openAction, SIGNAL(triggered()),
262  this, SLOT(openFile()) );
263 
264  m_downloadAction = new QAction( QIcon(":/icons/get-hot-new-stuff.png"), tr("&Download Maps..."), this);
265  connect(m_downloadAction, SIGNAL(triggered()), this, SLOT(openMapDialog()));
266 
267  m_exportMapAction = new QAction( QIcon(":/icons/document-save-as.png"), tr("&Export Map..."), this);
268  m_exportMapAction->setShortcut(tr("Ctrl+S"));
269  m_exportMapAction->setStatusTip(tr("Save a screenshot of the map"));
270  connect(m_exportMapAction, SIGNAL(triggered()), this, SLOT(exportMapScreenShot()));
271 
272  // Action: Download Region
273  m_downloadRegionAction = new QAction( tr( "Download &Region..." ), this );
274  m_downloadRegionAction->setStatusTip( tr( "Download a map region in different zoom levels for offline usage" ) );
275  connect( m_downloadRegionAction, SIGNAL(triggered()), SLOT(showDownloadRegionDialog()) );
276 
277  m_printAction = new QAction( QIcon(":/icons/document-print.png"), tr("&Print..."), this);
278  m_printAction->setShortcut(tr("Ctrl+P"));
279  m_printAction->setStatusTip(tr("Print a screenshot of the map"));
280  connect(m_printAction, SIGNAL(triggered()), this, SLOT(printMapScreenShot()));
281 
282  m_printPreviewAction = new QAction( QIcon(":/icons/document-print-preview.png"), tr("Print Previe&w ..."), this);
283  m_printPreviewAction->setStatusTip(tr("Print a screenshot of the map"));
284  connect(m_printPreviewAction, SIGNAL(triggered()), m_controlView, SLOT(printPreview()));
285 
286  m_quitAction = new QAction( QIcon(":/icons/application-exit.png"), tr("&Quit"), this);
287  m_quitAction->setShortcut(tr("Ctrl+Q"));
288  m_quitAction->setStatusTip(tr("Quit the Application"));
289  connect(m_quitAction, SIGNAL(triggered()), this, SLOT(close()));
290 
291  m_copyMapAction = new QAction( QIcon(":/icons/edit-copy.png"), tr("&Copy Map"), this);
292  m_copyMapAction->setShortcut(tr("Ctrl+C"));
293  m_copyMapAction->setStatusTip(tr("Copy a screenshot of the map"));
294  connect(m_copyMapAction, SIGNAL(triggered()), this, SLOT(copyMap()));
295 
296  m_osmEditAction = new QAction( QIcon(":/icons/edit-map.png"), tr( "&Edit Map" ), this );
297  m_osmEditAction->setShortcut(tr( "Ctrl+E" ) );
298  m_osmEditAction->setStatusTip(tr( "Edit the current map region in an external editor" ) );
299  updateMapEditButtonVisibility( m_controlView->marbleWidget()->mapThemeId() );
300  connect( m_osmEditAction, SIGNAL(triggered()), m_controlView, SLOT(launchExternalMapEditor()) );
301 
302  m_recordMovieAction = new QAction(tr("&Record Movie"), this);
303  m_recordMovieAction->setStatusTip(tr("Records a movie of the globe"));
304  m_recordMovieAction->setShortcut(QKeySequence("Ctrl+Shift+R"));
305  m_recordMovieAction->setIcon(QIcon(":/icons/animator.png"));
306  connect(m_recordMovieAction, SIGNAL(triggered()),
307  this, SLOT(showMovieCaptureDialog()));
308 
309  m_stopRecordingAction = new QAction( tr("&Stop recording"), this );
310  m_stopRecordingAction->setStatusTip( tr("Stop recording a movie of the globe") );
311  m_stopRecordingAction->setShortcut(QKeySequence( "Ctrl+Shift+S" ));
312  m_stopRecordingAction->setEnabled( false );
313  connect( m_stopRecordingAction, SIGNAL(triggered()),
314  this, SLOT(stopRecording()) );
315 
316  m_configDialogAction = new QAction( QIcon(":/icons/settings-configure.png"),tr("&Configure Marble"), this);
317  m_configDialogAction->setStatusTip(tr("Show the configuration dialog"));
318  connect(m_configDialogAction, SIGNAL(triggered()), this, SLOT(editSettings()));
319 
320  m_copyCoordinatesAction = new QAction( QIcon(":/icons/copy-coordinates.png"), tr("C&opy Coordinates"), this);
321  m_copyCoordinatesAction->setStatusTip(tr("Copy the center coordinates as text"));
322  connect(m_copyCoordinatesAction, SIGNAL(triggered()), this, SLOT(copyCoordinates()));
323 
324  m_fullScreenAction = new QAction( QIcon(":/icons/view-fullscreen.png"), tr("&Full Screen Mode"), this);
325  m_fullScreenAction->setShortcut(tr("Ctrl+Shift+F"));
326  m_fullScreenAction->setCheckable( true );
327  m_fullScreenAction->setStatusTip(tr("Full Screen Mode"));
328  connect(m_fullScreenAction, SIGNAL(triggered(bool)), this, SLOT(showFullScreen(bool)));
329 
330  m_statusBarAction = new QAction( tr("&Show Status Bar"), this);
331  m_statusBarAction->setCheckable( true );
332  m_statusBarAction->setStatusTip(tr("Show Status Bar"));
333  connect(m_statusBarAction, SIGNAL(triggered(bool)), this, SLOT(showStatusBar(bool)));
334 
335 
336  m_lockFloatItemsAction = new QAction( QIcon(":/icons/unlock.png"), tr("Lock Position"),this);
337  m_lockFloatItemsAction->setCheckable( true );
338  m_lockFloatItemsAction->setStatusTip(tr("Lock Position of Floating Items"));
339  connect(m_lockFloatItemsAction, SIGNAL(triggered(bool)), this, SLOT(lockPosition(bool)));
340 
341  m_showCloudsAction = new QAction( QIcon(":/icons/clouds.png"), tr("&Clouds"), this);
342  m_showCloudsAction->setCheckable( true );
343  m_showCloudsAction->setStatusTip(tr("Show Real Time Cloud Cover"));
344  connect(m_showCloudsAction, SIGNAL(triggered(bool)), this, SLOT(showClouds(bool)));
345 
346  m_workOfflineAction = new QAction( QIcon(":/icons/user-offline.png"), tr("Work Off&line"), this);
347  m_workOfflineAction->setCheckable( true );
348  connect(m_workOfflineAction, SIGNAL(triggered(bool)), this, SLOT(workOffline(bool)));
349 
350  m_controlTimeAction = new QAction( QIcon(":/icons/clock.png"), tr( "&Time Control..." ), this );
351  m_controlTimeAction->setStatusTip( tr( "Configure Time Control " ) );
352  connect( m_controlTimeAction, SIGNAL(triggered()), this, SLOT(controlTime()) );
353 
354  m_controlSunAction = new QAction( tr( "S&un Control..." ), this );
355  m_controlSunAction->setStatusTip( tr( "Configure Sun Control" ) );
356  connect( m_controlSunAction, SIGNAL(triggered()), this, SLOT(controlSun()) );
357 
358  m_reloadAction = new QAction( QIcon(":/icons/view-refresh.png"), tr("&Redisplay"), this);
359  m_reloadAction->setShortcut(tr("F5"));
360  m_reloadAction->setStatusTip(tr("Reload Current Map"));
361  connect(m_reloadAction, SIGNAL(triggered()), this, SLOT(reload()));
362 
363  m_handbookAction = new QAction( QIcon(":/icons/help-contents.png"), tr("Marble Virtual Globe &Handbook"), this);
364  m_handbookAction->setShortcut(tr("F1"));
365  m_handbookAction->setStatusTip(tr("Show the Handbook for Marble Virtual Globe"));
366  connect(m_handbookAction, SIGNAL(triggered()), this, SLOT(handbook()));
367 
368  m_whatsThisAction = new QAction( QIcon(":/icons/help-whatsthis.png"), tr("What's &This"), this);
369  m_whatsThisAction->setShortcut(tr("Shift+F1"));
370  m_whatsThisAction->setStatusTip(tr("Show a detailed explanation of the action."));
371  connect(m_whatsThisAction, SIGNAL(triggered()), this, SLOT(enterWhatsThis()));
372 
373  m_aboutMarbleAction = new QAction( QIcon(":/icons/marble.png"), tr("&About Marble Virtual Globe"), this);
374  m_aboutMarbleAction->setStatusTip(tr("Show the application's About Box"));
375  connect(m_aboutMarbleAction, SIGNAL(triggered()), this, SLOT(aboutMarble()));
376 
377  m_aboutQtAction = new QAction(tr("About &Qt"), this);
378  m_aboutQtAction->setStatusTip(tr("Show the Qt library's About box"));
379  connect(m_aboutQtAction, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
380 
381  //Bookmark Actions
382  m_addBookmarkAction = new QAction( QIcon(":/icons/bookmark-new.png"), tr("&Add Bookmark"),this);
383  m_addBookmarkAction->setShortcut(tr("Ctrl+B"));
384  m_addBookmarkAction->setStatusTip(tr("Add Bookmark"));
385  connect( m_addBookmarkAction, SIGNAL(triggered()), this, SLOT(openEditBookmarkDialog()) );
386 
387  m_setHomeAction = new QAction( QIcon(":/icons/go-home.png"), tr( "&Set Home Location" ),this);
388  m_setHomeAction->setStatusTip( tr( "&Set Home Location" ) );
389  connect( m_setHomeAction, SIGNAL(triggered()), this, SLOT(setHome()) );
390 
391  m_toggleBookmarkDisplayAction = new QAction(tr( "Show &Bookmarks" ), this);
392  m_toggleBookmarkDisplayAction->setStatusTip( tr( "Toggle display of Bookmarks" ) );
393  m_toggleBookmarkDisplayAction->setCheckable( true );
394  connect( m_toggleBookmarkDisplayAction, SIGNAL(triggered(bool)), this, SLOT(showBookmarks(bool)) );
395 
396  m_manageBookmarksAction = new QAction( QIcon( ":/icons/bookmarks-organize.png" ), tr( "&Manage Bookmarks" ), this);
397  m_manageBookmarksAction->setStatusTip( tr( "Manage Bookmarks" ) );
398  connect( m_manageBookmarksAction, SIGNAL(triggered()), this, SLOT(manageBookmarks()) );
399 
400  // Map Wizard action
401  m_mapWizardAction = new QAction( QIcon( ":/icons/create-new-map.png" ), tr("&Create a New Map..."), this );
402  m_mapWizardAction->setStatusTip( tr( "A wizard guides you through the creation of your own map theme." ) );
403  connect( m_mapWizardAction, SIGNAL(triggered()), SLOT(showMapWizard()) );
404 
405  // Statusbar Actions
406  m_toggleTileLevelAction = new QAction( tr( "Show Tile Zoom Level" ), statusBar() );
407  m_toggleTileLevelAction->setCheckable( true );
408  m_toggleTileLevelAction->setChecked( false );
409  connect( m_toggleTileLevelAction, SIGNAL(triggered(bool)),
410  this, SLOT(showZoomLevel(bool)) );
411 
412  // View size actions
413  m_viewSizeActsGroup = new QActionGroup( this );
414 
415  QAction *actDefault = new QAction( tr( "Default (Resizable)" ), this );
416  actDefault->setCheckable(true);
417  m_viewSizeActsGroup->addAction(actDefault);
418 
419  QAction *actSeparator = new QAction(this);
420  actSeparator->setSeparator(true);
421  m_viewSizeActsGroup->addAction(actSeparator);
422 
423  QAction *actNtsc = new QAction( tr( "NTSC (720x486)" ), this );
424  actNtsc->setData( QSize( 720, 486 ) );
425  actNtsc->setCheckable(true);
426  m_viewSizeActsGroup->addAction(actNtsc);
427 
428  QAction *actPal = new QAction( tr( "PAL (720x576)" ), this );
429  actPal->setData( QSize( 720, 576 ) );
430  actPal->setCheckable(true);
431  m_viewSizeActsGroup->addAction(actPal);
432 
433  QAction *actNtsc16x9 = new QAction( tr( "NTSC 16:9 (864x486)" ), this );
434  actNtsc16x9->setData( QSize( 864, 486 ) );
435  actNtsc16x9->setCheckable(true);
436  m_viewSizeActsGroup->addAction(actNtsc16x9);
437 
438  QAction *actPal16x9 = new QAction( tr( "PAL 16:9 (1024x576)" ), this );
439  actPal16x9->setData( QSize( 1024, 576 ) );
440  actPal16x9->setCheckable(true);
441  m_viewSizeActsGroup->addAction(actPal16x9);
442 
443  QAction *actDvd = new QAction( tr( "DVD (852x480p)" ), this );
444  actDvd->setData( QSize( 852, 480 ) );
445  actDvd->setCheckable(true);
446  m_viewSizeActsGroup->addAction(actDvd);
447 
448  QAction *actHd = new QAction( tr( "HD (1280x720p)" ), this );
449  actHd->setData( QSize( 1280, 720 ) );
450  actHd->setCheckable(true);
451  m_viewSizeActsGroup->addAction(actHd);
452 
453  QAction *actFullhd = new QAction( tr( "Full HD (1920x1080p)" ), this );
454  actFullhd->setData( QSize( 1920, 1080 ) );
455  actFullhd->setCheckable(true);
456  m_viewSizeActsGroup->addAction(actFullhd);
457 
458  QAction *actDc = new QAction( tr( "Digital Cinema (2048x1536)" ), this );
459  actDc->setData( QSize( 2048, 1536 ) );
460  actDc->setCheckable(true);
461  m_viewSizeActsGroup->addAction(actDc);
462 
476  connect( m_viewSizeActsGroup, SIGNAL(triggered(QAction*)), this, SLOT(changeViewSize(QAction*)) );
477 
478  actDefault->setChecked( true );
479 }
480 
481 void MainWindow::createMenus( const QList<QAction*> &panelActions )
482 {
483  m_fileMenu = menuBar()->addMenu(tr("&File"));
484  m_fileMenu->addAction(m_openAction);
485  m_fileMenu->addAction(m_downloadAction);
486  m_fileMenu->addAction( m_downloadRegionAction );
487  m_fileMenu->addAction( m_mapWizardAction );
488  m_fileMenu->addAction(m_exportMapAction);
489  m_fileMenu->addSeparator();
490  m_fileMenu->addAction(m_printAction);
491  m_fileMenu->addAction(m_printPreviewAction);
492  m_fileMenu->addSeparator();
493  m_fileMenu->addAction(m_workOfflineAction);
494  m_fileMenu->addAction(m_quitAction);
495 
496  m_fileMenu = menuBar()->addMenu(tr("&Edit"));
497  m_fileMenu->addAction(m_copyMapAction);
498  m_fileMenu->addAction(m_copyCoordinatesAction);
499  m_fileMenu->addAction( m_osmEditAction );
500  m_fileMenu->addSeparator();
501  m_fileMenu->addAction(m_recordMovieAction);
502  m_fileMenu->addAction(m_stopRecordingAction);
503 
504  m_viewMenu = menuBar()->addMenu(tr("&View"));
505  m_infoBoxesMenu = new QMenu( "&Info Boxes" );
506  m_onlineServicesMenu = new QMenu( "&Online Services" );
507  createPluginsMenus();
508 
509  m_bookmarkMenu = menuBar()->addMenu(tr("&Bookmarks"));
510  createBookmarkMenu();
511  connect( m_bookmarkMenu, SIGNAL(aboutToShow()), this, SLOT(createBookmarkMenu()) );
512 
513  m_panelMenu = new QMenu( "&Panels" );
514  foreach( QAction* action, panelActions ) {
515  m_panelMenu->addAction( action );
516  }
517 
518  m_viewSizeMenu = new QMenu( "&View Size" );
519  m_viewSizeMenu->addActions( m_viewSizeActsGroup->actions() );
520 
521  m_settingsMenu = menuBar()->addMenu(tr("&Settings"));
522  m_settingsMenu->addMenu( m_panelMenu );
523  m_settingsMenu->addAction(m_statusBarAction);
524  m_settingsMenu->addSeparator();
525  m_settingsMenu->addMenu( m_viewSizeMenu );
526  m_settingsMenu->addAction(m_fullScreenAction);
527  m_settingsMenu->addSeparator();
528  m_settingsMenu->addAction(m_configDialogAction);
529 
530  m_helpMenu = menuBar()->addMenu(tr("&Help"));
531  m_helpMenu->addAction(m_handbookAction);
532  m_helpMenu->addSeparator();
533  m_helpMenu->addAction(m_whatsThisAction);
534  m_helpMenu->addSeparator();
535  m_helpMenu->addAction(m_aboutMarbleAction);
536  m_helpMenu->addAction(m_aboutQtAction);
537 
538  // FIXME: Discuss if this is the best place to put this
539  QList<RenderPlugin *> pluginList = m_controlView->marbleWidget()->renderPlugins();
540  QList<RenderPlugin *>::const_iterator it = pluginList.constBegin();
541  QList<RenderPlugin *>::const_iterator const listEnd = pluginList.constEnd();
542  for (; it != listEnd; ++it ) {
543  connect( (*it), SIGNAL(actionGroupsChanged()),
544  this, SLOT(createPluginMenus()) );
545  }
546 }
547 
548 void MainWindow::createPluginsMenus()
549 {
550  m_onlineServicesMenu->clear();
551  m_infoBoxesMenu->clear();
552  m_viewMenu->clear();
553 
554  m_viewMenu->addAction(m_reloadAction);
555  m_viewMenu->addSeparator();
556 
557  // Do not create too many menu entries on a MID
558  // FIXME: Set up another way of switching the plugins on and off.
559  if( MarbleGlobal::getInstance()->profiles() & MarbleGlobal::SmallScreen ) {
560  return;
561  }
562 
563  m_infoBoxesMenu->addAction(m_lockFloatItemsAction);
564  m_infoBoxesMenu->addSeparator();
565  QList<QAction*> themeActions;
566 
567  QList<RenderPlugin *> renderPluginList = m_controlView->marbleWidget()->renderPlugins();
568  QList<RenderPlugin *>::const_iterator i = renderPluginList.constBegin();
569  QList<RenderPlugin *>::const_iterator const end = renderPluginList.constEnd();
570  for (; i != end; ++i ) {
571  switch( (*i)->renderType() ) {
572  case RenderPlugin::TopLevelRenderType:
573  m_viewMenu->addAction( (*i)->action() );
574  break;
575  case RenderPlugin::PanelRenderType:
576  m_infoBoxesMenu->addAction( (*i)->action() );
577  break;
578  case RenderPlugin::OnlineRenderType:
579  m_onlineServicesMenu->addAction( (*i)->action() );
580  break;
581  case RenderPlugin::ThemeRenderType:
582  themeActions.append( (*i)->action() );
583  break;
584  default:
585  break;
586  }
587  }
588  m_viewMenu->addMenu( m_infoBoxesMenu );
589  m_viewMenu->addMenu( m_onlineServicesMenu );
590  m_viewMenu->addActions( themeActions );
591  m_viewMenu->addAction( m_showCloudsAction );
592  m_viewMenu->addSeparator();
593  m_viewMenu->addAction(m_controlSunAction);
594  m_viewMenu->addAction(m_controlTimeAction);
595 }
596 
597 void MainWindow::createBookmarksListMenu( QMenu *bookmarksListMenu, const GeoDataContainer *container )
598 {
599  //m_bookmarksListMenu->clear();
600 
601  QVector<GeoDataPlacemark*> bookmarks = container->placemarkList();
602 
603  foreach ( const GeoDataPlacemark *placemark, bookmarks ) {
604  QAction *bookmarkAction = new QAction( placemark->name(), this );
605  QVariant var;
606 
607  const GeoDataLookAt* lookAt = placemark->lookAt();
608  if ( !lookAt ) {
609  GeoDataCoordinates coordinates = placemark->coordinate();
610  GeoDataLookAt coordinateToLookAt;
611  coordinateToLookAt.setCoordinates( coordinates );
612  coordinateToLookAt.setRange( marbleWidget()->lookAt().range() );
613  var.setValue( coordinateToLookAt );
614  } else {
615  var.setValue( *lookAt );
616  }
617  bookmarkAction->setData( var );
618  bookmarksListMenu->addAction( bookmarkAction );
619  }
620 
621 }
622 void MainWindow::createBookmarkMenu()
623 {
624  m_bookmarkMenu->clear();
625  m_bookmarkMenu->addAction( m_addBookmarkAction );
626  m_bookmarkMenu->addAction( m_toggleBookmarkDisplayAction );
627  m_toggleBookmarkDisplayAction->setChecked( m_controlView->marbleModel()->bookmarkManager()->document()->isVisible() );
628  m_bookmarkMenu->addAction( m_setHomeAction );
629  m_bookmarkMenu->addAction( m_manageBookmarksAction );
630 
631  m_bookmarkMenu->addSeparator();
632 
633  m_bookmarkMenu->addAction( QIcon( ":/icons/go-home.png" ), "&Home",
634  m_controlView->marbleWidget(), SLOT(goHome()) );
635  createFolderList( m_bookmarkMenu, m_controlView->marbleModel()->bookmarkManager()->document() );
636 }
637 
638 void MainWindow::createFolderList( QMenu *bookmarksListMenu, const GeoDataContainer *container )
639 {
640  QVector<GeoDataFolder*> folders = container->folderList();
641 
642  if ( folders.size() == 1 ) {
643  createBookmarksListMenu( bookmarksListMenu, folders.first() );
644  }
645  else {
646  foreach ( const GeoDataFolder *folder, folders ) {
647  QMenu *subMenu = bookmarksListMenu->addMenu( QIcon( ":/icons/folder-bookmark.png" ), folder->name() );
648  createFolderList( subMenu, folder );
649  connect( subMenu, SIGNAL(triggered(QAction*)),
650  this, SLOT(lookAtBookmark(QAction*)) );
651  }
652  }
653 
654  createBookmarksListMenu( bookmarksListMenu, container );
655  connect( bookmarksListMenu, SIGNAL(triggered(QAction*)),
656  this, SLOT(lookAtBookmark(QAction*)) );
657 }
658 
659 
660 void MainWindow::lookAtBookmark( QAction *action)
661 {
662  if ( action->data().isNull() ) {
663  return;
664  }
665 
666  GeoDataLookAt temp = qvariant_cast<GeoDataLookAt>( action->data() ) ;
667  m_controlView->marbleWidget()->flyTo( temp ) ;
668  mDebug() << " looking at bookmark having longitude : "<< temp.longitude(GeoDataCoordinates::Degree)
669  << " latitude : "<< temp.latitude(GeoDataCoordinates::Degree)
670  << " distance : " << temp.range();
671 
672 
673 }
674 
675 void MainWindow::manageBookmarks()
676 {
677  MarbleModel * const model = m_controlView->marbleModel();
678  QPointer<BookmarkManagerDialog> dialog = new BookmarkManagerDialog( model, this );
679 #ifdef Q_WS_MAEMO_5
680  dialog->setButtonBoxVisible( false );
681  dialog->setAttribute( Qt::WA_Maemo5StackedWindow );
682  dialog->setWindowFlags( Qt::Window );
683 #endif // Q_WS_MAEMO_5
684  dialog->exec();
685  delete dialog;
686 }
687 
688 void MainWindow::setHome()
689 {
690  MarbleWidget *widget = m_controlView->marbleWidget();
691  widget->model()->setHome( widget->centerLongitude(), widget->centerLatitude(), widget->zoom() );
692 }
693 
694 void MainWindow::openEditBookmarkDialog()
695 {
696  MarbleWidget *widget = m_controlView->marbleWidget();
697  QPointer<EditBookmarkDialog> dialog = new EditBookmarkDialog( widget->model()->bookmarkManager(), widget );
698  dialog->setMarbleWidget( widget );
699  dialog->setCoordinates( widget->lookAt().coordinates() );
700  dialog->setRange( widget->lookAt().range() );
701  dialog->setReverseGeocodeName();
702  if ( dialog->exec() == QDialog::Accepted ) {
703  widget->model()->bookmarkManager()->addBookmark( dialog->folder(), dialog->bookmark() );
704  }
705  delete dialog;
706 }
707 
708 void MainWindow::createPluginMenus()
709 {
710  // Remove and delete toolbars if they exist
711  while( !m_pluginToolbars.isEmpty() ) {
712  QToolBar* tb = m_pluginToolbars.takeFirst();
713  this->removeToolBar(tb);
714  tb->deleteLater();
715  }
716 
717  // Do not create too many menu entries on a MID
718  // FIXME: Set up another way of switching the plugins on and off.
719  if( MarbleGlobal::getInstance()->profiles() & MarbleGlobal::SmallScreen ) {
720  return;
721  }
722 
723  //remove and delete old menus if they exist
724  while( !m_pluginMenus.isEmpty() ) {
725  m_viewMenu->removeAction( m_pluginMenus.takeFirst() );
726  }
727 
728  QList<RenderPlugin *> renderPluginList = m_controlView->marbleWidget()->renderPlugins();
729  QList<RenderPlugin *>::const_iterator i = renderPluginList.constBegin();
730  QList<RenderPlugin *>::const_iterator const end = renderPluginList.constEnd();
731 
732  for (; i != end; ++i ) {
733 
734  // menus
735  const QList<QActionGroup*> *tmp_actionGroups = (*i)->actionGroups();
736  if( (*i)->enabled() && tmp_actionGroups ) {
737  foreach( QActionGroup *ag, *tmp_actionGroups ) {
738  if( !ag->actions().isEmpty() ) {
739  m_pluginMenus.append( m_viewMenu->addSeparator() );
740  }
741  foreach( QAction *action, ag->actions() ) {
742  m_viewMenu->addAction( action );
743  m_pluginMenus.append( action );
744  }
745  }
746  }
747 
748  // toolbars
749  const QList<QActionGroup*> *tmp_toolbarActionGroups = (*i)->toolbarActionGroups();
750  if ( (*i)->enabled() && tmp_toolbarActionGroups ) {
751  QToolBar* toolbar = new QToolBar(this);
752  toolbar->setObjectName( QString( "plugin-toolbar-%1" ).arg( (*i)->nameId() ) );
753 
754  foreach( QActionGroup* ag, *tmp_toolbarActionGroups ) {
755  toolbar->addActions( ag->actions() );
756  if ( tmp_toolbarActionGroups->last() != ag ) {
757  toolbar->addSeparator();
758  }
759  }
760 
761  m_pluginToolbars.append( toolbar );
762  this->addToolBar( toolbar );
763  }
764  }
765 
766 // FIXME: load the menus once the method has been settled on
767 }
768 
769 void MainWindow::createStatusBar()
770 {
771  statusBar()->showMessage(tr("Ready"));
772  statusBar()->hide();
773 }
774 
775 void MainWindow::openMapDialog()
776 {
777  QPointer<MapThemeDownloadDialog> dialog( new MapThemeDownloadDialog( m_controlView->marbleWidget() ) );
778  dialog->exec();
779  delete dialog;
780 }
781 
782 void MainWindow::exportMapScreenShot()
783 {
784  QString fileName = QFileDialog::getSaveFileName(this, tr("Export Map"), // krazy:exclude=qclasses
785  QDir::homePath(),
786  tr("Images (*.jpg *.png)"));
787 
788  if ( !fileName.isEmpty() )
789  {
790  // Take the case into account where no file format is indicated
791  const char * format = 0;
792  if ( !fileName.endsWith(QLatin1String( "png" ), Qt::CaseInsensitive)
793  && !fileName.endsWith(QLatin1String( "jpg" ), Qt::CaseInsensitive) )
794  {
795  format = "JPG";
796  }
797 
798  QPixmap mapPixmap = m_controlView->mapScreenShot();
799  bool success = mapPixmap.save( fileName, format );
800  if ( !success )
801  {
802  QMessageBox::warning(this, tr("Marble"), // krazy:exclude=qclasses
803  tr( "An error occurred while trying to save the file.\n" ),
804  QMessageBox::Ok);
805  }
806  }
807 }
808 
809 
810 void MainWindow::showFullScreen( bool isChecked )
811 {
812  if ( isChecked ) {
813  setWindowState( windowState() | Qt::WindowFullScreen ); // set
814  }
815  else {
816  setWindowState( windowState() & ~Qt::WindowFullScreen ); // reset
817  }
818 
819  m_fullScreenAction->setChecked( isChecked ); // Sync state with the GUI
820 }
821 
822 void MainWindow::copyCoordinates()
823 {
824  qreal lon = m_controlView->marbleWidget()->centerLongitude();
825  qreal lat = m_controlView->marbleWidget()->centerLatitude();
826 
827  QString positionString = GeoDataCoordinates( lon, lat, 0.0, GeoDataCoordinates::Degree ).toString();
828  QClipboard *clipboard = QApplication::clipboard();
829 
830  clipboard->setText( positionString );
831 }
832 
833 void MainWindow::copyMap()
834 {
835  QPixmap mapPixmap = m_controlView->mapScreenShot();
836  QClipboard *clipboard = QApplication::clipboard();
837 
838  clipboard->setPixmap( mapPixmap );
839 }
840 
841 void MainWindow::showStatusBar( bool isChecked )
842 {
843  if ( isChecked )
844  {
845  statusBar()->show();
846  }
847  else
848  {
849  statusBar()->hide();
850  }
851 
852  m_statusBarAction->setChecked( isChecked ); // Sync state with the GUI
853 }
854 
855 void MainWindow::showClouds( bool isChecked )
856 {
857  m_controlView->marbleWidget()->setShowClouds( isChecked );
858 
859  m_showCloudsAction->setChecked( isChecked ); // Sync state with the GUI
860 }
861 
862 void MainWindow::showBookmarks( bool show )
863 {
864  m_controlView->marbleModel()->bookmarkManager()->setShowBookmarks( show );
865 
866  m_toggleBookmarkDisplayAction->setChecked( show ); // Sync state with the GUI
867 }
868 
869 void MainWindow::workOffline( bool offline )
870 {
871  m_controlView->setWorkOffline( offline );
872 
873  m_workOfflineAction->setChecked( offline ); // Sync state with the GUI
874 }
875 
876 void MainWindow::lockPosition( bool isChecked )
877 {
878  QList<AbstractFloatItem *> floatItemList = m_controlView->marbleWidget()->floatItems();
879 
880  QList<AbstractFloatItem *>::const_iterator i = floatItemList.constBegin();
881  QList<AbstractFloatItem *>::const_iterator const end = floatItemList.constEnd();
882  for (; i != end; ++i )
883  {
884  // Locking one would suffice as it affects all.
885  // Nevertheless go through all.
886  (*i)->setPositionLocked(isChecked);
887  }
888 }
889 
890 void MainWindow::controlSun()
891 {
892  if (!m_sunControlDialog) {
893  m_sunControlDialog = new SunControlWidget( m_controlView->marbleWidget(), this );
894  connect( m_sunControlDialog, SIGNAL(showSun(bool)),
895  this, SLOT (showSun(bool)) );
896  }
897 
898  m_sunControlDialog->show();
899  m_sunControlDialog->raise();
900  m_sunControlDialog->activateWindow();
901 }
902 
903 void MainWindow::controlTime()
904 {
905  if ( !m_timeControlDialog )
906  {
907  m_timeControlDialog = new TimeControlWidget( m_controlView->marbleModel()->clock() );
908  }
909  /* m_timeControlDialog is a modeless dialog so that user may adjust time and interact with main application simultaneously.*/
910  m_timeControlDialog->show();
911  m_timeControlDialog->raise();
912  m_timeControlDialog->activateWindow();
913 }
914 
915 
916 void MainWindow::showSun( bool active )
917 {
918  m_controlView->marbleWidget()->setShowSunShading( active );
919 }
920 
921 void MainWindow::reload()
922 {
923  m_controlView->marbleWidget()->reloadMap();
924 }
925 
926 void MainWindow::enterWhatsThis()
927 {
928  QWhatsThis::enterWhatsThisMode();
929 }
930 
931 void MainWindow::aboutMarble()
932 {
933  MarbleAboutDialog dlg(this);
934  dlg.setApplicationTitle( tr( "Marble Virtual Globe %1" ).arg( ControlView::applicationVersion() ) );
935  dlg.exec();
936 }
937 
938 void MainWindow::handbook()
939 {
940  const QString code = MarbleLocale::languageCode();
941 
942  QUrl handbookLocation( "http://docs.kde.org/stable/" + code + "/kdeedu/marble/index.html" );
943 
944  if ( handbookLocation.isEmpty() )
945  handbookLocation = QUrl("http://docs.kde.org/stable/en/kdeedu/marble/index.html");
946 
947  if( !QDesktopServices::openUrl( handbookLocation ) )
948  qDebug() << "URL not opened";
949 }
950 
951 void MainWindow::showPosition( const QString& position )
952 {
953  m_position = position;
954  updateStatusBar();
955 }
956 
957 void MainWindow::showDistance( const QString& distance )
958 {
959  m_distance = distance;
960  updateStatusBar();
961 }
962 
963 void MainWindow::showZoom( int zoom )
964 {
965  m_zoom = QString::number( zoom );
966  updateStatusBar();
967 }
968 
969 void MainWindow::showDateTime()
970 {
971  m_clock = QLocale().toString( m_controlView->marbleModel()->clockDateTime().addSecs( m_controlView->marbleModel()->clockTimezone() ), QLocale::ShortFormat );
972  updateStatusBar();
973 }
974 
975 void MainWindow::updateStatusBar()
976 {
977  if ( m_positionLabel )
978  m_positionLabel->setText( QString( "%1 %2" ).
979  arg( tr( POSITION_STRING ) ).arg( m_position ) );
980 
981  if ( m_distanceLabel )
982  m_distanceLabel->setText( QString( "%1 %2" )
983  .arg( tr( DISTANCE_STRING ) ).arg( m_distance ) );
984 
985  if ( m_zoomLabel )
986  m_zoomLabel->setText( QString( "%1 %2" )
987  .arg( tr( ZOOM_STRING ) ).arg( m_zoom ) );
988 
989  if ( m_clockLabel )
990  m_clockLabel->setText( QString( "%1 %2" )
991  .arg( tr( DATETIME_STRING ) ).arg( m_clock ) );
992 }
993 
994 void MainWindow::openFile()
995 {
996  const PluginManager *const pluginManager = m_controlView->marbleModel()->pluginManager();
997 
998  QStringList allFileExtensions;
999  QStringList filters;
1000  foreach ( const ParseRunnerPlugin *plugin, pluginManager->parsingRunnerPlugins() ) {
1001  if ( plugin->nameId() == "Cache" )
1002  continue;
1003 
1004  const QStringList fileExtensions = plugin->fileExtensions().replaceInStrings( QRegExp( "^" ), "*." );
1005  const QString filter = QString( "%1 (%2)" ).arg( plugin->fileFormatDescription() ).arg( fileExtensions.join( " " ) );
1006  filters << filter;
1007  allFileExtensions << fileExtensions;
1008  }
1009 
1010  allFileExtensions.sort(); // sort since file extensions are visible under Windows
1011  const QString allFileTypes = QString( "%1 (%2)" ).arg( tr( "All Supported Files" ) ).arg( allFileExtensions.join( " " ) );
1012 
1013  filters.sort();
1014  filters.prepend( allFileTypes );
1015  const QString filter = filters.join( ";;" );
1016 
1017  QStringList fileNames = QFileDialog::getOpenFileNames( this, tr( "Open File" ), m_lastFileOpenPath, filter );
1018 
1019  if ( !fileNames.isEmpty() ) {
1020  const QString firstFile = fileNames.first();
1021  m_lastFileOpenPath = QFileInfo( firstFile ).absolutePath();
1022  }
1023 
1024  foreach( const QString &fileName, fileNames ) {
1025  m_controlView->marbleModel()->addGeoDataFile( fileName );
1026  }
1027 }
1028 
1029 void MainWindow::setupStatusBar()
1030 {
1031  statusBar()->setSizeGripEnabled( true );
1032  statusBar()->setContextMenuPolicy( Qt::ActionsContextMenu );
1033 
1034  statusBar()->addAction( m_toggleTileLevelAction );
1035  setupDownloadProgressBar();
1036 
1037  m_positionLabel = new QLabel( );
1038  m_positionLabel->setIndent( 5 );
1039  QString templatePositionString =
1040  QString( "%1 000\xb0 00\' 00\"_, 000\xb0 00\' 00\"_" ).arg(POSITION_STRING);
1041  int maxPositionWidth = fontMetrics().boundingRect(templatePositionString).width()
1042  + 2 * m_positionLabel->margin() + 2 * m_positionLabel->indent();
1043  m_positionLabel->setFixedWidth( maxPositionWidth );
1044  statusBar()->addPermanentWidget ( m_positionLabel );
1045 
1046  m_distanceLabel = new QLabel( );
1047  m_distanceLabel->setIndent( 5 );
1048  QString templateDistanceString =
1049  QString( "%1 00.000,0 mu" ).arg(DISTANCE_STRING);
1050  int maxDistanceWidth = fontMetrics().boundingRect(templateDistanceString).width()
1051  + 2 * m_distanceLabel->margin() + 2 * m_distanceLabel->indent();
1052  m_distanceLabel->setFixedWidth( maxDistanceWidth );
1053  statusBar()->addPermanentWidget ( m_distanceLabel );
1054 
1055  m_zoomLabel = new QLabel( );
1056  m_zoomLabel->setIndent( 5 );
1057  QString templateZoomString =
1058  QString( "%1 00" ).arg(ZOOM_STRING);
1059  int maxZoomWidth = fontMetrics().boundingRect(templateZoomString).width()
1060  + 2 * m_zoomLabel->margin() + 2 * m_zoomLabel->indent();
1061  m_zoomLabel->setFixedWidth( maxZoomWidth );
1062  // Not added here, but activated by the user with the context menu
1063 
1064  m_clockLabel = new QLabel( );
1065  m_clockLabel->setIndent( 5 );
1066  QString templateDateTimeString = QString( "%1 %2" ).arg( DATETIME_STRING , QLocale().toString( QDateTime::fromString ( "01:01:1000", "dd:mm:yyyy"), QLocale::ShortFormat ) );
1067  int maxDateTimeWidth = fontMetrics().boundingRect( templateDateTimeString ).width()
1068  + 2 * m_clockLabel->margin() + 2 * m_clockLabel->indent();
1069  m_clockLabel->setFixedWidth( maxDateTimeWidth );
1070  statusBar()->addPermanentWidget ( m_clockLabel );
1071 
1072  connect( marbleWidget(), SIGNAL(mouseMoveGeoPosition(QString)),
1073  this, SLOT(showPosition(QString)) );
1074  connect( marbleWidget(), SIGNAL(distanceChanged(QString)),
1075  this, SLOT(showDistance(QString)) );
1076  connect( marbleWidget(), SIGNAL(tileLevelChanged(int)),
1077  this, SLOT(showZoom(int)) );
1078  connect( m_controlView->marbleModel()->clock(), SIGNAL(timeChanged()),
1079  this, SLOT(showDateTime()) );
1080 
1081  updateStatusBar();
1082 }
1083 
1084 void MainWindow::setupDownloadProgressBar()
1085 {
1086  m_downloadProgressBar = new QProgressBar;
1087  m_downloadProgressBar->setVisible( true );
1088  statusBar()->addPermanentWidget( m_downloadProgressBar );
1089 
1090  HttpDownloadManager * const downloadManager =
1091  m_controlView->marbleModel()->downloadManager();
1092  Q_ASSERT( downloadManager );
1093  connect( downloadManager, SIGNAL(progressChanged( int, int )), SLOT(handleProgress( int, int )) );
1094  connect( downloadManager, SIGNAL(jobRemoved()), SLOT(removeProgressItem()) );
1095 }
1096 
1097 void MainWindow::handleProgress( int active, int queued ){
1098  m_downloadProgressBar->setUpdatesEnabled( false );
1099  if ( m_downloadProgressBar->value() < 0 ) {
1100  m_downloadProgressBar->setMaximum( 1 );
1101  m_downloadProgressBar->setValue( 0 );
1102  m_downloadProgressBar->setVisible( true );
1103  } else {
1104  m_downloadProgressBar->setMaximum( qMax<int>( m_downloadProgressBar->maximum(), active + queued ) );
1105  }
1106 
1107  m_downloadProgressBar->setUpdatesEnabled( true );
1108 }
1109 
1110 void MainWindow::removeProgressItem(){
1111  m_downloadProgressBar->setUpdatesEnabled( false );
1112  m_downloadProgressBar->setValue( m_downloadProgressBar->value() + 1 );
1113  if ( m_downloadProgressBar->value() == m_downloadProgressBar->maximum() ) {
1114  m_downloadProgressBar->reset();
1115  m_downloadProgressBar->setVisible( false );
1116  }
1117 
1118  m_downloadProgressBar->setUpdatesEnabled( true );
1119 }
1120 
1121 void MainWindow::closeEvent(QCloseEvent *event)
1122 {
1123  writeSettings();
1124  event->accept();
1125 }
1126 
1127 QString MainWindow::readMarbleDataPath()
1128 {
1129  QSettings settings;
1130 
1131  settings.beginGroup("MarbleWidget");
1132  QString marbleDataPath;
1133  marbleDataPath = settings.value("marbleDataPath", "").toString(),
1134  settings.endGroup();
1135 
1136  return marbleDataPath;
1137 }
1138 
1139 void MainWindow::readSettings(const QVariantMap& overrideSettings)
1140 {
1141  QSettings settings;
1142 
1143  settings.beginGroup("MainWindow");
1144  resize(settings.value("size", QSize(640, 480)).toSize());
1145  move(settings.value("pos", QPoint(200, 200)).toPoint());
1146  showFullScreen(settings.value("fullScreen", false ).toBool());
1147  showStatusBar(settings.value("statusBar", false ).toBool());
1148  showZoomLevel(settings.value("showZoomLevel",false).toBool());
1149  show();
1150  showClouds(settings.value("showClouds", true ).toBool());
1151  workOffline(settings.value("workOffline", false ).toBool());
1152  m_controlView->marbleWidget()->setShowAtmosphere(settings.value("showAtmosphere", true ).toBool());
1153  m_lastFileOpenPath = settings.value("lastFileOpenDir", QDir::homePath()).toString();
1154  showBookmarks( settings.value( "showBookmarks", true ).toBool() );
1155  restoreState( settings.value("windowState").toByteArray() );
1156  settings.endGroup();
1157 
1158  setUpdatesEnabled(false);
1159 
1160  settings.beginGroup("MarbleWidget");
1161  QString mapThemeId;
1162  const QVariantMap::ConstIterator mapThemeIdIt = overrideSettings.find(QLatin1String("mapTheme"));
1163  if ( mapThemeIdIt != overrideSettings.constEnd() ) {
1164  mapThemeId = mapThemeIdIt.value().toString();
1165  } else {
1166  mapThemeId = settings.value("mapTheme", m_controlView->defaultMapThemeId() ).toString();
1167  }
1168  mDebug() << Q_FUNC_INFO << "mapThemeId:" << mapThemeId;
1169  m_controlView->marbleWidget()->setMapThemeId( mapThemeId );
1170  m_controlView->marbleWidget()->setProjection(
1171  (Projection)(settings.value("projection", Spherical ).toInt())
1172  );
1173 
1174  // Set home position
1175  m_controlView->marbleModel()->setHome(
1176  settings.value("homeLongitude", 9.4).toDouble(),
1177  settings.value("homeLatitude", 54.8).toDouble(),
1178  settings.value("homeZoom", 1050 ).toInt()
1179  );
1180 
1181  // Center on/Distance
1182  const QVariantMap::ConstIterator distanceIt = overrideSettings.find(QLatin1String("distance"));
1183  const bool isDistanceOverwritten = (distanceIt != overrideSettings.constEnd());
1184 
1185  const QVariantMap::ConstIterator lonLatIt = overrideSettings.find(QLatin1String("lonlat"));
1186  if ( lonLatIt != overrideSettings.constEnd() ) {
1187  const QVariantList lonLat = lonLatIt.value().toList();
1188  m_controlView->marbleWidget()->centerOn( lonLat.at(0).toDouble(), lonLat.at(1).toDouble() );
1189  } else {
1190  switch ( m_configDialog->onStartup() ) {
1191  case Marble::LastLocationVisited:
1192  m_controlView->marbleWidget()->centerOn(
1193  settings.value("quitLongitude", 0.0).toDouble(),
1194  settings.value("quitLatitude", 0.0).toDouble() );
1195  if (! isDistanceOverwritten) {
1196  // set default radius to 1350 (Atlas theme's "sharp" radius)
1197  m_controlView->marbleWidget()->setRadius( settings.value("quitRadius", 1350).toInt() );
1198  }
1199  break;
1200  case Marble::ShowHomeLocation:
1201  m_controlView->marbleWidget()->goHome();
1202  break;
1203  default:
1204  break;
1205  }
1206  }
1207  if (isDistanceOverwritten) {
1208  m_controlView->marbleWidget()->setDistance(distanceIt.value().toDouble());
1209  }
1210 
1211  // Geo URI parsing
1212  QString geoUriString = qvariant_cast<QString>( overrideSettings.value("geo-uri", ""));
1213  if ( !geoUriString.isEmpty() ) {
1214  m_controlView->openGeoUri( geoUriString );
1215  }
1216 
1217  bool isLocked = settings.value( "lockFloatItemPositions", false ).toBool();
1218  m_lockFloatItemsAction->setChecked( isLocked );
1219  lockPosition(isLocked);
1220  settings.endGroup();
1221 
1222  settings.beginGroup( "Sun" );
1223  m_controlView->marbleWidget()->setShowSunShading( settings.value( "showSun", false ).toBool() );
1224  m_controlView->marbleWidget()->setShowCityLights( settings.value( "showCitylights", false ).toBool() );
1225  m_controlView->marbleWidget()->setLockToSubSolarPoint( settings.value( "lockToSubSolarPoint", false ).toBool() );
1226  m_controlView->marbleWidget()->setSubSolarPointIconVisible( settings.value( "subSolarPointIconVisible", false ).toBool() );
1227  settings.endGroup();
1228 
1229  settings.beginGroup( "Time" );
1230  if( settings.value( "systemTime", "true" ).toBool() == true )
1231  {
1232  /* nothing to do */
1233  }
1234  else if( settings.value( "lastSessionTime", "true" ).toBool() == true )
1235  {
1236  m_controlView->marbleModel()->setClockDateTime( settings.value( "dateTime" ).toDateTime() );
1237  m_controlView->marbleModel()->setClockSpeed( settings.value( "speedSlider", 1 ).toInt() );
1238  }
1239  settings.endGroup();
1240 
1241  setUpdatesEnabled(true);
1242 
1243  // Load previous route settings
1244  settings.beginGroup( "Routing" );
1245  {
1246  RoutingManager *const routingManager = m_controlView->marbleModel()->routingManager();
1247  routingManager->readSettings();
1248  bool const startupWarning = settings.value( "showGuidanceModeStartupWarning", QVariant( true ) ).toBool();
1249  routingManager->setShowGuidanceModeStartupWarning( startupWarning );
1250  routingManager->setLastOpenPath( settings.value( "lastRouteOpenPath", QDir::homePath() ).toString() );
1251  routingManager->setLastSavePath( settings.value( "lastRouteSavePath", QDir::homePath() ).toString() );
1252 
1253  QColor tempColor;
1254  tempColor = QColor( settings.value( "routeColorStandard", Oxygen::skyBlue4.name() ).toString() );
1255  tempColor.setAlpha( settings.value( "routeAlphaStandard", 200 ).toInt() );
1256  routingManager->setRouteColorStandard( tempColor );
1257 
1258  tempColor = QColor( settings.value( "routeColorHighlighted", Oxygen::skyBlue1.name() ).toString() );
1259  tempColor.setAlpha( settings.value( "routeAlphaHighlighted", 200 ).toInt() );
1260  routingManager->setRouteColorHighlighted( tempColor );
1261 
1262  tempColor = QColor( settings.value( "routeColorAlternative", Oxygen::aluminumGray4.name() ).toString() );
1263  tempColor.setAlpha( settings.value( "routeAlphaAlternative", 200 ).toInt() );
1264  routingManager->setRouteColorAlternative( tempColor );
1265  }
1266  settings.endGroup();
1267 
1268 
1269  settings.beginGroup( "Routing Profile" );
1270  if ( settings.contains( "Num" ) ) {
1271  QList<RoutingProfile> profiles;
1272  int numProfiles = settings.value( "Num", 0 ).toInt();
1273  for ( int i = 0; i < numProfiles; ++i ) {
1274  settings.beginGroup( QString( "Profile %0" ).arg(i) );
1275  QString name = settings.value( "Name", tr( "Unnamed" ) ).toString();
1276  RoutingProfile profile( name );
1277  foreach ( const QString& pluginName, settings.childGroups() ) {
1278  settings.beginGroup( pluginName );
1279  profile.pluginSettings().insert( pluginName, QHash<QString, QVariant>() );
1280  foreach ( const QString& key, settings.childKeys() ) {
1281  if ( key != "Enabled" ) {
1282  profile.pluginSettings()[ pluginName ].insert( key, settings.value( key ) );
1283  }
1284  }
1285  settings.endGroup();
1286  }
1287  profiles << profile;
1288  settings.endGroup();
1289  }
1290  m_controlView->marbleModel()->routingManager()->profilesModel()->setProfiles( profiles );
1291  } else {
1292  m_controlView->marbleModel()->routingManager()->profilesModel()->loadDefaultProfiles();
1293  }
1294  int const profileIndex = settings.value( "currentIndex", 0 ).toInt();
1295  if ( profileIndex >= 0 && profileIndex < m_controlView->marbleModel()->routingManager()->profilesModel()->rowCount() ) {
1296  RoutingProfile profile = m_controlView->marbleModel()->routingManager()->profilesModel()->profiles().at( profileIndex );
1297  m_controlView->marbleModel()->routingManager()->routeRequest()->setRoutingProfile( profile );
1298  }
1299 
1300  settings.endGroup();
1301 
1302  settings.beginGroup( "Plugins");
1303  PositionTracking* tracking = m_controlView->marbleModel()->positionTracking();
1304  tracking->readSettings();
1305  QString positionProvider = settings.value( "activePositionTrackingPlugin", QString() ).toString();
1306  if ( !positionProvider.isEmpty() ) {
1307  const PluginManager* pluginManager = m_controlView->marbleModel()->pluginManager();
1308  foreach( const PositionProviderPlugin* plugin, pluginManager->positionProviderPlugins() ) {
1309  if ( plugin->nameId() == positionProvider ) {
1310  PositionProviderPlugin* instance = plugin->newInstance();
1311  instance->setMarbleModel( m_controlView->marbleModel() );
1312  tracking->setPositionProviderPlugin( instance );
1313  break;
1314  }
1315  }
1316  }
1317  settings.endGroup();
1318 
1319  settings.beginGroup( "Tracking" );
1320  if ( settings.contains( "autoCenter" ) || settings.contains( "recenterMode" ) ) {
1321  CurrentLocationWidget* trackingWidget = m_controlView->currentLocationWidget();
1322  Q_ASSERT( trackingWidget );
1323  trackingWidget->setRecenterMode( settings.value( "recenterMode", 0 ).toInt() );
1324  trackingWidget->setAutoZoom( settings.value( "autoZoom", false ).toBool() );
1325  trackingWidget->setTrackVisible( settings.value( "trackVisible", true ).toBool() );
1326  trackingWidget->setLastOpenPath( settings.value( "lastTrackOpenPath", QDir::homePath() ).toString() );
1327  trackingWidget->setLastSavePath( settings.value( "lastTrackSavePath", QDir::homePath() ).toString() );
1328  }
1329  settings.endGroup();
1330 
1331  // The config dialog has to read settings.
1332  m_configDialog->readSettings();
1333 
1334  settings.beginGroup( "Navigation" );
1335  m_controlView->setExternalMapEditor( settings.value( "externalMapEditor", "" ).toString() );
1336  settings.endGroup();
1337 
1338  settings.beginGroup( "CloudSync" );
1339  CloudSyncManager* cloudSyncManager = m_controlView->cloudSyncManager();
1340  cloudSyncManager->setOwncloudCredentials( settings.value( "owncloudServer", "" ).toString(),
1341  settings.value( "owncloudUsername", "" ).toString(),
1342  settings.value( "owncloudPassword", "" ).toString() );
1343  cloudSyncManager->setSyncEnabled( settings.value( "enableSync", false ).toBool() );
1344  cloudSyncManager->routeSyncManager()->setRouteSyncEnabled( settings.value( "syncRoutes", true ).toBool() );
1345  cloudSyncManager->bookmarkSyncManager()->setBookmarkSyncEnabled( settings.value( "syncBookmarks", true ).toBool() );
1346  settings.endGroup();
1347 }
1348 
1349 void MainWindow::writeSettings()
1350 {
1351  QSettings settings;
1352 
1353  settings.beginGroup( "MainWindow" );
1354  settings.setValue( "size", size() );
1355  settings.setValue( "pos", pos() );
1356  settings.setValue( "fullScreen", m_fullScreenAction->isChecked() );
1357  settings.setValue( "statusBar", m_statusBarAction->isChecked() );
1358  settings.setValue( "showZoomLevel", m_toggleTileLevelAction->isChecked() );
1359  settings.setValue( "showClouds", m_showCloudsAction->isChecked() );
1360  settings.setValue( "workOffline", m_workOfflineAction->isChecked() );
1361  settings.setValue( "showAtmosphere", m_controlView->marbleWidget()->showAtmosphere() );
1362  settings.setValue( "lastFileOpenDir", m_lastFileOpenPath );
1363  settings.setValue( "showBookmarks", m_toggleBookmarkDisplayAction->isChecked() );
1364  settings.setValue( "windowState", saveState() );
1365  settings.endGroup();
1366 
1367  settings.beginGroup( "MarbleWidget" );
1368  // Get the 'home' values from the widget and store them in the settings.
1369  qreal homeLon = 0;
1370  qreal homeLat = 0;
1371  int homeZoom = 0;
1372  m_controlView->marbleModel()->home( homeLon, homeLat, homeZoom );
1373  QString mapTheme = m_controlView->marbleWidget()->mapThemeId();
1374  int projection = (int)( m_controlView->marbleWidget()->projection() );
1375 
1376  settings.setValue( "homeLongitude", homeLon );
1377  settings.setValue( "homeLatitude", homeLat );
1378  settings.setValue( "homeZoom", homeZoom );
1379 
1380  settings.setValue( "mapTheme", mapTheme );
1381  settings.setValue( "projection", projection );
1382 
1383  // Get the 'quit' values from the widget and store them in the settings.
1384  qreal quitLon = m_controlView->marbleWidget()->centerLongitude();
1385  qreal quitLat = m_controlView->marbleWidget()->centerLatitude();
1386  const int quitRadius = m_controlView->marbleWidget()->radius();
1387 
1388  settings.setValue( "quitLongitude", quitLon );
1389  settings.setValue( "quitLatitude", quitLat );
1390  settings.setValue( "quitRadius", quitRadius );
1391 
1392  settings.setValue( "lockFloatItemPositions", m_lockFloatItemsAction->isChecked() );
1393  settings.endGroup();
1394 
1395  settings.beginGroup( "Sun" );
1396  settings.setValue( "showSun", m_controlView->marbleWidget()->showSunShading() );
1397  settings.setValue( "showCitylights", m_controlView->marbleWidget()->showCityLights() );
1398  settings.setValue( "lockToSubSolarPoint", m_controlView->marbleWidget()->isLockedToSubSolarPoint() );
1399  settings.setValue( "subSolarPointIconVisible", m_controlView->marbleWidget()->isSubSolarPointIconVisible() );
1400  settings.endGroup();
1401 
1402  settings.beginGroup( "Time" );
1403  settings.setValue( "dateTime", m_controlView->marbleModel()->clockDateTime() );
1404  settings.setValue( "speedSlider", m_controlView->marbleModel()->clockSpeed() );
1405  settings.endGroup();
1406 
1407  settings.beginGroup( "Routing Profile" );
1408  QList<RoutingProfile> profiles = m_controlView->marbleWidget()
1409  ->model()->routingManager()->profilesModel()->profiles();
1410  settings.setValue( "Num", profiles.count() );
1411  for ( int i = 0; i < profiles.count(); ++i ) {
1412  settings.beginGroup( QString( "Profile %0" ).arg(i) );
1413  const RoutingProfile& profile = profiles.at( i );
1414  settings.setValue( "Name", profile.name() );
1415  foreach ( const QString& pluginName, settings.childGroups() ) {
1416  settings.beginGroup( pluginName );
1417  settings.remove( "" ); //remove all keys
1418  settings.endGroup();
1419  }
1420  foreach ( const QString &key, profile.pluginSettings().keys() ) {
1421  settings.beginGroup( key );
1422  settings.setValue( "Enabled", true );
1423  foreach ( const QString& settingKey, profile.pluginSettings()[ key ].keys() ) {
1424  Q_ASSERT( settingKey != "Enabled" );
1425  settings.setValue( settingKey, profile.pluginSettings()[ key ][ settingKey ] );
1426  }
1427  settings.endGroup();
1428  }
1429  settings.endGroup();
1430  }
1431  RoutingProfile const profile = m_controlView->marbleWidget()->model()->routingManager()->routeRequest()->routingProfile();
1432  settings.setValue( "currentIndex", profiles.indexOf( profile ) );
1433  settings.endGroup();
1434 
1435  settings.beginGroup( "Plugins");
1436  QString positionProvider;
1437  PositionTracking* tracking = m_controlView->marbleModel()->positionTracking();
1438  tracking->writeSettings();
1439  if ( tracking && tracking->positionProviderPlugin() ) {
1440  positionProvider = tracking->positionProviderPlugin()->nameId();
1441  }
1442  settings.setValue( "activePositionTrackingPlugin", positionProvider );
1443  settings.endGroup();
1444 
1445  settings.beginGroup( "Tracking" );
1446  CurrentLocationWidget* trackingWidget = m_controlView->currentLocationWidget();
1447  if ( trackingWidget ) {
1448  // Can be null due to lazy initialization
1449  settings.setValue( "recenterMode", trackingWidget->recenterMode() );
1450  settings.setValue( "autoZoom", trackingWidget->autoZoom() );
1451  settings.setValue( "trackVisible", trackingWidget->trackVisible() );
1452  settings.setValue( "lastTrackOpenPath", trackingWidget->lastOpenPath() );
1453  settings.setValue( "lastTrackSavePath", trackingWidget->lastSavePath() );
1454  }
1455  settings.endGroup();
1456 
1457  // The config dialog has to write settings.
1458  m_configDialog->writeSettings();
1459 
1460  // Store current route settings
1461  settings.beginGroup( "Routing" );
1462  {
1463  RoutingManager *const routingManager = m_controlView->marbleModel()->routingManager();
1464  routingManager->writeSettings();
1465  settings.setValue( "showGuidanceModeStartupWarning", routingManager->showGuidanceModeStartupWarning() );
1466  settings.setValue( "lastRouteOpenPath", routingManager->lastOpenPath() );
1467  settings.setValue( "lastRouteSavePath", routingManager->lastSavePath() );
1468  settings.setValue( "routeColorStandard", routingManager->routeColorStandard().name() );
1469  settings.setValue( "routeAlphaStandard", routingManager->routeColorStandard().alpha() );
1470  settings.setValue( "routeColorHighlighted", routingManager->routeColorHighlighted().name() );
1471  settings.setValue( "routeAlphaHighlighted", routingManager->routeColorHighlighted().alpha() );
1472  settings.setValue( "routeColorAlternative", routingManager->routeColorAlternative().name() );
1473  settings.setValue( "routeAlphaAlternative", routingManager->routeColorAlternative().alpha() );
1474  }
1475  settings.endGroup();
1476 
1477  settings.beginGroup( "Navigation");
1478  settings.setValue( "externalMapEditor", m_controlView->externalMapEditor() );
1479  settings.endGroup();
1480 }
1481 
1482 void MainWindow::editSettings()
1483 {
1484  // Show the settings dialog.
1485  m_configDialog->show();
1486  m_configDialog->raise();
1487  m_configDialog->activateWindow();
1488 }
1489 
1490 void MainWindow::updateSettings()
1491 {
1492  mDebug() << Q_FUNC_INFO << "Updating Settings ...";
1493 
1494  // FIXME: Font doesn't get updated instantly.
1495  m_controlView->marbleWidget()->setDefaultFont( m_configDialog->mapFont() );
1496 
1497  m_controlView->marbleWidget()->setMapQualityForViewContext( m_configDialog->stillQuality(), Marble::Still );
1498  m_controlView->marbleWidget()->setMapQualityForViewContext( m_configDialog->animationQuality(), Marble::Animation );
1499 
1500  m_controlView->marbleWidget()->setDefaultAngleUnit( m_configDialog->angleUnit() );
1501  MarbleGlobal::getInstance()->locale()->setMeasurementSystem( m_configDialog->measurementSystem() );
1502 
1503  m_distance = m_controlView->marbleWidget()->distanceString();
1504  updateStatusBar();
1505 
1506  m_controlView->marbleWidget()->setAnimationsEnabled( m_configDialog->animateTargetVoyage() );
1507  m_controlView->marbleWidget()->inputHandler()->setInertialEarthRotationEnabled( m_configDialog->inertialEarthRotation() );
1508  if ( !m_configDialog->externalMapEditor().isEmpty() ) {
1509  m_controlView->setExternalMapEditor( m_configDialog->externalMapEditor() );
1510  }
1511 
1512  // Cache
1513  m_controlView->marbleModel()->setPersistentTileCacheLimit( m_configDialog->persistentTileCacheLimit() * 1024 );
1514  m_controlView->marbleWidget()->setVolatileTileCacheLimit( m_configDialog->volatileTileCacheLimit() * 1024 );
1515 
1516  /*
1517  m_controlView->marbleWidget()->setProxy( m_configDialog->proxyUrl(), m_configDialog->proxyPort(), m_configDialog->user(), m_configDialog->password() );
1518  */
1519 
1520  CloudSyncManager* cloudSyncManager = m_controlView->cloudSyncManager();
1521  cloudSyncManager->setOwncloudCredentials( m_configDialog->owncloudServer(),
1522  m_configDialog->owncloudUsername(),
1523  m_configDialog->owncloudPassword() );
1524  cloudSyncManager->setSyncEnabled( m_configDialog->syncEnabled() );
1525  cloudSyncManager->routeSyncManager()->setRouteSyncEnabled( m_configDialog->syncRoutes() );
1526  cloudSyncManager->bookmarkSyncManager()->setBookmarkSyncEnabled( m_configDialog->syncBookmarks() );
1527 
1528  m_controlView->marbleWidget()->update();
1529 }
1530 
1531 void MainWindow::showDownloadRegionDialog()
1532 {
1533  if ( !m_downloadRegionDialog ) {
1534  m_downloadRegionDialog = new DownloadRegionDialog( m_controlView->marbleWidget(), m_controlView );
1535  // it might be tempting to move the connects to DownloadRegionDialog's "accepted" and
1536  // "applied" signals, be aware that the "hidden" signal might be come before the "accepted"
1537  // signal, leading to a too early disconnect.
1538  connect( m_downloadRegionDialog, SIGNAL(accepted()), SLOT(downloadRegion()));
1539  connect( m_downloadRegionDialog, SIGNAL(applied()), SLOT(downloadRegion()));
1540  }
1541  // FIXME: get allowed range from current map theme
1542  m_downloadRegionDialog->setAllowedTileLevelRange( 0, 16 );
1543  m_downloadRegionDialog->setSelectionMethod( DownloadRegionDialog::VisibleRegionMethod );
1544  ViewportParams const * const viewport =
1545  m_controlView->marbleWidget()->viewport();
1546  m_downloadRegionDialog->setSpecifiedLatLonAltBox( viewport->viewLatLonAltBox() );
1547  m_downloadRegionDialog->setVisibleLatLonAltBox( viewport->viewLatLonAltBox() );
1548 
1549  m_downloadRegionDialog->show();
1550  m_downloadRegionDialog->raise();
1551  m_downloadRegionDialog->activateWindow();
1552 }
1553 
1554 void MainWindow::downloadRegion()
1555 {
1556  Q_ASSERT( m_downloadRegionDialog );
1557  QVector<TileCoordsPyramid> const pyramid = m_downloadRegionDialog->region();
1558  if ( !pyramid.isEmpty() ) {
1559  m_controlView->marbleWidget()->downloadRegion( pyramid );
1560  }
1561 }
1562 
1563 void MainWindow::printMapScreenShot()
1564 {
1565 #ifndef QT_NO_PRINTER
1566  QPrinter printer( QPrinter::HighResolution );
1567  QPointer<QPrintDialog> printDialog = new QPrintDialog( &printer, this );
1568  m_controlView->printMapScreenShot( printDialog );
1569  delete printDialog;
1570 #endif
1571 }
1572 
1573 void MainWindow::updateMapEditButtonVisibility( const QString &mapTheme )
1574 {
1575  Q_ASSERT( m_osmEditAction );
1576  m_osmEditAction->setVisible( mapTheme == "earth/openstreetmap/openstreetmap.dgml" );
1577 }
1578 
1579 void MainWindow::showMovieCaptureDialog()
1580 {
1581  if (m_movieCaptureDialog == 0) {
1582  m_movieCaptureDialog = new MovieCaptureDialog(m_controlView->marbleWidget(),
1583  m_controlView->marbleWidget());
1584  connect( m_movieCaptureDialog, SIGNAL(started()), this, SLOT(changeRecordingState()));
1585  }
1586  m_movieCaptureDialog->show();
1587 }
1588 
1589 void MainWindow::stopRecording()
1590 {
1591  if ( m_movieCaptureDialog ) {
1592  m_movieCaptureDialog->stopRecording();
1593  changeRecordingState();
1594  }
1595 }
1596 
1597 void MainWindow::changeRecordingState()
1598 {
1599  m_recordMovieAction->setEnabled( !m_recordMovieAction->isEnabled() );
1600  m_stopRecordingAction->setEnabled( !m_stopRecordingAction->isEnabled() );
1601 }
1602 
1603 void MainWindow::showMapWizard()
1604 {
1605  QPointer<MapWizard> mapWizard = new MapWizard();
1606  QSettings settings;
1607 
1608  settings.beginGroup( "MapWizard" );
1609  mapWizard->setWmsServers( settings.value( "wmsServers" ).toStringList() );
1610  mapWizard->setStaticUrlServers( settings.value( "staticUrlServers" ).toStringList() );
1611  settings.endGroup();
1612 
1613  mapWizard->exec();
1614 
1615  settings.beginGroup( "MapWizard" );
1616  settings.setValue( "wmsServers", mapWizard->wmsServers() );
1617  settings.setValue( "staticUrlServers", mapWizard->staticUrlServers() );
1618  settings.endGroup();
1619 
1620  mapWizard->deleteLater();
1621 }
1622 
1623 void MainWindow::showZoomLevel(bool show)
1624 {
1625  if ( show ) {
1626  m_zoomLabel->show();
1627  statusBar()->insertPermanentWidget( 2, m_zoomLabel );
1628  } else {
1629  statusBar()->removeWidget( m_zoomLabel );
1630  }
1631  // update from last modification
1632  m_toggleTileLevelAction->setChecked( show );
1633 }
1634 
1635 void MainWindow::fallBackToDefaultTheme()
1636 {
1637  m_controlView->marbleWidget()->setMapThemeId( m_controlView->defaultMapThemeId() );
1638 }
1639 
1640 void MainWindow::changeViewSize( QAction* action )
1641 {
1642  if ( action->data().type() == QVariant::Size ) {
1643  if ( m_savedSize.isEmpty() ) {
1644  m_savedSize = m_controlView->size();
1645  }
1646  m_controlView->setFixedSize( action->data().toSize() );
1647  adjustSize();
1648  } else {
1649  m_controlView->setMinimumSize( QSize( 0, 0 ) );
1650  m_controlView->setMaximumSize( QSize( QWIDGETSIZE_MAX, QWIDGETSIZE_MAX ) );
1651  m_controlView->resize( m_savedSize );
1652  m_controlView->setMinimumSize( m_savedSize );
1653  adjustSize();
1654  m_controlView->setMinimumSize( QSize( 0, 0 ) );
1655  m_savedSize.setHeight( -1 );
1656  }
1657 }
1658 
1659 #include "QtMainWindow.moc"
Marble::ControlView::defaultMapThemeId
QString defaultMapThemeId() const
Returns a default map theme: earth/srtm/srtm.dgml if installed, any other theme id if earth/srtm/srtm...
Definition: ControlView.cpp:149
Marble::TimeControlWidget
Definition: TimeControlWidget.h:31
Marble::ControlView::printMapScreenShot
void printMapScreenShot(QPointer< QPrintDialog > dialog)
Definition: ControlView.cpp:171
GeoDataDocument.h
Marble::PositionTracking::positionProviderPlugin
PositionProviderPlugin positionProviderPlugin
Definition: PositionTracking.h:35
QProgressBar
QList::clear
void clear()
QMainWindow::addToolBar
void addToolBar(Qt::ToolBarArea area, QToolBar *toolbar)
GeoDataCoordinates.h
Marble::RenderPlugin::TopLevelRenderType
Definition: RenderPlugin.h:61
Marble::MarbleWidget::isSubSolarPointIconVisible
bool isSubSolarPointIconVisible
Definition: MarbleWidget.h:128
QVariant::toByteArray
QByteArray toByteArray() const
Marble::GeoDataPlacemark::lookAt
const GeoDataLookAt * lookAt() const
Returns GeoDataLookAt object if lookAt is setup earlier otherwise It will convert GeoDataCoordinates ...
Definition: GeoDataPlacemark.cpp:162
QWidget::close
bool close()
Marble::GeoDataCoordinates
A 3d point representation.
Definition: GeoDataCoordinates.h:52
QWidget
Marble::DownloadRegionDialog::VisibleRegionMethod
Definition: DownloadRegionDialog.h:36
Marble::MarbleLocale::languageCode
static QString languageCode()
Definition: MarbleLocale.cpp:50
QProgressBar::setMaximum
void setMaximum(int maximum)
Marble::ShowHomeLocation
Show home location on startup.
Definition: MarbleGlobal.h:143
QSize::setHeight
void setHeight(int height)
Marble::PluginManager
The class that handles Marble's plugins.
Definition: PluginManager.h:45
Marble::MarbleModel::setPersistentTileCacheLimit
void setPersistentTileCacheLimit(quint64 kiloBytes)
Set the limit of the persistent (on hard disc) tile cache.
Definition: MarbleModel.cpp:607
Marble::CurrentLocationWidget::setTrackVisible
void setTrackVisible(bool visible)
Definition: CurrentLocationWidget.cpp:440
Marble::MarbleWidget::reloadMap
void reloadMap()
Re-download all visible tiles.
Definition: MarbleWidget.cpp:1171
Marble::QtMarbleConfigDialog::animateTargetVoyage
bool animateTargetVoyage() const
Definition: QtMarbleConfigDialog.cpp:559
tracking
Definition: position-tracking.qml:12
Marble::MarbleWidget::distanceString
QString distanceString() const
Return the current distance string.
Definition: MarbleWidget.cpp:1081
Marble::MainWindow::closeEvent
void closeEvent(QCloseEvent *event)
Definition: MobileMainWindow.cpp:285
Marble::RoutingProfilesModel::profiles
QList< RoutingProfile > profiles() const
Definition: RoutingProfilesModel.cpp:60
Marble::BookmarkManager::addBookmark
void addBookmark(GeoDataContainer *folder, const GeoDataPlacemark &bookmark)
add bookmark in a folder
Definition: BookmarkManager.cpp:132
QAction::setSeparator
void setSeparator(bool b)
PositionProviderPlugin.h
QActionGroup
Marble::MarbleWidget::projection
int projection
Definition: MarbleWidget.h:114
QWidget::setFixedWidth
void setFixedWidth(int w)
Marble::MarbleWidget::setShowCityLights
void setShowCityLights(bool visible)
Set whether city lights instead of night shadow are visible.
Definition: MarbleWidget.cpp:830
Marble::CloudSyncManager::setOwncloudCredentials
void setOwncloudCredentials(const QString &server, const QString &user, const QString &password)
Change owncloud server URL, username and password at once without emitting change signals like setOwn...
Definition: CloudSyncManager.cpp:111
QLocale::toString
QString toString(qlonglong i) const
QSettings::childKeys
QStringList childKeys() const
Marble::GeoDataLookAt::longitude
qreal longitude(GeoDataCoordinates::Unit unit=GeoDataCoordinates::Radian) const
retrieves the longitude of the GeoDataLookAt object use the unit parameter to switch between Radian a...
Definition: GeoDataLookAt.cpp:104
QColor::name
QString name() const
QMainWindow::menuBar
QMenuBar * menuBar() const
QWidget::addAction
void addAction(QAction *action)
QSize::isEmpty
bool isEmpty() const
QPrinter
QStatusBar::showMessage
void showMessage(const QString &message, int timeout)
QWidget::addActions
void addActions(QList< QAction * > actions)
Marble::MarbleModel::clockTimezone
int clockTimezone() const
Definition: MarbleModel.cpp:710
QSettings::endGroup
void endGroup()
QVariant::toDateTime
QDateTime toDateTime() const
QAction::setChecked
void setChecked(bool)
MarbleModel.h
This file contains the headers for MarbleModel.
Marble::PluginManager::positionProviderPlugins
QList< const PositionProviderPlugin * > positionProviderPlugins() const
Returns all available PositionProviderPlugins.
Definition: PluginManager.cpp:84
QAction::data
QVariant data() const
Marble::MarbleWidget::radius
int radius() const
Return the radius of the globe in pixels.
Definition: MarbleWidget.cpp:325
QMainWindow::statusBar
QStatusBar * statusBar() const
AbstractFloatItem.h
Marble::DownloadRegionDialog::setSpecifiedLatLonAltBox
void setSpecifiedLatLonAltBox(GeoDataLatLonAltBox const &)
Definition: DownloadRegionDialog.cpp:342
QAction::setIcon
void setIcon(const QIcon &icon)
QAction::setVisible
void setVisible(bool)
QList::at
const T & at(int i) const
QMenu::addAction
void addAction(QAction *action)
Marble::MarbleWidget::setAnimationsEnabled
void setAnimationsEnabled(bool enabled)
Set whether travels to a point should get animated.
Definition: MarbleWidget.cpp:1041
QPointer
Marble::MarbleModel::clock
MarbleClock * clock()
Definition: MarbleModel.cpp:537
QtMarbleConfigDialog.h
Marble::QtMarbleConfigDialog::owncloudServer
QString owncloudServer() const
Definition: QtMarbleConfigDialog.cpp:699
HttpDownloadManager.h
QWidget::setVisible
virtual void setVisible(bool visible)
Marble::GeoDataFeature::isVisible
bool isVisible() const
Return whether this feature is visible or not.
Definition: GeoDataFeature.cpp:656
Marble::RoutingManager::setRouteColorAlternative
void setRouteColorAlternative(QColor color)
Set color for alternative route rendering.
Definition: RoutingManager.cpp:510
Marble::SunControlWidget
Definition: SunControlWidget.h:31
Marble::MarbleWidget::setProjection
void setProjection(int projection)
Set the Projection used for the map.
Definition: MarbleWidget.cpp:591
Marble::ViewportParams::viewLatLonAltBox
const GeoDataLatLonAltBox & viewLatLonAltBox() const
Definition: ViewportParams.cpp:305
Marble::GeoDataContainer
A base class that can hold GeoDataFeatures.
Definition: GeoDataContainer.h:47
Marble::MarbleWidget::setDefaultAngleUnit
void setDefaultAngleUnit(AngleUnit angleUnit)
Definition: MarbleWidget.cpp:1051
Marble::GeoDataPlacemark::coordinate
GeoDataCoordinates coordinate(const QDateTime &dateTime=QDateTime(), bool *iconAtCoordinates=0) const
Return the coordinates of the placemark at time dateTime as a GeoDataCoordinates. ...
Definition: GeoDataPlacemark.cpp:172
QColor::setAlpha
void setAlpha(int alpha)
Marble::RoutingManager::routeColorAlternative
QColor routeColorAlternative() const
Get color for alternative route rendering.
Definition: RoutingManager.cpp:515
QActionGroup::addAction
QAction * addAction(QAction *action)
Marble::BookmarkSyncManager::setBookmarkSyncEnabled
void setBookmarkSyncEnabled(bool enabled)
Setter for enabling/disabling bookmark synchronization.
Definition: BookmarkSyncManager.cpp:249
Marble::QtMarbleConfigDialog
Definition: QtMarbleConfigDialog.h:29
Marble::MarbleInputHandler::setInertialEarthRotationEnabled
void setInertialEarthRotationEnabled(bool enabled)
Definition: MarbleInputHandler.cpp:116
QPoint
QVector::first
T & first()
Marble::MarbleWidget::setVolatileTileCacheLimit
void setVolatileTileCacheLimit(quint64 kiloBytes)
Set the limit of the volatile (in RAM) tile cache.
Definition: MarbleWidget.cpp:987
QStringList::join
QString join(const QString &separator) const
Marble::MarbleModel::pluginManager
const PluginManager * pluginManager() const
Definition: MarbleModel.cpp:634
MarbleAboutDialog.h
Marble::CurrentLocationWidget::lastOpenPath
QString lastOpenPath() const
Definition: CurrentLocationWidget.cpp:430
Planet.h
MapThemeDownloadDialog.h
QProgressBar::value
value
Marble::RoutingProfile
Definition: RoutingProfile.h:24
QWidget::adjustSize
void adjustSize()
Marble::ControlView::cloudSyncManager
CloudSyncManager * cloudSyncManager()
Definition: ControlView.cpp:676
QDir::homePath
QString homePath()
MarbleDebug.h
Marble::RoutingProfilesModel::setProfiles
void setProfiles(const QList< RoutingProfile > &profiles)
Definition: RoutingProfilesModel.cpp:53
Marble::MovieCaptureDialog::stopRecording
void stopRecording()
Definition: MovieCaptureDialog.cpp:102
QObject::tr
QString tr(const char *sourceText, const char *disambiguation, int n)
Marble::CurrentLocationWidget::recenterMode
AutoNavigation::CenterMode recenterMode() const
Definition: CurrentLocationWidget.cpp:415
QList::const_iterator
Marble::GeoDataLookAt::range
qreal range() const
Retrieve the distance (in meters) between the camera and the object looked at.
Definition: GeoDataLookAt.cpp:120
QWidget::update
void update()
Marble::GeoDataCoordinates::Degree
Definition: GeoDataCoordinates.h:66
Marble::QtMarbleConfigDialog::owncloudPassword
QString owncloudPassword() const
Definition: QtMarbleConfigDialog.cpp:709
BookmarkManager.h
Marble::MarbleWidget::showCityLights
bool showCityLights
Definition: MarbleWidget.h:126
Marble::MainWindow::MainWindow
MainWindow(const QString &marbleDataPath=QString(), QWidget *parent=0)
Definition: KdeMainWindow.cpp:40
MapWizard.h
This file contains the header for MapWizard.
CurrentLocationWidget.h
Marble::QtMarbleConfigDialog::onStartup
int onStartup() const
Definition: QtMarbleConfigDialog.cpp:547
Marble::BookmarkManager::setShowBookmarks
void setShowBookmarks(bool visible)
Definition: BookmarkManager.cpp:169
Marble::MarbleWidget
A widget class that displays a view of the earth.
Definition: MarbleWidget.h:104
Marble::MarbleWidget::setSubSolarPointIconVisible
void setSubSolarPointIconVisible(bool visible)
Set whether the sun icon is shown in the sub solar point.
Definition: MarbleWidget.cpp:845
Marble::PositionProviderPlugin
The abstract class that provides position information.
Definition: PositionProviderPlugin.h:26
Marble::PositionTracking
Definition: PositionTracking.h:31
QClipboard
QList::indexOf
int indexOf(const T &value, int from) const
Marble::DownloadRegionDialog::setVisibleLatLonAltBox
void setVisibleLatLonAltBox(GeoDataLatLonAltBox const &)
Definition: DownloadRegionDialog.cpp:347
Marble::RenderPlugin::PanelRenderType
Definition: RenderPlugin.h:62
QCloseEvent
Marble::MarbleWidget::lookAt
GeoDataLookAt lookAt() const
Return the lookAt.
Definition: MarbleWidget.cpp:1181
Marble::RoutingManager::routeRequest
RouteRequest * routeRequest()
Returns the current route request.
Definition: RoutingManager.cpp:271
MarbleWidgetInputHandler.h
Marble::MarbleWidget::flyTo
void flyTo(const GeoDataLookAt &lookAt, FlyToMode mode=Automatic)
Change the camera position to the given position.
Definition: MarbleWidget.cpp:1166
QSettings::setValue
void setValue(const QString &key, const QVariant &value)
Marble::MarbleWidget::setMapThemeId
void setMapThemeId(const QString &maptheme)
Set a new map theme.
Definition: MarbleWidget.cpp:759
QWidget::resize
void resize(int w, int h)
QWidget::setWindowState
void setWindowState(QFlags< Qt::WindowState > windowState)
Marble::MovieCaptureDialog
Definition: MovieCaptureDialog.h:27
Marble::ControlView::applicationVersion
static QString applicationVersion()
Returns the version of the Marble applications (which differs from the Marble library version)...
Definition: ControlView.cpp:109
Marble::DownloadRegionDialog::region
QVector< TileCoordsPyramid > region() const
Definition: DownloadRegionDialog.cpp:311
QWidget::setMinimumSize
void setMinimumSize(const QSize &)
QMenu::clear
void clear()
Marble::RouteSyncManager::setRouteSyncEnabled
void setRouteSyncEnabled(bool enabled)
Setter for enabling/disabling route synchronization.
Definition: RouteSyncManager.cpp:93
QRegExp
BookmarkManagerDialog.h
Marble::RoutingManager::setRouteColorStandard
void setRouteColorStandard(QColor color)
Set color for standard route rendering.
Definition: RoutingManager.cpp:490
QObject::name
const char * name() const
QFontMetrics::boundingRect
QRect boundingRect(QChar ch) const
Marble::RoutingManager::routeColorStandard
QColor routeColorStandard() const
Get color for standard route rendering.
Definition: RoutingManager.cpp:495
Marble::RouteRequest::routingProfile
RoutingProfile routingProfile() const
Definition: RouteRequest.cpp:321
Marble::CloudSyncManager::bookmarkSyncManager
BookmarkSyncManager bookmarkSyncManager
Definition: CloudSyncManager.h:36
Marble::MarbleModel::addGeoDataFile
void addGeoDataFile(const QString &filename)
Handle file loading into the treeModel.
Definition: MarbleModel.cpp:725
QString::number
QString number(int n, int base)
QList::count
int count(const T &value) const
RoutingManager.h
Marble::MarbleWidget::downloadRegion
void downloadRegion(QVector< TileCoordsPyramid > const &)
Definition: MarbleWidget.cpp:1176
Marble::MarbleWidget::zoom
int zoom
Definition: MarbleWidget.h:111
Marble::CurrentLocationWidget
Definition: CurrentLocationWidget.h:30
QCoreApplication::processEvents
void processEvents(QFlags< QEventLoop::ProcessEventsFlag > flags)
QList::append
void append(const T &value)
Marble::QtMarbleConfigDialog::persistentTileCacheLimit
int persistentTileCacheLimit() const
Definition: QtMarbleConfigDialog.cpp:576
QPixmap::save
bool save(const QString &fileName, const char *format, int quality) const
Marble::MarbleWidget::showAtmosphere
bool showAtmosphere
Definition: MarbleWidget.h:129
Marble::MarbleWidget::centerLongitude
qreal centerLongitude() const
Return the longitude of the center point.
Definition: MarbleWidget.cpp:680
Marble::Animation
animated view (e.g. while rotating the globe)
Definition: MarbleGlobal.h:76
QClipboard::setPixmap
void setPixmap(const QPixmap &pixmap, Mode mode)
GoToDialog.h
Marble::CurrentLocationWidget::setAutoZoom
void setAutoZoom(bool activate)
Slot for Auto Zooming while navigating.
Definition: CurrentLocationWidget.cpp:350
QVariant::toInt
int toInt(bool *ok) const
Marble::Oxygen::aluminumGray4
QColor const aluminumGray4
Definition: MarbleColors.h:92
QVariant::isNull
bool isNull() const
Marble::MarbleModel::routingManager
RoutingManager * routingManager()
Definition: MarbleModel.cpp:675
NewBookmarkFolderDialog.h
QApplication::clipboard
QClipboard * clipboard()
Marble::PositionProviderPlugin::setMarbleModel
void setMarbleModel(const MarbleModel *)
Definition: PositionProviderPlugin.cpp:42
QHash< QString, QVariant >
QPrintDialog
QWidget::windowState
Qt::WindowStates windowState() const
Marble::GeoDataLookAt::setRange
void setRange(qreal range)
Change the distance (in meters) between the camera and the object looked at.
Definition: GeoDataLookAt.cpp:114
QStatusBar::removeWidget
void removeWidget(QWidget *widget)
Marble::MarbleWidget::isLockedToSubSolarPoint
bool isLockedToSubSolarPoint
Definition: MarbleWidget.h:127
Marble::Oxygen::skyBlue1
QColor const skyBlue1
Definition: MarbleColors.h:59
QWidget::setUpdatesEnabled
void setUpdatesEnabled(bool enable)
Marble::BookmarkManager::document
GeoDataDocument * document()
Definition: BookmarkManager.cpp:154
Marble::DataMigration
Definition: DataMigration.h:20
Marble::ControlView::externalMapEditor
QString externalMapEditor() const
Returns the editor used to launch a map editor application.
Definition: ControlView.cpp:681
Marble::MarbleWidget::model
MarbleModel * model()
Return the model that this view shows.
Definition: MarbleWidget.cpp:289
Marble::MarbleModel::home
void home(qreal &lon, qreal &lat, int &zoom) const
get the home point
Definition: MarbleModel.cpp:446
QList::isEmpty
bool isEmpty() const
Marble::CloudSyncManager::routeSyncManager
RouteSyncManager routeSyncManager
Definition: CloudSyncManager.h:37
QSettings::contains
bool contains(const QString &key) const
Marble::MarbleModel::clockSpeed
int clockSpeed() const
Definition: MarbleModel.cpp:695
Marble::RoutingManager::setRouteColorHighlighted
void setRouteColorHighlighted(QColor color)
Set color for highlighted route rendering.
Definition: RoutingManager.cpp:500
QObject::setObjectName
void setObjectName(const QString &name)
Marble::RoutingManager::profilesModel
RoutingProfilesModel * profilesModel()
Provides access to the model which contains all possible routing profiles.
Definition: RoutingManager.cpp:256
Marble::MarbleWidget::setLockToSubSolarPoint
void setLockToSubSolarPoint(bool visible)
Set the globe locked to the sub solar point.
Definition: MarbleWidget.cpp:837
MarbleDirs.h
QWidget::raise
void raise()
Marble::GeoDataContainer::folderList
QVector< GeoDataFolder * > folderList() const
A convenience function that returns all folders in this container.
Definition: GeoDataContainer.cpp:197
QString::isEmpty
bool isEmpty() const
Marble::RoutingManager::setLastSavePath
void setLastSavePath(const QString &path)
Set last directory the user saved a route to.
Definition: RoutingManager.cpp:480
Marble::MarbleModel::positionTracking
PositionTracking * positionTracking() const
Definition: MarbleModel.cpp:512
Marble::Still
still image
Definition: MarbleGlobal.h:75
QSettings::childGroups
QStringList childGroups() const
Marble::RouteRequest::setRoutingProfile
void setRoutingProfile(const RoutingProfile &profile)
Definition: RouteRequest.cpp:315
Marble::QtMarbleConfigDialog::inertialEarthRotation
bool inertialEarthRotation() const
Definition: QtMarbleConfigDialog.cpp:565
QWidget::move
void move(int x, int y)
Marble::MapWizard
Definition: MapWizard.h:33
Marble::PluginManager::parsingRunnerPlugins
QList< const ParseRunnerPlugin * > parsingRunnerPlugins() const
Returns all parse runner plugins.
Definition: PluginManager.cpp:136
QMainWindow::removeToolBar
void removeToolBar(QToolBar *toolbar)
QString::endsWith
bool endsWith(const QString &s, Qt::CaseSensitivity cs) const
Marble::NOT_AVAILABLE
static const char NOT_AVAILABLE[]
Definition: MarbleGlobal.h:251
Marble::RoutingManager::lastSavePath
QString lastSavePath() const
Return last directory the user saved a route to.
Definition: RoutingManager.cpp:485
RouteSyncManager.h
Marble::Oxygen::skyBlue4
QColor const skyBlue4
Definition: MarbleColors.h:56
Marble::RoutingManager::setShowGuidanceModeStartupWarning
void setShowGuidanceModeStartupWarning(bool show)
Set whether a warning message should be shown to the user before starting guidance mode...
Definition: RoutingManager.cpp:460
Marble::GeoDataLookAt::latitude
qreal latitude(GeoDataCoordinates::Unit unit=GeoDataCoordinates::Radian) const
retrieves the latitude of the GeoDataLookAt object use the unit parameter to switch between Radian an...
Definition: GeoDataLookAt.cpp:93
Marble::CurrentLocationWidget::setLastSavePath
void setLastSavePath(const QString &path)
Definition: CurrentLocationWidget.cpp:451
QStringList::replaceInStrings
QStringList & replaceInStrings(const QString &before, const QString &after, Qt::CaseSensitivity cs)
QObject::deleteLater
void deleteLater()
Marble::MarbleGlobal::locale
MarbleLocale * locale() const
Definition: MarbleGlobal.cpp:43
QList::first
T & first()
QLabel::setText
void setText(const QString &)
QMenu::addSeparator
QAction * addSeparator()
QString
QList< QAction * >
QWidget::hide
void hide()
QColor
MarbleLocale.h
Marble::QtMarbleConfigDialog::measurementSystem
MarbleLocale::MeasurementSystem measurementSystem() const
Definition: QtMarbleConfigDialog.cpp:504
Marble::DownloadRegionDialog::setAllowedTileLevelRange
void setAllowedTileLevelRange(int const minimumTileLevel, int const maximumTileLevel)
Definition: DownloadRegionDialog.cpp:261
Marble::RoutingManager::readSettings
void readSettings()
Restores a previously saved route request and route from disk, if any.
Definition: RoutingManager.cpp:374
Marble::ControlView::mapScreenShot
QPixmap mapScreenShot()
Definition: ControlView.h:73
Marble::MarbleModel::setClockDateTime
void setClockDateTime(const QDateTime &datetime)
Definition: MarbleModel.cpp:685
Marble::GeoDataFolder
Definition: GeoDataFolder.h:50
Marble::ParseRunnerPlugin::fileExtensions
virtual QStringList fileExtensions() const =0
Returns the file extensions associated with the file format.
GeoDataPlacemark.h
Marble::MarbleWidget::goHome
void goHome(FlyToMode mode=Automatic)
Center the view on the default start point with the default zoom.
Definition: MarbleWidget.cpp:749
Marble::BookmarkManagerDialog
Definition: BookmarkManagerDialog.h:26
Marble::MarbleAboutDialog
Definition: MarbleAboutDialog.h:30
Marble::QtMarbleConfigDialog::mapFont
QFont mapFont() const
Definition: QtMarbleConfigDialog.cpp:531
EditBookmarkDialog.h
QColor::alpha
int alpha() const
MovieCaptureDialog.h
Marble::PluginInterface::nameId
virtual QString nameId() const =0
Returns the unique name of the plugin.
QStringList
Marble::ViewportParams
A public class that controls what is visible in the viewport of a Marble map.
Definition: ViewportParams.h:44
Marble::MarbleWidget::viewport
ViewportParams * viewport()
Definition: MarbleWidget.cpp:299
QHash::keys
QList< Key > keys() const
QMainWindow
QPixmap
QVariant::toSize
QSize toSize() const
Marble::ParseRunnerPlugin::fileFormatDescription
virtual QString fileFormatDescription() const =0
Returns a short description of the supported file format.
QtMainWindow.h
Marble::RoutingProfilesModel::loadDefaultProfiles
void loadDefaultProfiles()
Definition: RoutingProfilesModel.cpp:126
QFileInfo
QLocale
QAction::setData
void setData(const QVariant &userData)
Marble::CurrentLocationWidget::trackVisible
bool trackVisible() const
Definition: CurrentLocationWidget.cpp:425
Marble::CurrentLocationWidget::setLastOpenPath
void setLastOpenPath(const QString &path)
Definition: CurrentLocationWidget.cpp:446
ParseRunnerPlugin.h
Marble::RoutingManager
Delegates data retrieval and model updates to the appropriate routing provider.
Definition: RoutingManager.h:37
Marble::RoutingProfile::name
QString name
Definition: RoutingProfile.h:25
QMenu
DataMigration.h
QSettings
Marble::CurrentLocationWidget::autoZoom
bool autoZoom() const
Definition: CurrentLocationWidget.cpp:420
TimeControlWidget.h
QSize
QSettings::remove
void remove(const QString &key)
Marble::MarbleWidget::centerOn
void centerOn(const qreal lon, const qreal lat, bool animated=false)
Center the view on a geographical point.
Definition: MarbleWidget.cpp:549
QUrl
Marble::MarbleWidget::setShowSunShading
void setShowSunShading(bool visible)
Set whether the night shadow is visible.
Definition: MarbleWidget.cpp:823
QWidget::setFixedSize
void setFixedSize(const QSize &s)
MarbleClock.h
QWidget::setContextMenuPolicy
void setContextMenuPolicy(Qt::ContextMenuPolicy policy)
QAction::setShortcut
void setShortcut(const QKeySequence &shortcut)
Marble::DataMigration::exec
void exec()
Definition: DataMigration.cpp:44
Marble::MarbleModel::clockDateTime
QDateTime clockDateTime() const
Definition: MarbleModel.cpp:690
Marble::CurrentLocationWidget::setRecenterMode
void setRecenterMode(int recenterMode)
Slot that decides whether recentering should be done.
Definition: CurrentLocationWidget.cpp:342
QDateTime::fromString
QDateTime fromString(const QString &string, Qt::DateFormat format)
Marble::MarbleWidget::showSunShading
bool showSunShading
Definition: MarbleWidget.h:125
Marble::MarbleWidget::setRadius
void setRadius(int radius)
Set the radius of the globe in pixels.
Definition: MarbleWidget.cpp:330
ViewportParams.h
This file contains the headers for ViewportParams.
Marble::MarbleGlobal::SmallScreen
Definition: MarbleGlobal.h:287
QMainWindow::saveState
QByteArray saveState(int version) const
QAction::setCheckable
void setCheckable(bool)
QMetaObject::invokeMethod
bool invokeMethod(QObject *obj, const char *member, Qt::ConnectionType type, QGenericReturnArgument ret, QGenericArgument val0, QGenericArgument val1, QGenericArgument val2, QGenericArgument val3, QGenericArgument val4, QGenericArgument val5, QGenericArgument val6, QGenericArgument val7, QGenericArgument val8, QGenericArgument val9)
Marble::MarbleGlobal::getInstance
static MarbleGlobal * getInstance()
Definition: MarbleGlobal.cpp:37
QStatusBar::setSizeGripEnabled
void setSizeGripEnabled(bool)
Marble::ParseRunnerPlugin
A plugin for Marble to execute a parsing task.
Definition: ParseRunnerPlugin.h:27
QWidget::setMaximumSize
void setMaximumSize(const QSize &)
Marble::GeoDataLookAt
Definition: GeoDataLookAt.h:23
Marble::RoutingProfile::pluginSettings
const QHash< QString, QHash< QString, QVariant > > & pluginSettings() const
Definition: RoutingProfile.cpp:33
Marble::CloudSyncManager::setSyncEnabled
void setSyncEnabled(bool enabled)
Setter for enabling/disabling synchronization.
Definition: CloudSyncManager.cpp:103
Marble::MarbleModel::setHome
void setHome(qreal lon, qreal lat, int zoom=1050)
Set the home point.
Definition: MarbleModel.cpp:452
Marble::RoutingManager::setLastOpenPath
void setLastOpenPath(const QString &path)
Set last directory the user opened a route from.
Definition: RoutingManager.cpp:470
Marble::QtMarbleConfigDialog::syncRoutes
bool syncRoutes() const
Definition: QtMarbleConfigDialog.cpp:694
Marble::MarbleWidget::setMapQualityForViewContext
void setMapQualityForViewContext(MapQuality quality, ViewContext viewContext)
Set the map quality for the specified view context.
Definition: MarbleWidget.cpp:1009
Marble::MarbleModel
The data model (not based on QAbstractModel) for a MarbleWidget.
Definition: MarbleModel.h:97
QSettings::value
QVariant value(const QString &key, const QVariant &defaultValue) const
QActionGroup::actions
QList< QAction * > actions() const
QStatusBar::addPermanentWidget
void addPermanentWidget(QWidget *widget, int stretch)
Marble::LastLocationVisited
Show last location visited on quit.
Definition: MarbleGlobal.h:144
QAction::setStatusTip
void setStatusTip(const QString &statusTip)
QMenuBar::addMenu
QAction * addMenu(QMenu *menu)
Marble::QtMarbleConfigDialog::externalMapEditor
QString externalMapEditor() const
Definition: QtMarbleConfigDialog.cpp:554
QRect::width
int width() const
Marble::ControlView::openGeoUri
void openGeoUri(const QString &geoUriString)
Opens the passed Geo URI.
Definition: ControlView.cpp:232
Marble::PositionTracking::writeSettings
void writeSettings()
Definition: PositionTracking.cpp:361
QWidget::fontMetrics
QFontMetrics fontMetrics() const
Marble::DownloadRegionDialog
Definition: DownloadRegionDialog.h:31
QVector
Marble::ControlView::setExternalMapEditor
void setExternalMapEditor(const QString &editor)
Change the editor to launch via.
Definition: ControlView.cpp:524
QVariant::toStringList
QStringList toStringList() const
QTest::toString
char * toString(const T &value)
Marble::RenderPlugin::OnlineRenderType
Definition: RenderPlugin.h:63
QWidget::activateWindow
void activateWindow()
QWhatsThis::enterWhatsThisMode
void enterWhatsThisMode()
QList::takeFirst
T takeFirst()
QLatin1String
QKeySequence
Marble::QtMarbleConfigDialog::readSettings
void readSettings()
Read settings and update interface.
Definition: QtMarbleConfigDialog.cpp:310
QVector::isEmpty
bool isEmpty() const
RoutingWidget.h
Marble::GeoDataFeature::name
QString name() const
The name of the feature.
Definition: GeoDataFeature.cpp:544
PluginManager.h
QMenu::addMenu
QAction * addMenu(QMenu *menu)
QAction
QList::last
T & last()
Marble::GeoDataCoordinates::toString
QString toString() const
return a string representation of the coordinate this is a convenience function which uses the defaul...
Definition: GeoDataCoordinates.cpp:921
QWidget::removeAction
void removeAction(QAction *action)
QMainWindow::restoreState
bool restoreState(const QByteArray &state, int version)
Marble::QtMarbleConfigDialog::owncloudUsername
QString owncloudUsername() const
Definition: QtMarbleConfigDialog.cpp:704
QToolBar
Marble::MapThemeDownloadDialog
Definition: MapThemeDownloadDialog.h:23
Marble::MarbleWidget::setShowAtmosphere
void setShowAtmosphere(bool visible)
Set whether the atmospheric glow is visible.
Definition: MarbleWidget.cpp:861
QWidget::showFullScreen
void showFullScreen()
Marble::MarbleModel::bookmarkManager
BookmarkManager * bookmarkManager()
return instance of BookmarkManager
Definition: MarbleModel.cpp:213
DownloadRegionDialog.h
Marble::PositionTracking::readSettings
void readSettings()
Definition: PositionTracking.cpp:298
QFileDialog::getSaveFileName
QString getSaveFileName(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFlags< QFileDialog::Option > options)
QToolBar::addSeparator
QAction * addSeparator()
Marble::CurrentLocationWidget::lastSavePath
QString lastSavePath() const
Definition: CurrentLocationWidget.cpp:435
Marble::RoutingManager::writeSettings
void writeSettings() const
Saves the current route request and the current route to disk.
Definition: RoutingManager.cpp:327
QVariant::toBool
bool toBool() const
Marble::Projection
Projection
This enum is used to choose the projection shown in the view.
Definition: MarbleGlobal.h:44
Marble::ControlView::setWorkOffline
void setWorkOffline(bool workOffline)
Definition: ControlView.cpp:668
Marble::MarbleWidget::mapThemeId
QString mapThemeId
Definition: MarbleWidget.h:113
QVariant::toPoint
QPoint toPoint() const
QStringList::sort
void sort()
RouteRequest.h
Marble::PositionProviderPlugin::newInstance
virtual PositionProviderPlugin * newInstance() const =0
Create a new PositionProvider Plugin and return it.
QMessageBox::warning
StandardButton warning(QWidget *parent, const QString &title, const QString &text, QFlags< QMessageBox::StandardButton > buttons, StandardButton defaultButton)
Marble::MarbleWidget::setDistance
void setDistance(qreal distance)
Set the distance of the observer to the globe in km.
Definition: MarbleWidget.cpp:1076
QList::prepend
void prepend(const T &value)
QVariant::toDouble
double toDouble(bool *ok) const
Marble::MarbleWidget::setShowClouds
void setShowClouds(bool visible)
Set whether the cloud cover is visible.
Definition: MarbleWidget.cpp:816
QClipboard::setText
void setText(const QString &text, Mode mode)
Marble::PositionTracking::setPositionProviderPlugin
void setPositionProviderPlugin(PositionProviderPlugin *plugin)
Change the position provider to use.
Definition: PositionTracking.cpp:184
Marble::MarbleModel::downloadManager
HttpDownloadManager * downloadManager()
Return the downloadmanager to load missing tiles.
Definition: MarbleModel.cpp:466
Marble::MarbleWidget::setDefaultFont
void setDefaultFont(const QFont &font)
Definition: MarbleWidget.cpp:1061
QWidget::show
void show()
Marble::EditBookmarkDialog
Definition: EditBookmarkDialog.h:32
QtConcurrent::filter
QFuture< void > filter(Sequence &sequence, FilterFunction filterFunction)
QString::find
int find(QChar c, int i, bool cs) const
Marble::RenderPlugin::ThemeRenderType
Definition: RenderPlugin.h:64
Marble::MainWindow::marbleWidget
MarbleWidget * marbleWidget() const
Definition: KdeMainWindow.cpp:153
Marble::QtMarbleConfigDialog::syncEnabled
bool syncEnabled() const
Definition: QtMarbleConfigDialog.cpp:679
Marble::MarbleLocale::setMeasurementSystem
void setMeasurementSystem(MarbleLocale::MeasurementSystem measurementSystem)
Definition: MarbleLocale.cpp:40
QList::constEnd
const_iterator constEnd() const
QProgressBar::reset
void reset()
QList::constBegin
const_iterator constBegin() const
QLabel::setIndent
void setIndent(int)
Marble::MainWindow::changeViewSize
void changeViewSize(QAction *)
Definition: KdeMainWindow.cpp:166
QDateTime::addSecs
QDateTime addSecs(int s) const
PositionTracking.h
QDesktopServices::openUrl
bool openUrl(const QUrl &url)
Marble::GeoDataLookAt::coordinates
GeoDataCoordinates coordinates() const
retrieve the lat/lon/alt triple as a GeoDataCoordinates object
Definition: GeoDataLookAt.cpp:109
QVariant::type
Type type() const
Marble::ControlView::currentLocationWidget
CurrentLocationWidget * currentLocationWidget()
Definition: ControlView.cpp:663
Marble::QtMarbleConfigDialog::writeSettings
void writeSettings()
Write settings to disk.
Definition: QtMarbleConfigDialog.cpp:409
QFileInfo::absolutePath
QString absolutePath() const
Marble::ControlView::marbleWidget
MarbleWidget * marbleWidget()
Definition: ControlView.h:60
Marble::RoutingManager::routeColorHighlighted
QColor routeColorHighlighted() const
Get color for highlighted route rendering.
Definition: RoutingManager.cpp:505
AbstractDataPlugin.h
Marble::Spherical
Spherical projection.
Definition: MarbleGlobal.h:45
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
Marble::MarbleWidget::inputHandler
MarbleWidgetInputHandler * inputHandler() const
Returns the current input handler.
Definition: MarbleWidget.cpp:320
QLabel
QVector::size
int size() const
MapViewWidget.h
Marble::ControlView
Definition: ControlView.h:46
Marble::ControlView::marbleModel
MarbleModel * marbleModel()
Definition: ControlView.h:61
GeoUriParser.h
Marble::CloudSyncManager
Definition: CloudSyncManager.h:24
Marble::QtMarbleConfigDialog::syncBookmarks
bool syncBookmarks() const
Definition: QtMarbleConfigDialog.cpp:689
QString::arg
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
Marble::MainWindow::addGeoDataFile
void addGeoDataFile(const QString &path)
Definition: MobileMainWindow.cpp:197
Marble::QtMarbleConfigDialog::angleUnit
Marble::AngleUnit angleUnit() const
Definition: QtMarbleConfigDialog.cpp:514
QVariant::toString
QString toString() const
Marble::RoutingManager::lastOpenPath
QString lastOpenPath() const
Return last directory the user opened a route from.
Definition: RoutingManager.cpp:475
Marble::QtMarbleConfigDialog::volatileTileCacheLimit
int volatileTileCacheLimit() const
Definition: QtMarbleConfigDialog.cpp:570
Marble::GeoDataPlacemark
a class representing a point of interest on the map
Definition: GeoDataPlacemark.h:54
CloudSyncManager.h
Marble::QtMarbleConfigDialog::animationQuality
Marble::MapQuality animationQuality() const
Definition: QtMarbleConfigDialog.cpp:525
Marble::mDebug
QDebug mDebug()
a function to replace qDebug() in Marble library code
Definition: MarbleDebug.cpp:36
Marble::MarbleWidget::floatItems
QList< AbstractFloatItem * > floatItems() const
Returns a list of all FloatItems on the widget.
Definition: MarbleWidget.cpp:1146
QLabel::margin
margin
Marble::RoutingManager::showGuidanceModeStartupWarning
bool showGuidanceModeStartupWarning() const
Returns true (default) if a warning is shown to the user when starting guidance mode.
Definition: RoutingManager.cpp:465
Marble::MarbleWidget::renderPlugins
QList< RenderPlugin * > renderPlugins() const
Returns a list of all RenderPlugins on the widget, this includes float items.
Definition: MarbleWidget.cpp:1107
BookmarkSyncManager.h
RoutingProfilesModel.h
SunControlWidget.h
QAction::setEnabled
void setEnabled(bool)
QStatusBar::insertPermanentWidget
int insertPermanentWidget(int index, QWidget *widget, int stretch)
Marble::MarbleModel::setClockSpeed
void setClockSpeed(int speed)
Definition: MarbleModel.cpp:700
QSettings::beginGroup
void beginGroup(const QString &prefix)
Marble::QtMarbleConfigDialog::stillQuality
Marble::MapQuality stillQuality() const
Definition: QtMarbleConfigDialog.cpp:519
QIcon
QFileDialog::getOpenFileNames
QStringList getOpenFileNames(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFlags< QFileDialog::Option > options)
Marble::GeoDataLookAt::setCoordinates
void setCoordinates(const GeoDataCoordinates &coordinates)
set the GeoDataCoordinates object
Definition: GeoDataLookAt.cpp:66
Marble::HttpDownloadManager
This class manages scheduled downloads.
Definition: HttpDownloadManager.h:44
QVariant
Marble::MarbleWidget::centerLatitude
qreal centerLatitude() const
Return the latitude of the center point.
Definition: MarbleWidget.cpp:675
Marble::GeoDataContainer::placemarkList
QVector< GeoDataPlacemark * > placemarkList() const
A convenience function that returns all placemarks in this container.
Definition: GeoDataContainer.cpp:214
Marble::DownloadRegionDialog::setSelectionMethod
void setSelectionMethod(SelectionMethod const )
Definition: DownloadRegionDialog.cpp:274
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