mirror of
https://github.com/subsurface/subsurface.git
synced 2024-12-01 06:30:26 +00:00
488eb15423
When clicking a dive site on the map, the QML code would set the selected dive site, but then all dives of dive sites in the vicinity were set. But still only the clicked-on dive site was shown. Therefore, don't set the list of selected dive sites in QML, but later in DiveListView::selectDives(), where we know all the dives that were selected. This, again, gives nasty entanglement of diverse widgets and models. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
62 lines
1.8 KiB
C++
62 lines
1.8 KiB
C++
// SPDX-License-Identifier: GPL-2.0
|
|
#ifndef QMLMAPWIDGETHELPER_H
|
|
#define QMLMAPWIDGETHELPER_H
|
|
|
|
#include "core/units.h"
|
|
#include "core/subsurface-qt/DiveListNotifier.h"
|
|
#include <QObject>
|
|
#include <QGeoCoordinate>
|
|
|
|
#if defined(Q_OS_IOS)
|
|
#include <QtPlugin>
|
|
Q_IMPORT_PLUGIN(QGeoServiceProviderFactoryGooglemaps)
|
|
#endif
|
|
|
|
class MapLocationModel;
|
|
class MapLocation;
|
|
struct dive_site;
|
|
|
|
class MapWidgetHelper : public QObject {
|
|
|
|
Q_OBJECT
|
|
Q_PROPERTY(QObject *map MEMBER m_map)
|
|
Q_PROPERTY(MapLocationModel *model MEMBER m_mapLocationModel NOTIFY modelChanged)
|
|
Q_PROPERTY(bool editMode MEMBER m_editMode NOTIFY editModeChanged)
|
|
Q_PROPERTY(QString pluginObject READ pluginObject NOTIFY pluginObjectChanged)
|
|
|
|
public:
|
|
explicit MapWidgetHelper(QObject *parent = NULL);
|
|
|
|
void centerOnSelectedDiveSite();
|
|
Q_INVOKABLE QGeoCoordinate getCoordinates(struct dive_site *ds);
|
|
Q_INVOKABLE void centerOnDiveSite(struct dive_site *ds);
|
|
Q_INVOKABLE void reloadMapLocations();
|
|
Q_INVOKABLE void copyToClipboardCoordinates(QGeoCoordinate coord, bool formatTraditional);
|
|
Q_INVOKABLE void calculateSmallCircleRadius(QGeoCoordinate coord);
|
|
Q_INVOKABLE void updateCurrentDiveSiteCoordinatesFromMap(struct dive_site *ds, QGeoCoordinate coord);
|
|
Q_INVOKABLE void selectVisibleLocations();
|
|
Q_INVOKABLE void selectedLocationChanged(struct dive_site *ds);
|
|
void selectionChanged();
|
|
void setSelected(const QVector<dive_site *> &divesites);
|
|
QString pluginObject();
|
|
bool editMode() const;
|
|
|
|
private:
|
|
void updateEditMode();
|
|
QObject *m_map;
|
|
MapLocationModel *m_mapLocationModel;
|
|
qreal m_smallCircleRadius;
|
|
bool m_editMode;
|
|
|
|
private slots:
|
|
void diveSiteChanged(struct dive_site *ds, int field);
|
|
|
|
signals:
|
|
void modelChanged();
|
|
void editModeChanged();
|
|
void selectedDivesChanged(const QList<int> &list);
|
|
void coordinatesChanged(struct dive_site *ds, const location_t &);
|
|
void pluginObjectChanged();
|
|
};
|
|
|
|
#endif
|