1 // SPDX-License-Identifier: LGPL-2.1-or-later
2 //
3 // SPDX-FileCopyrightText: 2006-2010 Torsten Rahn <tackat@kde.org>
4 // SPDX-FileCopyrightText: 2007 Inge Wallin <ingwa@kde.org>
5 // SPDX-FileCopyrightText: 2010-2013 Bernhard Beschow <bbeschow@cs.tu-berlin.de>
6 //
7 
8 
9 #ifndef MARBLE_QTMAINWINDOW_H
10 #define MARBLE_QTMAINWINDOW_H
11 
12 
13 #include <QMainWindow>
14 #include <QVariantMap>
15 #include "ControlView.h"
16 
17 class QActionGroup;
18 class QAction;
19 class QLabel;
20 class QMenu;
21 class QProgressBar;
22 
23 namespace Marble
24 {
25 
26 class GeoDataContainer;
27 class MarbleWidget;
28 class SunControlWidget;
29 class TimeControlWidget;
30 class QtMarbleConfigDialog;
31 class DownloadRegionDialog;
32 class MovieCaptureDialog;
33 
34 class MainWindow : public QMainWindow
35 {
36     Q_OBJECT
37 
38 public:
39     explicit MainWindow(const QString& marbleDataPath = QString(),
40                         const QVariantMap& cmdLineSettings = QVariantMap(),
41                         QWidget *parent=nullptr);
42     ~MainWindow() override;
43 
44 
marbleControl()45     ControlView* marbleControl() {
46         return m_controlView;
47     }
marbleWidget()48     MarbleWidget* marbleWidget() {
49         return m_controlView->marbleWidget();
50     }
51 
52     void addGeoDataFile( const QString &fileName );
53 
54 protected:
55     void  closeEvent( QCloseEvent *event ) override;
56 
57 private:
58     void  createActions();
59     void  createMenus( const QList<QAction*> &panelActions );
60     void  createStatusBar();
61 
62     static QString  readMarbleDataPath();
63     void  readSettings(const QVariantMap& overrideSettings = QVariantMap());
64     void  writeSettings();
65 
66 private Q_SLOTS:
67     void  showPosition( const QString& position);
68     void  showDistance( const QString& position);
69     void  showZoom( int );
70     void  showDateTime();
71 
72     void  initObject(const QVariantMap& cmdLineSettings);
73     void  editSettings();
74     void  updateSettings();
75 
76     void  fallBackToDefaultTheme();
77 
78     void  changeRecordingState();
79 
80     void  updateWindowTitle();
81 
82     // File Menu
83     void  openFile();
84     void  openMapDialog();
85     void  exportMapScreenShot();
86     void  showDownloadRegionDialog();
87     void  printMapScreenShot();
88     void  workOffline( bool );
89     void  showMapWizard();
90 
91     // Edit Menu
92     void  copyMap();
93     void  copyCoordinates();
94     void  updateMapEditButtonVisibility( const QString &mapTheme );
95     void  showMovieCaptureDialog();
96     void  stopRecording();
97 
98     // View Menu
99     void  lockPosition( bool );
100     void  createPluginsMenus();
101     void  createPluginMenus();
102     void  showClouds( bool );
103     void  controlSun();
104     void  controlTime();
105     void  showSun( bool );
106     void  reload();
107 
108     // Settings Menu
109     void  changeViewSize( QAction* );
110     void  showFullScreen( bool );
111     void  showStatusBar( bool );
112     void  setupStatusBar();
113     void  setupDownloadProgressBar();
114 
115     // Help Menu
116     void  enterWhatsThis();
117     void  aboutMarble();
118     void  handbook();
119     void  openForum();
120 
121     //Bookmark Menu
122     void  openEditBookmarkDialog();
123     void  setHome();
124     void  createBookmarksListMenu( QMenu *bookmarksListMenu, const GeoDataContainer *container );
125     void  lookAtBookmark( QAction * action );
126     void  manageBookmarks();
127     void  createBookmarkMenu();
128     void  createFolderList( QMenu *bookmarksListMenu, const GeoDataContainer *container );
129     void  showBookmarks( bool show );
130 
131     // Download region dialog
132     void  downloadRegion();
133 
134     void showZoomLevel( bool show );
135     void changeAngleDisplayUnit( QAction *action );
136 
137     void handleProgress( int, int );
138     void removeProgressItem();
139 
140 private:
141     ControlView *m_controlView;
142     QSize m_savedSize;
143     SunControlWidget* m_sunControlDialog;
144     TimeControlWidget* m_timeControlDialog;
145     QtMarbleConfigDialog *m_configDialog;
146     DownloadRegionDialog* m_downloadRegionDialog;
147     MovieCaptureDialog* m_movieCaptureDialog;
148 
149     /// Store plugin toolbar pointers so that they can be removed/updated later
150     QList<QToolBar*> m_pluginToolbars;
151     /// Store plugin menus so that they can be removed/updated later
152     QList<QAction*> m_pluginMenus;
153 
154     QMenu *m_fileMenu;
155     QMenu *m_viewMenu;
156     QMenu *m_helpMenu;
157     QMenu *m_settingsMenu;
158     QMenu *m_panelMenu;
159     QMenu *m_viewSizeMenu;
160     QMenu *m_infoBoxesMenu;
161     QMenu *m_onlineServicesMenu;
162     QMenu *m_bookmarkMenu;
163     // File Menu
164     QAction *m_openAction;
165     QAction *m_exportMapAction;
166     QAction *m_downloadAction;
167     QAction *m_downloadRegionAction;
168     QAction *m_printPreviewAction;
169     QAction *m_printAction;
170     QAction *m_workOfflineAction;
171     QAction *m_quitAction;
172     QAction *m_mapWizardAction;
173 
174     // Edit Menu
175     QAction *m_copyMapAction;
176     QAction *m_copyCoordinatesAction;
177     QAction *m_osmEditAction;
178     QAction *m_recordMovieAction;
179     QAction *m_stopRecordingAction;
180 
181     // View Menu
182     QAction *m_showCloudsAction;
183     QAction *m_controlSunAction;
184     QAction *m_controlTimeAction;
185     QAction *m_reloadAction;
186 
187     // Settings Menu
188     QAction *m_fullScreenAction;
189     QAction *m_statusBarAction;
190     QAction *m_configDialogAction;
191     QActionGroup *m_viewSizeActsGroup;
192 
193     // Help Menu
194     QAction *m_whatsThisAction;
195     QAction *m_aboutMarbleAction;
196     QAction *m_aboutQtAction;
197     QAction *m_lockFloatItemsAction;
198     QAction *m_handbookAction;
199     QAction *m_forumAction;
200 
201     // Status Bar
202     QString     m_position;
203     QString     m_distance;
204     QString     m_zoom;
205     QString     m_clock;
206     QLabel      *m_positionLabel;
207     QLabel      *m_distanceLabel;
208     QLabel      *m_zoomLabel;
209     QLabel      *m_clockLabel;
210     QProgressBar *m_downloadProgressBar;
211     QAction     *m_toggleTileLevelAction;
212     QActionGroup *m_angleDisplayUnitActionGroup;
213     QAction     *m_dmsDegreeAction;
214     QAction     *m_decimalDegreeAction;
215     QAction     *m_utmAction;
216     void updateStatusBar();
217 
218     //Bookmark Menu
219     QAction *m_addBookmarkAction;
220     QAction *m_setHomeAction;
221     QAction *m_toggleBookmarkDisplayAction;
222     QAction *m_manageBookmarksAction;
223 
224     QString m_lastFileOpenPath;
225     QStringList m_commandlineFilePaths;
226 };
227 
228 } // namespace Marble
229 
230 #endif
231