From 746874a78e2abb53655e422abe66aa4f61fe47d1 Mon Sep 17 00:00:00 2001 From: "Lubomir I. Ivanov" Date: Thu, 9 Nov 2017 18:43:21 +0200 Subject: map-widget: allow real-time updates of edited markers This patch allows updating the location of map markers while editing a dive site and updating the text in the LocationInformationWidget in real-time. Currently it is only possible to see the marker changes by clicking 'Apply'. The modification required the following changes: - add the MapWidget::updateCurrentDiveSiteCoordinatesToMap() slot and call it each time the GPS text updates - separate the updateCurrentDiveSiteCoordinates(FromMap/ToMap) logic by having the FromMap/ToMap suffix to method names - make MapWidgetHelper::updateCurrentDiveSiteCoordinatesToMap() call a new MapLocationModel::updateMapLocationCoordinates() method, which updates selected location coordinates and the model - add MapLocation::setCoordinateNoEmit() that does not emit a signal when updating a coordinate Signed-off-by: Lubomir I. Ivanov --- map-widget/qml/MapWidget.qml | 2 +- map-widget/qmlmapwidgethelper.cpp | 10 +++++++++- map-widget/qmlmapwidgethelper.h | 3 ++- 3 files changed, 12 insertions(+), 3 deletions(-) (limited to 'map-widget') diff --git a/map-widget/qml/MapWidget.qml b/map-widget/qml/MapWidget.qml index 2a3283482..c7904fc5f 100644 --- a/map-widget/qml/MapWidget.qml +++ b/map-widget/qml/MapWidget.qml @@ -72,7 +72,7 @@ Item { onDoubleClicked: map.doubleClickHandler(mapItem.coordinate) onReleased: { if (mapHelper.editMode && mapHelper.model.selectedUuid === model.uuid) { - mapHelper.updateCurrentDiveSiteCoordinates(mapHelper.model.selectedUuid, mapItem.coordinate) + mapHelper.updateCurrentDiveSiteCoordinatesFromMap(mapHelper.model.selectedUuid, mapItem.coordinate) } } } diff --git a/map-widget/qmlmapwidgethelper.cpp b/map-widget/qmlmapwidgethelper.cpp index 1c0469c4a..16f57c317 100644 --- a/map-widget/qmlmapwidgethelper.cpp +++ b/map-widget/qmlmapwidgethelper.cpp @@ -210,7 +210,7 @@ void MapWidgetHelper::copyToClipboardCoordinates(QGeoCoordinate coord, bool form prefs.coordinates_traditional = savep; } -void MapWidgetHelper::updateCurrentDiveSiteCoordinates(quint32 uuid, QGeoCoordinate coord) +void MapWidgetHelper::updateCurrentDiveSiteCoordinatesFromMap(quint32 uuid, QGeoCoordinate coord) { MapLocation *loc = m_mapLocationModel->getMapLocationForUuid(uuid); if (loc) @@ -220,6 +220,14 @@ void MapWidgetHelper::updateCurrentDiveSiteCoordinates(quint32 uuid, QGeoCoordin emit coordinatesChanged(); } +void MapWidgetHelper::updateCurrentDiveSiteCoordinatesToMap() +{ + const qreal latitude = displayed_dive_site.latitude.udeg * 0.000001; + const qreal longitude = displayed_dive_site.longitude.udeg * 0.000001; + QGeoCoordinate coord(latitude, longitude); + m_mapLocationModel->updateMapLocationCoordinates(displayed_dive_site.uuid, coord); +} + bool MapWidgetHelper::editMode() { return m_editMode; diff --git a/map-widget/qmlmapwidgethelper.h b/map-widget/qmlmapwidgethelper.h index 36d25d178..22388e237 100644 --- a/map-widget/qmlmapwidgethelper.h +++ b/map-widget/qmlmapwidgethelper.h @@ -24,8 +24,9 @@ public: void reloadMapLocations(); Q_INVOKABLE void copyToClipboardCoordinates(QGeoCoordinate coord, bool formatTraditional); Q_INVOKABLE void calculateSmallCircleRadius(QGeoCoordinate coord); - Q_INVOKABLE void updateCurrentDiveSiteCoordinates(quint32 uuid, QGeoCoordinate coord); + Q_INVOKABLE void updateCurrentDiveSiteCoordinatesFromMap(quint32 uuid, QGeoCoordinate coord); Q_INVOKABLE void selectVisibleLocations(); + void updateCurrentDiveSiteCoordinatesToMap(); bool editMode(); void setEditMode(bool editMode); QString pluginObject(); -- cgit v1.2.3-70-g09d2