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

0001 // SPDX-FileCopyrightText: 2020-2022 Tobias Leupold <tl at stonemx dot de>
0002 //
0003 // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0004 
0005 #ifndef BOOKMARKSLIST_H
0006 #define BOOKMARKSLIST_H
0007 
0008 // Local includes
0009 #include "ElevationEngine.h"
0010 #include "Coordinates.h"
0011 
0012 // Qt includes
0013 #include <QListWidget>
0014 
0015 // Local classes
0016 class SharedObjects;
0017 class Settings;
0018 class MapWidget;
0019 
0020 // Qt classes
0021 class QMenu;
0022 class QAction;
0023 class QListWidgetItem;
0024 
0025 class BookmarksList : public QListWidget
0026 {
0027     Q_OBJECT
0028 
0029 public:
0030     explicit BookmarksList(SharedObjects *sharedObjects, QWidget *parent = nullptr);
0031     const QHash<QString, Coordinates> *bookmarks() const;
0032 
0033 Q_SIGNALS:
0034     void showInfo(const Coordinates &coordinates);
0035     void bookmarksChanged();
0036 
0037 private: // Structs
0038     struct EnteredString
0039     {
0040         QString string;
0041         bool okay;
0042     };
0043 
0044 private Q_SLOTS:
0045     void showContextMenu(const QPoint &point);
0046     void newBookmark();
0047     void newManualBookmark();
0048     void renameBookmark();
0049     void editCoordinates();
0050     void lookupElevation();
0051     void setElevation();
0052     void deleteBookmark();
0053 
0054     void itemHighlighted(QListWidgetItem *item, QListWidgetItem *);
0055     void elevationProcessed(ElevationEngine::Target target, const QVector<QString> &ids,
0056                             const QVector<double> &elevations);
0057     void restoreAfterElevationLookup();
0058     void centerBookmark(QListWidgetItem *item);
0059 
0060 
0061 private: // Functions
0062     void saveBookmark(QString label, const Coordinates &coordinates);
0063     EnteredString getString(const QString &title, const QString &label,
0064                             const QString &text = QString());
0065     void requestElevation(const QString &id);
0066 
0067 private: // Variables
0068     Settings *m_settings;
0069     ElevationEngine *m_elevationEngine;
0070     MapWidget *m_mapWidget;
0071 
0072     QHash<QString, Coordinates> m_bookmarks;
0073 
0074     QListWidgetItem *m_contextMenuItem = nullptr;
0075     QMenu *m_contextMenu;
0076     QAction *m_renameBookmark;
0077     QAction *m_lookupElevation;
0078     QAction *m_setElevation;
0079     QAction *m_deleteBookmark;
0080     QAction *m_editCoordinates;
0081 
0082 };
0083 
0084 #endif // BOOKMARKSLIST_H