File indexing completed on 2024-04-21 03:48:37

0001 // SPDX-License-Identifier: LGPL-2.1-or-later
0002 //
0003 // SPDX-FileCopyrightText: 2006-2010 Torsten Rahn <tackat@kde.org>
0004 // SPDX-FileCopyrightText: 2007 Inge Wallin <ingwa@kde.org>
0005 // SPDX-FileCopyrightText: 2010-2013 Bernhard Beschow <bbeschow@cs.tu-berlin.de>
0006 //
0007 
0008 
0009 #ifndef MARBLE_QTMAINWINDOW_H
0010 #define MARBLE_QTMAINWINDOW_H
0011 
0012 
0013 #include <QMainWindow>
0014 #include <QVariantMap>
0015 #include "ControlView.h"
0016 
0017 class QActionGroup;
0018 class QAction;
0019 class QLabel;
0020 class QMenu;
0021 class QProgressBar;
0022 
0023 namespace Marble
0024 {
0025 
0026 class GeoDataContainer;
0027 class MarbleWidget;
0028 class SunControlWidget;
0029 class TimeControlWidget;
0030 class QtMarbleConfigDialog;
0031 class DownloadRegionDialog;
0032 class MovieCaptureDialog;
0033 
0034 class MainWindow : public QMainWindow
0035 {
0036     Q_OBJECT
0037 
0038 public:
0039     explicit MainWindow(const QString& marbleDataPath = QString(),
0040                         const QVariantMap& cmdLineSettings = QVariantMap(),
0041                         QWidget *parent=nullptr);
0042     ~MainWindow() override;
0043 
0044 
0045     ControlView* marbleControl() {
0046         return m_controlView;
0047     }
0048     MarbleWidget* marbleWidget() {
0049         return m_controlView->marbleWidget();
0050     }
0051 
0052     void addGeoDataFile( const QString &fileName );
0053 
0054 protected:
0055     void  closeEvent( QCloseEvent *event ) override;
0056 
0057 private:
0058     void  createActions();
0059     void  createMenus( const QList<QAction*> &panelActions );
0060     void  createStatusBar();
0061 
0062     static QString  readMarbleDataPath();
0063     void  readSettings(const QVariantMap& overrideSettings = QVariantMap());
0064     void  writeSettings();
0065 
0066 private Q_SLOTS:
0067     void  showPosition( const QString& position);
0068     void  showDistance( const QString& position);
0069     void  showZoom( int );
0070     void  showDateTime();
0071 
0072     void  initObject(const QVariantMap& cmdLineSettings);
0073     void  editSettings();
0074     void  updateSettings();
0075     
0076     void  fallBackToDefaultTheme();
0077 
0078     void  changeRecordingState();
0079 
0080     void  updateWindowTitle();
0081     void  updateCenterFromTheme();
0082 
0083     // File Menu
0084     void  openFile();
0085     void  openMapDialog();
0086     void  exportMapScreenShot();
0087     void  showDownloadRegionDialog();
0088     void  printMapScreenShot();
0089     void  workOffline( bool );
0090     void  showMapWizard();
0091 
0092     // Edit Menu
0093     void  copyMap();
0094     void  copyCoordinates();
0095     void  updateMapEditButtonVisibility( const QString &mapTheme );
0096     void  showMovieCaptureDialog();
0097     void  stopRecording();
0098 
0099     // View Menu
0100     void  lockPosition( bool );
0101     void  createPluginsMenus();
0102     void  createPluginMenus();
0103     void  showClouds( bool );
0104     void  controlSun();
0105     void  controlTime();
0106     void  showSun( bool );
0107     void  reload();
0108 
0109     // Settings Menu
0110     void  changeViewSize( QAction* );
0111     void  showFullScreen( bool );
0112     void  showStatusBar( bool );
0113     void  setupStatusBar();
0114     void  setupDownloadProgressBar();
0115 
0116     // Help Menu
0117     void  enterWhatsThis();
0118     void  aboutMarble();
0119     void  handbook();
0120     void  openForum();
0121 
0122     //Bookmark Menu
0123     void  openEditBookmarkDialog();
0124     void  setHome();
0125     void  createBookmarksListMenu( QMenu *bookmarksListMenu, const GeoDataContainer *container );
0126     void  lookAtBookmark( QAction * action );
0127     void  manageBookmarks();
0128     void  createBookmarkMenu();
0129     void  createFolderList( QMenu *bookmarksListMenu, const GeoDataContainer *container );
0130     void  showBookmarks( bool show );
0131 
0132     // Download region dialog
0133     void  downloadRegion();
0134 
0135     void showZoomLevel( bool show );
0136     void changeAngleDisplayUnit( QAction *action );
0137 
0138     void handleProgress( int, int );
0139     void removeProgressItem();
0140 
0141 private:
0142     ControlView *m_controlView;
0143     QSize m_savedSize;
0144     SunControlWidget* m_sunControlDialog;
0145     TimeControlWidget* m_timeControlDialog;
0146     QtMarbleConfigDialog *m_configDialog;
0147     DownloadRegionDialog* m_downloadRegionDialog;
0148     MovieCaptureDialog* m_movieCaptureDialog;
0149 
0150     /// Store plugin toolbar pointers so that they can be removed/updated later
0151     QList<QToolBar*> m_pluginToolbars;
0152     /// Store plugin menus so that they can be removed/updated later
0153     QList<QAction*> m_pluginMenus;
0154 
0155     QMenu *m_fileMenu;
0156     QMenu *m_viewMenu;
0157     QMenu *m_helpMenu;
0158     QMenu *m_settingsMenu;
0159     QMenu *m_panelMenu;
0160     QMenu *m_viewSizeMenu;
0161     QMenu *m_infoBoxesMenu;
0162     QMenu *m_onlineServicesMenu;
0163     QMenu *m_bookmarkMenu;
0164     // File Menu
0165     QAction *m_openAction;
0166     QAction *m_exportMapAction;
0167     QAction *m_downloadAction;
0168     QAction *m_downloadRegionAction;
0169     QAction *m_printPreviewAction;
0170     QAction *m_printAction;
0171     QAction *m_workOfflineAction;
0172     QAction *m_quitAction;
0173     QAction *m_mapWizardAction;
0174 
0175     // Edit Menu
0176     QAction *m_copyMapAction;
0177     QAction *m_copyCoordinatesAction;
0178     QAction *m_osmEditAction;
0179     QAction *m_recordMovieAction;
0180     QAction *m_stopRecordingAction;
0181 
0182     // View Menu
0183     QAction *m_showCloudsAction;
0184     QAction *m_controlSunAction;
0185     QAction *m_controlTimeAction;
0186     QAction *m_reloadAction;
0187 
0188     // Settings Menu
0189     QAction *m_fullScreenAction;
0190     QAction *m_statusBarAction;
0191     QAction *m_configDialogAction;
0192     QActionGroup *m_viewSizeActsGroup;
0193 
0194     // Help Menu
0195     QAction *m_whatsThisAction;
0196     QAction *m_aboutMarbleAction;
0197     QAction *m_aboutQtAction;
0198     QAction *m_lockFloatItemsAction;
0199     QAction *m_handbookAction;
0200     QAction *m_forumAction;
0201 
0202     // Status Bar
0203     QString     m_position;
0204     QString     m_distance;
0205     QString     m_zoom;
0206     QString     m_clock;
0207     QLabel      *m_positionLabel;
0208     QLabel      *m_distanceLabel;
0209     QLabel      *m_zoomLabel;
0210     QLabel      *m_clockLabel;
0211     QProgressBar *m_downloadProgressBar;
0212     QAction     *m_toggleTileLevelAction;
0213     QActionGroup *m_angleDisplayUnitActionGroup;
0214     QAction     *m_dmsDegreeAction;
0215     QAction     *m_decimalDegreeAction;
0216     QAction     *m_utmAction;
0217     void updateStatusBar();
0218 
0219     //Bookmark Menu
0220     QAction *m_addBookmarkAction;
0221     QAction *m_setHomeAction;
0222     QAction *m_toggleBookmarkDisplayAction;
0223     QAction *m_manageBookmarksAction;
0224 
0225     QString m_lastFileOpenPath;
0226     QStringList m_commandlineFilePaths;
0227 };
0228 
0229 } // namespace Marble
0230 
0231 #endif