1 /* SPDX-FileCopyrightText: 2020-2021 Tobias Leupold <tobias.leupold@gmx.de>
2 
3    SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-KDE-Accepted-GPL
4 */
5 
6 #ifndef MAINWINDOW_H
7 #define MAINWINDOW_H
8 
9 // Local includes
10 #include "KGeoTag.h"
11 #include "ElevationEngine.h"
12 #include "Coordinates.h"
13 
14 // KDE includes
15 #include <KXmlGuiWindow>
16 
17 // Local classes
18 class SharedObjects;
19 class Settings;
20 class GpxEngine;
21 class PreviewWidget;
22 class MapWidget;
23 class FixDriftWidget;
24 class BookmarksWidget;
25 class ImagesModel;
26 class ImagesListView;
27 class AutomaticMatchingWidget;
28 class TracksListView;
29 class GeoDataModel;
30 class MapCenterInfo;
31 
32 // Qt classes
33 class QDockWidget;
34 class QCloseEvent;
35 
36 class MainWindow : public KXmlGuiWindow
37 {
38     Q_OBJECT
39 
40 public:
41     explicit MainWindow(SharedObjects *sharedObjects);
42 
43 protected:
44     void closeEvent(QCloseEvent *event) override;
45 
46 private slots:
47     void updateImagesListsMode();
48     void setDefaultDockArrangement();
49 
50     void addFiles();
51     void addDirectory();
52     void addGpx(const QVector<QString> &paths);
53     void addImages(const QVector<QString> &paths);
54 
55     void imagesDropped(const QVector<QString> &paths);
56     void saveSelection(ImagesListView *list);
57     void saveAllChanges();
58     void showSettings();
59     void assignTo(const QVector<QString> &paths, const Coordinates &coordinates);
60     void checkUpdatePreview(const QVector<QString> &paths);
61     void elevationProcessed(ElevationEngine::Target target, const QVector<QString> &paths,
62                             const QVector<double> &elevations);
63     void elevationLookupFailed(const QString &errorMessage);
64     void notAllElevationsPresent(int locationsCount, int elevationsCount);
65     void triggerAutomaticMatching(ImagesListView *list, KGeoTag::SearchType searchType);
66     void triggerCompleteAutomaticMatching(KGeoTag::SearchType searchType);
67     void matchAutomatically(const QVector<QString> &paths, KGeoTag::SearchType searchType);
68     void assignToMapCenter(ImagesListView *list);
69     void assignManually(ImagesListView *list);
70     void editCoordinates(ImagesListView *list);
71     void removeCoordinates(ImagesListView *list);
72     void removeCoordinates(const QVector<QString> &paths);
73     void discardChanges(ImagesListView *list);
74     void lookupElevation(ImagesListView *list);
75     void imagesTimeZoneChanged();
76     void cameraDriftSettingsChanged();
77     void centerTrackPoint(int trackIndex, int trackPointIndex);
78 
79     void removeImages(ImagesListView *list);
80     void removeProcessedSavedImages();
81     void removeImagesLoadedTagged();
82     void removeAllImages();
83     void removeTracks();
84     void removeAllTracks();
85     void removeEverything();
86 
87 private: // Functions
88     QDockWidget *createImagesDock(KGeoTag::ImagesListType type, const QString &title,
89                                   const QString &dockId);
90     QDockWidget *createDockWidget(const QString &title, QWidget *widget, const QString &objectName);
91     void lookupElevation(const QVector<QString> &paths);
92     QString saveFailedHeader(int processed, int allImages) const;
93     QString skipRetryCancelText(int processed, int allImages) const;
94     bool checkForPendingChanges();
95     void saveChanges(const QVector<QString> &files);
96 
97 private: // Variables
98     SharedObjects *m_sharedObjects;
99     Settings *m_settings;
100     GpxEngine *m_gpxEngine;
101     ElevationEngine *m_elevationEngine;
102     PreviewWidget *m_previewWidget;
103     MapWidget *m_mapWidget;
104     FixDriftWidget *m_fixDriftWidget;
105     BookmarksWidget *m_bookmarksWidget;
106     ImagesModel *m_imagesModel;
107     GeoDataModel *m_geoDataModel;
108     AutomaticMatchingWidget *m_automaticMatchingWidget;
109     TracksListView *m_tracksView;
110     MapCenterInfo *m_mapCenterInfo;
111 
112     QDockWidget *m_previewDock;
113     QDockWidget *m_fixDriftDock;
114     QDockWidget *m_automaticMatchingDock;
115     QDockWidget *m_bookmarksDock;
116     QDockWidget *m_mapDock;
117     QDockWidget *m_unAssignedImagesDock;
118     QDockWidget *m_assignedOrAllImagesDock;
119     QDockWidget *m_tracksDock;
120 
121 };
122 
123 #endif // MAINWINDOW_H
124