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 <neolit123@gmail.com>
This commit is contained in:
Lubomir I. Ivanov 2017-11-09 18:43:21 +02:00 committed by Dirk Hohndel
parent 89ccdc3178
commit 746874a78e
8 changed files with 45 additions and 3 deletions

View file

@ -1,4 +1,5 @@
// SPDX-License-Identifier: GPL-2.0
#include <QDebug>
#include "maplocationmodel.h"
const char *MapLocation::PROPERTY_NAME_COORDINATE = "coordinate";
@ -39,6 +40,11 @@ void MapLocation::setCoordinate(QGeoCoordinate coord)
emit coordinateChanged();
}
void MapLocation::setCoordinateNoEmit(QGeoCoordinate coord)
{
m_coordinate = coord;
}
quint32 MapLocation::uuid()
{
return m_uuid;
@ -136,3 +142,19 @@ MapLocation *MapLocationModel::getMapLocationForUuid(quint32 uuid)
}
return NULL;
}
void MapLocationModel::updateMapLocationCoordinates(quint32 uuid, QGeoCoordinate coord)
{
MapLocation *location;
int row = 0;
foreach(location, m_mapLocations) {
if (uuid == location->uuid()) {
location->setCoordinateNoEmit(coord);
emit dataChanged(createIndex(0, row), createIndex(0, row));
return;
}
row++;
}
// should not happen, as this should be called only when editing an existing marker
qWarning() << "MapLocationModel::updateMapLocationCoordinates(): cannot find MapLocation for uuid:" << uuid;
}