diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2019-08-30 12:38:25 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2019-09-06 11:48:47 -0700 |
commit | 28cb75b73d3d0fa4cd8dcf3aa5884e93cb13a5d2 (patch) | |
tree | 7ddc15816df96e7eb16f8ac6460ff6d298a6023b /map-widget/qmlmapwidgethelper.cpp | |
parent | f818ac3352b5a66d6fcc452ddc5ebb84a18bb29a (diff) | |
download | subsurface-28cb75b73d3d0fa4cd8dcf3aa5884e93cb13a5d2.tar.gz |
Map: explicitly reload selected map on click
When clicking on a flag
1) The QML would call MapLocationModel::setSelected() with
fromClick = true
2) MapLocationModel::setSelected() would emit a signal
selectedLocationChanged()
3) MapWidgetHelper would catch that signal and do the actual
processing.
Other functions would call MapLocationModel::setSelected() with
fromClick = false, which would not emit the selectedLocationChanged()
signal.
Detangle this a bit by calling the selectedLocationChanged() function
directly from QML and remove the fromClick parameter.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'map-widget/qmlmapwidgethelper.cpp')
-rw-r--r-- | map-widget/qmlmapwidgethelper.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/map-widget/qmlmapwidgethelper.cpp b/map-widget/qmlmapwidgethelper.cpp index b49ec248d..a40fa1d9f 100644 --- a/map-widget/qmlmapwidgethelper.cpp +++ b/map-widget/qmlmapwidgethelper.cpp @@ -21,8 +21,6 @@ MapWidgetHelper::MapWidgetHelper(QObject *parent) : QObject(parent) m_smallCircleRadius = SMALL_CIRCLE_RADIUS_PX; m_map = nullptr; m_editMode = false; - connect(m_mapLocationModel, SIGNAL(selectedLocationChanged(MapLocation *)), - this, SLOT(selectedLocationChanged(MapLocation *))); connect(&diveListNotifier, &DiveListNotifier::diveSiteChanged, this, &MapWidgetHelper::diveSiteChanged); } @@ -37,11 +35,11 @@ void MapWidgetHelper::centerOnDiveSite(struct dive_site *ds) { if (!dive_site_has_gps_location(ds)) { // dive site with no GPS - m_mapLocationModel->setSelected(ds, false); + m_mapLocationModel->setSelected(ds); QMetaObject::invokeMethod(m_map, "deselectMapLocation"); } else { // dive site with GPS - m_mapLocationModel->setSelected(ds, false); + m_mapLocationModel->setSelected(ds); QGeoCoordinate dsCoord (ds->location.lat.udeg * 0.000001, ds->location.lon.udeg * 0.000001); QMetaObject::invokeMethod(m_map, "centerOnCoordinate", Q_ARG(QVariant, QVariant::fromValue(dsCoord))); } @@ -114,12 +112,19 @@ void MapWidgetHelper::reloadMapLocations() m_mapLocationModel->reload(m_map); } -void MapWidgetHelper::selectedLocationChanged(MapLocation *location) +void MapWidgetHelper::selectedLocationChanged(struct dive_site *ds_in) { int idx; struct dive *dive; QList<int> selectedDiveIds; + + if (!ds_in) + return; + MapLocation *location = m_mapLocationModel->getMapLocation(ds_in); + if (!location) + return; QGeoCoordinate locationCoord = location->coordinate(); + for_each_dive (idx, dive) { struct dive_site *ds = get_dive_site_for_dive(dive); if (!dive_site_has_gps_location(ds)) |