summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--desktop-widgets/mapwidget.cpp8
-rw-r--r--desktop-widgets/mapwidget.h1
-rw-r--r--map-widget/qmlmapwidgethelper.cpp12
-rw-r--r--map-widget/qmlmapwidgethelper.h3
-rw-r--r--qt-models/maplocationmodel.cpp39
-rw-r--r--qt-models/maplocationmodel.h5
6 files changed, 38 insertions, 30 deletions
diff --git a/desktop-widgets/mapwidget.cpp b/desktop-widgets/mapwidget.cpp
index b28dea830..113283fc6 100644
--- a/desktop-widgets/mapwidget.cpp
+++ b/desktop-widgets/mapwidget.cpp
@@ -28,7 +28,6 @@ MapWidget::MapWidget(QWidget *parent) : QQuickWidget(parent)
m_mapHelper = nullptr;
setResizeMode(QQuickWidget::SizeRootObjectToView);
connect(this, &QQuickWidget::statusChanged, this, &MapWidget::doneLoading);
- connect(&diveListNotifier, &DiveListNotifier::diveSiteChanged, this, &MapWidget::diveSiteChanged);
connect(&diveListNotifier, &DiveListNotifier::divesChanged, this, &MapWidget::divesChanged);
setSource(urlMapWidget);
}
@@ -91,13 +90,6 @@ void MapWidget::coordinatesChanged(struct dive_site *ds, const location_t &locat
Command::editDiveSiteLocation(ds, location);
}
-void MapWidget::diveSiteChanged(struct dive_site *ds, int field)
-{
- CHECK_IS_READY_RETURN_VOID();
- if (field == LocationInformationModel::LOCATION)
- m_mapHelper->updateDiveSiteCoordinates(ds, ds->location);
-}
-
void MapWidget::divesChanged(dive_trip *, const QVector<dive *> &, DiveField field)
{
if (field == DiveField::DIVESITE)
diff --git a/desktop-widgets/mapwidget.h b/desktop-widgets/mapwidget.h
index 430dd1668..67801207a 100644
--- a/desktop-widgets/mapwidget.h
+++ b/desktop-widgets/mapwidget.h
@@ -31,7 +31,6 @@ public slots:
void selectedDivesChanged(const QList<int> &);
void coordinatesChanged(struct dive_site *ds, const location_t &);
void doneLoading(QQuickWidget::Status status);
- void diveSiteChanged(struct dive_site *ds, int field);
void divesChanged(dive_trip *, const QVector<dive *> &, DiveField field);
private:
diff --git a/map-widget/qmlmapwidgethelper.cpp b/map-widget/qmlmapwidgethelper.cpp
index ccc5a6e7a..7d752cc63 100644
--- a/map-widget/qmlmapwidgethelper.cpp
+++ b/map-widget/qmlmapwidgethelper.cpp
@@ -8,6 +8,7 @@
#include "core/divesite.h"
#include "core/qthelper.h"
#include "qt-models/maplocationmodel.h"
+#include "qt-models/divelocationmodel.h"
#ifndef SUBSURFACE_MOBILE
#include "qt-models/filtermodels.h"
#endif
@@ -22,6 +23,7 @@ MapWidgetHelper::MapWidgetHelper(QObject *parent) : QObject(parent)
m_editMode = false;
connect(m_mapLocationModel, SIGNAL(selectedLocationChanged(MapLocation *)),
this, SLOT(selectedLocationChanged(MapLocation *)));
+ connect(&diveListNotifier, &DiveListNotifier::diveSiteChanged, this, &MapWidgetHelper::diveSiteChanged);
}
QGeoCoordinate MapWidgetHelper::getCoordinates(struct dive_site *ds)
@@ -218,15 +220,9 @@ void MapWidgetHelper::updateCurrentDiveSiteCoordinatesFromMap(struct dive_site *
emit coordinatesChanged(ds, location);
}
-void MapWidgetHelper::updateDiveSiteCoordinates(struct dive_site *ds, const location_t &location)
+void MapWidgetHelper::diveSiteChanged(struct dive_site *ds, int field)
{
- if (!ds)
- return;
- const qreal latitude_r = location.lat.udeg * 0.000001;
- const qreal longitude_r = location.lon.udeg * 0.000001;
- QGeoCoordinate coord(latitude_r, longitude_r);
- m_mapLocationModel->updateMapLocationCoordinates(ds, coord);
- QMetaObject::invokeMethod(m_map, "centerOnCoordinate", Q_ARG(QVariant, QVariant::fromValue(coord)));
+ centerOnDiveSite(ds);
}
void MapWidgetHelper::exitEditMode()
diff --git a/map-widget/qmlmapwidgethelper.h b/map-widget/qmlmapwidgethelper.h
index d6348c346..86d9a8ff5 100644
--- a/map-widget/qmlmapwidgethelper.h
+++ b/map-widget/qmlmapwidgethelper.h
@@ -3,6 +3,7 @@
#define QMLMAPWIDGETHELPER_H
#include "core/units.h"
+#include "core/subsurface-qt/DiveListNotifier.h"
#include <QObject>
#include <QGeoCoordinate>
@@ -34,7 +35,6 @@ public:
Q_INVOKABLE void calculateSmallCircleRadius(QGeoCoordinate coord);
Q_INVOKABLE void updateCurrentDiveSiteCoordinatesFromMap(struct dive_site *ds, QGeoCoordinate coord);
Q_INVOKABLE void selectVisibleLocations();
- void updateDiveSiteCoordinates(struct dive_site *ds, const location_t &);
QString pluginObject();
private:
@@ -47,6 +47,7 @@ private:
private slots:
void selectedLocationChanged(MapLocation *);
+ void diveSiteChanged(struct dive_site *ds, int field);
signals:
void modelChanged();
diff --git a/qt-models/maplocationmodel.cpp b/qt-models/maplocationmodel.cpp
index 295f514eb..b1fe16b60 100644
--- a/qt-models/maplocationmodel.cpp
+++ b/qt-models/maplocationmodel.cpp
@@ -1,5 +1,6 @@
// SPDX-License-Identifier: GPL-2.0
#include "maplocationmodel.h"
+#include "divelocationmodel.h"
#include "core/divesite.h"
#ifndef SUBSURFACE_MOBILE
#include "qt-models/filtermodels.h"
@@ -68,6 +69,7 @@ MapLocationModel::MapLocationModel(QObject *parent) : QAbstractListModel(parent)
m_roles[MapLocation::Roles::RoleDivesite] = MapLocation::PROPERTY_NAME_DIVESITE;
m_roles[MapLocation::Roles::RoleCoordinate] = MapLocation::PROPERTY_NAME_COORDINATE;
m_roles[MapLocation::Roles::RoleName] = MapLocation::PROPERTY_NAME_NAME;
+ connect(&diveListNotifier, &DiveListNotifier::diveSiteChanged, this, &MapLocationModel::diveSiteChanged);
}
MapLocationModel::~MapLocationModel()
@@ -215,18 +217,33 @@ MapLocation *MapLocationModel::getMapLocation(const struct dive_site *ds)
return NULL;
}
-void MapLocationModel::updateMapLocationCoordinates(const struct dive_site *ds, QGeoCoordinate coord)
+void MapLocationModel::diveSiteChanged(struct dive_site *ds, int field)
{
- MapLocation *location;
- int row = 0;
- foreach(location, m_mapLocations) {
- if (ds == location->divesite()) {
- location->setCoordinateNoEmit(coord);
- emit dataChanged(createIndex(row, 0), createIndex(row, 0));
- return;
+ // Find dive site
+ int row;
+ for (row = 0; row < m_mapLocations.size(); ++row) {
+ if (m_mapLocations[row]->divesite() == ds)
+ break;
+ }
+ if (row == m_mapLocations.size())
+ return;
+
+ switch (field) {
+ case LocationInformationModel::LOCATION:
+ if (has_location(&ds->location)) {
+ const qreal latitude_r = ds->location.lat.udeg * 0.000001;
+ const qreal longitude_r = ds->location.lon.udeg * 0.000001;
+ QGeoCoordinate coord(latitude_r, longitude_r);
+ m_mapLocations[row]->setCoordinateNoEmit(coord);
}
- row++;
+ break;
+ case LocationInformationModel::NAME:
+ m_mapLocations[row]->setProperty("name", ds->name);
+ break;
+ default:
+ break;
}
- // should not happen, as this should be called only when editing an existing marker
- qWarning() << "MapLocationModel::updateMapLocationCoordinates(): cannot find MapLocation for uuid:" << (ds ? ds->uuid : 0);
+
+
+ emit dataChanged(createIndex(row, 0), createIndex(row, 0));
}
diff --git a/qt-models/maplocationmodel.h b/qt-models/maplocationmodel.h
index 404c76d4a..b33d2d65d 100644
--- a/qt-models/maplocationmodel.h
+++ b/qt-models/maplocationmodel.h
@@ -2,6 +2,7 @@
#ifndef MAPLOCATIONMODEL_H
#define MAPLOCATIONMODEL_H
+#include "core/subsurface-qt/DiveListNotifier.h"
#include <QObject>
#include <QVector>
#include <QHash>
@@ -64,7 +65,6 @@ public:
void reload(QObject *map);
MapLocation *getMapLocation(const struct dive_site *ds);
const QVector<dive_site *> &selectedDs() const;
- void updateMapLocationCoordinates(const struct dive_site *ds, QGeoCoordinate coord);
Q_INVOKABLE void setSelected(struct dive_site *ds, bool fromClick = true);
// The dive site is passed as a QVariant, because a null-QVariant is not automatically
// transformed into a null pointer and warning messages are spewed onto the console.
@@ -73,6 +73,9 @@ public:
protected:
QHash<int, QByteArray> roleNames() const override;
+private slots:
+ void diveSiteChanged(struct dive_site *ds, int field);
+
private:
QVector<MapLocation *> m_mapLocations;
QHash<int, QByteArray> m_roles;