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 IMAGESLISTVIEW_H
7 #define IMAGESLISTVIEW_H
8 
9 // Local includes
10 #include "KGeoTag.h"
11 #include "Coordinates.h"
12 
13 // Qt includes
14 #include <QListView>
15 
16 // Local classes
17 class SharedObjects;
18 class ImagesListFilter;
19 
20 // Qt classes
21 class QMenu;
22 class QAction;
23 
24 class ImagesListView : public QListView
25 {
26     Q_OBJECT
27 
28 public:
29     explicit ImagesListView(KGeoTag::ImagesListType type, SharedObjects *sharedObjects,
30                             QWidget *parent = nullptr);
31     void setListType(KGeoTag::ImagesListType type);
32     QVector<QString> selectedPaths() const;
33 
34 public slots:
35     void updateBookmarks();
36 
37 signals:
38     void imageSelected(const QModelIndex &index);
39     void centerImage(const QModelIndex &index);
40     void requestAutomaticMatching(ImagesListView *list, KGeoTag::SearchType searchType);
41     void assignToMapCenter(ImagesListView *list);
42     void assignManually(ImagesListView *list);
43     void editCoordinates(ImagesListView *list);
44     void lookupElevation(ImagesListView *list);
45     void removeCoordinates(ImagesListView *list);
46     void removeCoordinates(const QVector<QString> &paths);
47     void requestSaving(ImagesListView *list);
48     void discardChanges(ImagesListView *list);
49     void assignTo(const QVector<QString> &paths, const Coordinates &coordinates);
50     void requestAddingImages(const QVector<QString> &paths);
51     void removeImages(ImagesListView *list);
52 
53 protected:
54     void mousePressEvent(QMouseEvent *event) override;
55     void mouseMoveEvent(QMouseEvent *event) override;
56     void keyPressEvent(QKeyEvent *event) override;
57     void currentChanged(const QModelIndex &current, const QModelIndex &) override;
58 
59 private slots:
60     void showContextMenu(const QPoint &point);
61     void selectImages(bool coordinatesSet);
62 
63 private: // Variables
64     KGeoTag::ImagesListType m_listType;
65     ImagesListFilter *m_listFilter;
66     const QHash<QString, Coordinates> *m_bookmarks;
67 
68     bool m_dragStarted = false;
69     QPoint m_dragStartPosition;
70 
71     QMenu *m_contextMenu;
72     QMenu *m_automaticMatchingMenu;
73     QMenu *m_bookmarksMenu;
74     QMenu *m_selectMenu;
75 
76     QAction *m_selectAll;
77     QAction *m_assignToMapCenter;
78     QAction *m_assignManually;
79     QAction *m_editCoordinates;
80     QAction *m_lookupElevation;
81     QAction *m_removeCoordinates;
82     QAction *m_save;
83     QAction *m_discardChanges;
84     QAction *m_removeImages;
85 
86 };
87 
88 #endif // IMAGESLISTVIEW_H
89