1 #ifndef MERKATOR_MAINWINDOW_H_
2 #define MERKATOR_MAINWINDOW_H_
3 
4 #include "IMerkMainWindow.h"
5 #include "IProgressWindow.h"
6 
7 #include <QMainWindow>
8 #include <QtXml>
9 #include <QProgressBar>
10 #include <QLabel>
11 
12 namespace Ui {
13     class MainWindow;
14 }
15 
16 class MainWindowPrivate;
17 class LayerDock;
18 class Document;
19 class Layer;
20 class ImageMapLayer;
21 class MapView;
22 class Feature;
23 class PropertiesDock;
24 class InfoDock;
25 class DirtyDock;
26 class FeaturesDock;
27 class QGPS;
28 class GlobalPainter;
29 class Painter;
30 class TrackLayer;
31 class TrackSegment;
32 class Interaction;
33 class QtToolBarManager;
34 class PreferencesDialog;
35 
36 #ifdef GEOIMAGE
37 class GeoImageDock;
38 #endif
39 
40 class MainWindow : public QMainWindow, public IMerkMainWindow, public IProgressWindow
41 {
42     Q_OBJECT
43 
44     friend class ActionsDialog;
45     friend class MerkaartorPreferences;
46 
47 public:
48     MainWindow(QWidget *parent = 0);
49     virtual ~MainWindow();
50 
51     bool eventFilter ( QObject * watched, QEvent * event );
52 
53 public slots:
54     void invalidateView(bool UpdateDock = true);
55     void toggleButtonStyle();
56 
57     virtual void on_createRoundaboutAction_triggered();
58     virtual void on_createPolygonAction_triggered();
59     virtual void on_createRectangleAction_triggered();
60     virtual void on_createDoubleWayAction_triggered();
61     virtual void on_createNodeAction_triggered();
62     virtual void on_markBridgeAction_triggered();
63     virtual void on_createRoadAction_triggered();
64     virtual void on_createCurvedRoadAction_triggered();
65     virtual void on_createRelationAction_triggered();
66     virtual void on_createAreaAction_triggered();
67     virtual void on_editPropertiesAction_triggered();
68     virtual void on_editUndoAction_triggered();
69     virtual void on_editRedoAction_triggered();
70     virtual void on_editMapStyleAction_triggered();
71     virtual void on_editCutAction_triggered();
72     virtual void on_editCopyAction_triggered();
73     virtual void on_editPasteFeatureAction_triggered();
74     virtual void on_editPasteOverwriteAction_triggered();
75     virtual void on_editPasteMergeAction_triggered();
76 
77     virtual void on_layersNewImageAction_triggered();
78     virtual void on_layersNewDrawingAction_triggered();
79     virtual void on_layersNewFilterAction_triggered();
80     virtual void on_layersMapdustAction_triggered();
81 
82     virtual void on_fileNewAction_triggered();
83     virtual void on_fileDownloadAction_triggered();
84     virtual void on_fileDownloadMoreAction_triggered();
85     virtual void on_fileUploadAction_triggered();
86     virtual void on_fileImportAction_triggered();
87     virtual void on_fileImportGDALAction_triggered();
88     virtual void on_fileOpenAction_triggered();
89     virtual void on_fileSaveAsAction_triggered();
90     virtual void on_fileSaveAsTemplateAction_triggered();
91     virtual void on_fileSaveAction_triggered();
92     virtual void on_fileWorkOfflineAction_triggered();
93     virtual void on_filePrintAction_triggered();
94     virtual void on_filePropertiesAction_triggered();
95 
96     virtual void on_helpAboutAction_triggered();
97     virtual void on_viewZoomAllAction_triggered();
98     virtual void on_viewZoomInAction_triggered();
99     virtual void on_viewZoomOutAction_triggered();
100     virtual void on_viewZoomWindowAction_triggered();
101     virtual void on_viewLockZoomAction_triggered();
102     virtual void on_viewDownloadedAction_triggered();
103     virtual void on_viewDirtyAction_triggered();
104     virtual void on_viewScaleAction_triggered();
105     virtual void on_viewPhotosAction_triggered();
106     virtual void on_viewShowLatLonGridAction_triggered();
107     virtual void on_viewStyleBackgroundAction_triggered();
108     virtual void on_viewStyleForegroundAction_triggered();
109     virtual void on_viewStyleTouchupAction_triggered();
110     virtual void on_viewNamesAction_triggered();
111     virtual void on_viewVirtualNodesAction_triggered();
112     virtual void on_viewTrackPointsAction_triggered();
113     virtual void on_viewTrackSegmentsAction_triggered();
114     virtual void on_viewRelationsAction_triggered();
115     virtual void on_viewGotoAction_triggered();
116     virtual void on_viewArrowsNeverAction_triggered(bool checked);
117     virtual void on_viewArrowsOnewayAction_triggered(bool checked);
118     virtual void on_viewArrowsAlwaysAction_triggered(bool checked);
119 
120     virtual void on_editRemoveAction_triggered();
121     virtual void on_editMoveAction_triggered();
122     virtual void on_editRotateAction_triggered();
123     virtual void on_editScaleAction_triggered();
124     virtual void on_editReverseAction_triggered();
125 
126     virtual void on_roadSplitAction_triggered();
127     virtual void on_roadBreakAction_triggered();
128     virtual void on_roadJoinAction_triggered();
129     virtual void on_roadSimplifyAction_triggered();
130     virtual void on_roadCreateJunctionAction_triggered();
131     virtual void on_roadAddStreetNumbersAction_triggered();
132     virtual void on_roadSubdivideAction_triggered();
133     virtual void on_roadAxisAlignAction_triggered();
134     virtual void on_roadExtrudeAction_triggered();
135     virtual void on_roadBingExtractAction_triggered();
136 
137     virtual void on_featureSelectChildrenAction_triggered();
138     virtual void on_featureSelectParentsAction_triggered();
139     virtual void on_featureDownloadMissingChildrenAction_triggered();
140     virtual void on_featureDeleteAction_triggered();
141     virtual void on_featureCommitAction_triggered();
142 
143     virtual void on_nodeAlignAction_triggered();
144     virtual void on_nodeSpreadAction_triggered();
145     virtual void on_nodeMergeAction_triggered();
146     virtual void on_nodeDetachAction_triggered();
147     virtual void on_relationAddMemberAction_triggered();
148     virtual void on_relationRemoveMemberAction_triggered();
149     virtual void on_relationAddToMultipolygonAction_triggered();
150     virtual void on_areaJoinAction_triggered();
151     virtual void on_areaSplitAction_triggered();
152     virtual void on_areaTerraceAction_triggered();
153 
154     virtual void on_mapStyleSaveAction_triggered();
155     virtual void on_mapStyleSaveAsAction_triggered();
156     virtual void on_mapStyleLoadAction_triggered();
157     virtual void on_exportOSMAction_triggered();
158     virtual void on_exportOSCAction_triggered();
159     virtual void on_exportGPXAction_triggered();
160     virtual void on_exportKMLAction_triggered();
161     virtual void on_exportGDALAction_triggered();
162     virtual void on_editSelectAction_triggered();
163     virtual void on_bookmarkAddAction_triggered();
164     virtual void on_bookmarkRemoveAction_triggered();
165 
on_toolsPreferencesAction_triggered()166     virtual void on_toolsPreferencesAction_triggered() {toolsPreferencesAction_triggered();}
167     virtual void on_toolsShortcutsAction_triggered();
168     virtual void on_toolsToolbarsAction_triggered();
169     virtual void on_toolsWMSServersAction_triggered();
170     virtual void on_toolsTMSServersAction_triggered();
171     virtual void on_toolsProjectionsAction_triggered();
172     virtual void on_toolsFiltersAction_triggered();
173     virtual void toolsPreferencesAction_triggered(bool focusData=false);
174     virtual void on_toolsResetDiscardableAction_triggered();
175     virtual void on_toolsRebuildHistoryAction_triggered();
176 
177     virtual void on_windowPropertiesAction_triggered();
178     virtual void on_windowLayersAction_triggered();
179     virtual void on_windowInfoAction_triggered();
180     virtual void on_windowDirtyAction_triggered();
181     virtual void on_windowFeatsAction_triggered();
182     virtual void on_windowToolbarAction_triggered();
183     virtual void on_windowGPSAction_triggered();
184 #ifdef GEOIMAGE
185     virtual void on_windowGeoimageAction_triggered();
186 #endif
187     virtual void on_windowStylesAction_triggered();
188 
189     virtual void on_windowHideAllAction_triggered();
190     virtual void on_windowShowAllAction_triggered();
191     virtual void on_gpsConnectAction_triggered();
192     virtual void on_gpsReplayAction_triggered();
193     virtual void on_gpsRecordAction_triggered();
194     virtual void on_gpsPauseAction_triggered();
195     virtual void on_gpsDisconnectAction_triggered();
196     virtual void on_gpsCenterAction_triggered();
197     virtual void preferencesChanged(PreferencesDialog* prefs);
198     virtual void clipboardChanged();
199 
200     virtual void on_toolTemplatesSaveAction_triggered();
201     virtual void on_toolTemplatesMergeAction_triggered();
202     virtual void on_toolTemplatesLoadAction_triggered();
203 
204 
205 protected slots:
206     void onCustomcontextmenurequested(const QPoint &pos);
207     void onImagerequested(ImageMapLayer*);
208     void onImagereceived(ImageMapLayer* aLayer);
209     void onLoadingfinished(ImageMapLayer*);
210 
211 signals:
212     void remove_triggered();
213     void move_triggered();
214     void add_triggered();
215     void reverse_triggered();
216 
217     void content_changed();
218 
219 public:
220     MainWindowPrivate* p;
221     Ui::MainWindow *ui;
222 
223     QString currentProjectFile;
224     PropertiesDock* properties();
225     FeaturesDock* features();
226     InfoDock* info();
227     QGPS* gps();
228 #ifdef GEOIMAGE
229     GeoImageDock* geoImage();
230 #endif
231     Document* document();
232     //MapLayer* activeLayer();
233     MapView* view();
234     QByteArray fullscreenState;
235 
236     QProgressBar* pbImages;
237     QString StatusMessage;
238     QLabel* ViewportStatusLabel;
239     QLabel* PaintTimeLabel;
240     QLabel* MeterPerPixelLabel;
241     QLabel* AdjusmentMeterLabel;
242 
243 public slots:
244     void handleMessage(const QString& msg);
245 
246     void adjustLayers(bool adjustViewport);
247     void bookmarkTriggered(QAction* anAction);
248     void recentOpenTriggered(QAction* anAction);
249     void recentImportTriggered(QAction* anAction);
250 #ifndef _MOBILE
251     void projectionSet(const QString& prj);
252     void projectionTriggered(QAction* anAction);
253 #endif
254     void styleTriggered(QAction* anAction);
255     void updateGpsPosition(qreal latitude, qreal longitude, QDateTime time, qreal altitude, qreal speed, qreal heading);
256     void applyStyles(QString NewStyle);
257     void applyPainters(GlobalPainter* theGlobalPainter, QList<Painter>* thePainters);
258 
259 public:
260     bool testImport(const QString filePath);
261     bool importFiles(Document * mapDocument, const QStringList & filesNames, QStringList * importedFileNames = NULL, bool useGdal = false);
262     void loadUrl(const QString& urlString);
263     void loadUrl(const QUrl& u);
264     void loadDocument(QString fn);
265     void loadTemplateDocument(QString fn);
266     void saveDocument(const QString& fn);
267     void saveTemplateDocument(const QString& fn);
268     void downloadFeatures(const QList<Feature*>& aDownloadList);
269 
270     void createProgressDialog();
271     void deleteProgressDialog();
272 
273     void createToolBarManager();
274 
275     void updateLanguage();
276 
277     bool hasUnsavedChanges();
278 
279     void launchInteraction(Interaction *anInteraction);
280     enum ImportStatus { IMPORT_OK, IMPORT_ABORTED, IMPORT_ERROR };
281     bool getPathToSave(const QString& title, const QString& extension, const QString& allowedTypes, QString* path);
282 
283     QStringList translationPaths();
284 
285 protected:
286     MapView* theView;
287     Document* theDocument;
288     InfoDock* theInfo;
289     DirtyDock* theDirty;
290     LayerDock* theLayers;
291 #ifdef GEOIMAGE
292     GeoImageDock* theGeoImage;
293 #endif
294     QGPS* theGPS;
295 
296     TrackLayer* gpsRecLayer;
297     TrackSegment* curGpsTrackSegment;
298     QHash<QString, QString> shortcutsDefault;
299 
300     QTranslator* qtTranslator;
301     QTranslator* merkaartorTranslator;
302 
303     QtToolBarManager *toolBarManager;
304 
305 private slots:
306     void delayedInit();
307     void setAreaOpacity(QAction*);
308     void updateBookmarksMenu();
309     void updateWindowMenu(bool b=false);
310 
311     void on_viewWireframeAction_toggled(bool arg1);
312 
313 private:
314     void importAction( bool useGdal = false );
315     ImportStatus importFile(Document* mapDocument, const QString& fileName, Layer*& newLayer);
316     ImportStatus importFileUsingGDAL(Document* mapDocument, const QString& fileName, Layer*& newLayer);
317     void updateMenu();
318     void updateRecentOpenMenu();
319     void updateRecentImportMenu();
320     void updateProjectionMenu();
321     void updateStyleMenu();
322     bool selectExportedFeatures(QList<Feature*>& theFeatures);
323 
324     Document* doLoadDocument(QFile* file);
325     void doSaveDocument(QFile* fn, bool asTemplate=false);
326 
327     QString makeAbsolute(const QString& path);
328 #if defined(Q_OS_MAC)
329     QString macOsTranslationsPath();
330 #endif
331 
332     bool tryLoadTranslator(const QString& languageFile, QTranslator* theTranslator);
333 
334     void dieClipboardInvalid();
335     void warnMapDownloadFailed();
336 
337     void updateSegmentMode(QMouseEvent* mouseEvent);
338 
339     void startBusyCursor();
340     void endBusyCursor();
341 
342     void syncOSM(const QString &aWeb, const QString &aUser, const QString &aPwd);
343 protected:
344     void closeEvent(QCloseEvent * event);
345     virtual QMenu * createPopupMenu ();
346 };
347 
348 #endif
349 
350 
351