subsurface/map-widget/qmlmapwidgethelper.h
Berthold Stoeger 44c65fec88 Map: automatically update names on the map
Currently, dive site names are only updated on full reload.
Instead hook directly into the corresponding signal in the
MapLocationModel to set the name. Also to the coordinates
directly there instead of going via the MapWidgetHelper.

In the MapWidgetHelper, just center on the changed dive site.
Hook into the signal directly there and remove the slot
from the MapWidget. This makes the whole call-chain at least
one call shorter.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-05-11 12:06:19 -07:00

60 lines
1.7 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();
QString pluginObject();
private:
void enterEditMode();
void exitEditMode();
QObject *m_map;
MapLocationModel *m_mapLocationModel;
qreal m_smallCircleRadius;
bool m_editMode;
private slots:
void selectedLocationChanged(MapLocation *);
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