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

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 IMAGESLISTVIEW_H
0006 #define IMAGESLISTVIEW_H
0007 
0008 // Local includes
0009 #include "KGeoTag.h"
0010 #include "Coordinates.h"
0011 
0012 // Qt includes
0013 #include <QListView>
0014 
0015 // Local classes
0016 class SharedObjects;
0017 class ImagesListFilter;
0018 
0019 // Qt classes
0020 class QMenu;
0021 class QAction;
0022 
0023 class ImagesListView : public QListView
0024 {
0025     Q_OBJECT
0026 
0027 public:
0028     explicit ImagesListView(KGeoTag::ImagesListType type, SharedObjects *sharedObjects,
0029                             QWidget *parent = nullptr);
0030     void setListType(KGeoTag::ImagesListType type);
0031     QVector<QString> selectedPaths() const;
0032     void highlightImage(const QModelIndex &index);
0033 
0034 public Q_SLOTS:
0035     void updateBookmarks();
0036 
0037 Q_SIGNALS:
0038     void imageSelected(const QModelIndex &index);
0039     void centerImage(const QModelIndex &index);
0040     void requestAutomaticMatching(ImagesListView *list, KGeoTag::SearchType searchType);
0041     void assignToMapCenter(ImagesListView *list);
0042     void assignManually(ImagesListView *list);
0043     void editCoordinates(ImagesListView *list);
0044     void lookupElevation(ImagesListView *list);
0045     void removeCoordinates(ImagesListView *list);
0046     void removeCoordinates(const QVector<QString> &paths);
0047     void requestSaving(ImagesListView *list);
0048     void discardChanges(ImagesListView *list);
0049     void assignTo(const QVector<QString> &paths, const Coordinates &coordinates);
0050     void requestAddingImages(const QVector<QString> &paths);
0051     void removeImages(ImagesListView *list);
0052     void failedToParseClipboard();
0053     void findClosestTrackPoint(const QString &path);
0054 
0055 protected:
0056     void mousePressEvent(QMouseEvent *event) override;
0057     void mouseMoveEvent(QMouseEvent *event) override;
0058     void keyPressEvent(QKeyEvent *event) override;
0059     void currentChanged(const QModelIndex &current, const QModelIndex &) override;
0060 
0061 private Q_SLOTS:
0062     void showContextMenu(const QPoint &point);
0063     void selectImages(bool coordinatesSet);
0064     void openExternally();
0065     void assignToClipboard();
0066 
0067 private: // Variables
0068     KGeoTag::ImagesListType m_listType;
0069     ImagesListFilter *m_listFilter;
0070     const QHash<QString, Coordinates> *m_bookmarks;
0071 
0072     bool m_dragStarted = false;
0073     QPoint m_dragStartPosition;
0074 
0075     QMenu *m_contextMenu;
0076     QMenu *m_automaticMatchingMenu;
0077     QMenu *m_bookmarksMenu;
0078     QMenu *m_selectMenu;
0079 
0080     QAction *m_selectAll;
0081     QAction *m_assignToMapCenter;
0082     QAction *m_assignToClipboard;
0083     QAction *m_assignManually;
0084     QAction *m_findClosestTrackPoint;
0085     QAction *m_editCoordinates;
0086     QAction *m_lookupElevation;
0087     QAction *m_removeCoordinates;
0088     QAction *m_save;
0089     QAction *m_discardChanges;
0090     QAction *m_removeImages;
0091     QAction *m_openExternally;
0092 
0093 };
0094 
0095 #endif // IMAGESLISTVIEW_H