File indexing completed on 2024-04-28 15:39:07

0001 // SPDX-FileCopyrightText: 2020-2023 Tobias Leupold <tl at stonemx dot de>
0002 //
0003 // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0004 
0005 #ifndef MAINWINDOW_H
0006 #define MAINWINDOW_H
0007 
0008 // Local includes
0009 #include "KGeoTag.h"
0010 #include "ElevationEngine.h"
0011 #include "Coordinates.h"
0012 
0013 // KDE includes
0014 #include <KXmlGuiWindow>
0015 
0016 // Local classes
0017 class SharedObjects;
0018 class Settings;
0019 class GpxEngine;
0020 class PreviewWidget;
0021 class MapWidget;
0022 class FixDriftWidget;
0023 class BookmarksWidget;
0024 class ImagesModel;
0025 class ImagesListView;
0026 class AutomaticMatchingWidget;
0027 class TracksListView;
0028 class GeoDataModel;
0029 class MapCenterInfo;
0030 
0031 // Qt classes
0032 class QDockWidget;
0033 class QCloseEvent;
0034 
0035 class MainWindow : public KXmlGuiWindow
0036 {
0037     Q_OBJECT
0038 
0039 public:
0040     explicit MainWindow(SharedObjects *sharedObjects);
0041     void addPathsFromCommandLine(QStringList &paths);
0042 
0043 protected:
0044     void closeEvent(QCloseEvent *event) override;
0045 
0046 private Q_SLOTS:
0047     void updateImagesListsMode();
0048     void setDefaultDockArrangement();
0049 
0050     void addFiles(const QStringList &files);
0051     void addDirectory(const QString &path);
0052     void addGpx(const QVector<QString> &paths);
0053     void addImages(const QVector<QString> &paths);
0054 
0055     void imagesDropped(const QVector<QString> &paths);
0056     void saveSelection(ImagesListView *list);
0057     void saveAllChanges();
0058     void showSettings();
0059     void assignTo(const QVector<QString> &paths, const Coordinates &coordinates);
0060     void failedToParseClipboard();
0061     void checkUpdatePreview(const QVector<QString> &paths);
0062     void elevationProcessed(ElevationEngine::Target target, const QVector<QString> &paths,
0063                             const QVector<double> &elevations);
0064     void elevationLookupFailed(const QString &errorMessage);
0065     void notAllElevationsPresent(int locationsCount, int elevationsCount);
0066     void triggerAutomaticMatching(ImagesListView *list, KGeoTag::SearchType searchType);
0067     void triggerCompleteAutomaticMatching(KGeoTag::SearchType searchType);
0068     void matchAutomatically(const QVector<QString> &paths, KGeoTag::SearchType searchType);
0069     void assignToMapCenter(ImagesListView *list);
0070     void assignManually(ImagesListView *list);
0071     void findClosestTrackPoint(const QString &path);
0072     void editCoordinates(ImagesListView *list);
0073     void removeCoordinates(ImagesListView *list);
0074     void removeCoordinates(const QVector<QString> &paths);
0075     void discardChanges(ImagesListView *list);
0076     void lookupElevation(ImagesListView *list);
0077     void imagesTimeZoneChanged();
0078     void cameraDriftSettingsChanged();
0079     void centerTrackPoint(int trackIndex, int trackPointIndex);
0080 
0081     void removeImages(ImagesListView *list);
0082     void removeProcessedSavedImages();
0083     void removeImagesLoadedTagged();
0084     void removeAllImages();
0085     void removeTracks();
0086     void removeAllTracks();
0087     void removeEverything();
0088 
0089 private: // Functions
0090     QDockWidget *createImagesDock(KGeoTag::ImagesListType type, const QString &title,
0091                                   const QString &dockId);
0092     QDockWidget *createDockWidget(const QString &title, QWidget *widget, const QString &objectName);
0093     void lookupElevation(const QVector<QString> &paths);
0094     QString saveFailedHeader(int processed, int allImages) const;
0095     QString skipRetryCancelText(int processed, int allImages) const;
0096     bool checkForPendingChanges();
0097     void saveChanges(const QVector<QString> &files);
0098 
0099 private: // Variables
0100     SharedObjects *m_sharedObjects;
0101     Settings *m_settings;
0102     GpxEngine *m_gpxEngine;
0103     ElevationEngine *m_elevationEngine;
0104     PreviewWidget *m_previewWidget;
0105     MapWidget *m_mapWidget;
0106     FixDriftWidget *m_fixDriftWidget;
0107     BookmarksWidget *m_bookmarksWidget;
0108     ImagesModel *m_imagesModel;
0109     GeoDataModel *m_geoDataModel;
0110     AutomaticMatchingWidget *m_automaticMatchingWidget;
0111     TracksListView *m_tracksView;
0112     MapCenterInfo *m_mapCenterInfo;
0113 
0114     QDockWidget *m_previewDock;
0115     QDockWidget *m_fixDriftDock;
0116     QDockWidget *m_automaticMatchingDock;
0117     QDockWidget *m_bookmarksDock;
0118     QDockWidget *m_mapDock;
0119     QDockWidget *m_unAssignedImagesDock;
0120     QDockWidget *m_assignedOrAllImagesDock;
0121     QDockWidget *m_tracksDock;
0122 
0123 };
0124 
0125 #endif // MAINWINDOW_H