From 98e869d4f153a30f98d481125050a1b4ba39b9e4 Mon Sep 17 00:00:00 2001 From: "Lubomir I. Ivanov" Date: Wed, 9 Aug 2017 00:36:33 +0300 Subject: [PATCH] mapwidgethelper: fix wrong logic in selectVisibleLocations() Looking for already existing locations with m_mapLocationModel->getMapLocationForUuid() will not cover dive sites which are too close to each other and are skipped when creating MapLocations. See reloadMapLocations() and the usage of MIN_DISTANCE_BETWEEN_DIVE_SITES_M. Constructing a new QGeoCoordinate for the already retrieved dive site (ds) coordinates ensures that we are traversing *all* dive sites at the backend and not only those visible on the map. Fixes the issue where not all dives in the DiveList are selected, even if a dive clearly happened on a location currently visible in the map viewport (map -> context menu -> select visible dive locations). Signed-off-by: Lubomir I. Ivanov --- mobile-widgets/qmlmapwidgethelper.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/mobile-widgets/qmlmapwidgethelper.cpp b/mobile-widgets/qmlmapwidgethelper.cpp index 1b9c9a909..9cc452642 100644 --- a/mobile-widgets/qmlmapwidgethelper.cpp +++ b/mobile-widgets/qmlmapwidgethelper.cpp @@ -154,18 +154,18 @@ void MapWidgetHelper::selectVisibleLocations() struct dive_site *ds = get_dive_site_for_dive(dive); if (!dive_site_has_gps_location(ds)) continue; - MapLocation *loc = m_mapLocationModel->getMapLocationForUuid(ds->uuid); - if (loc) { - QPointF point; - QMetaObject::invokeMethod(m_map, "fromCoordinate", Q_RETURN_ARG(QPointF, point), - Q_ARG(QGeoCoordinate, loc->coordinate())); - if (!qIsNaN(point.x())) { - if (!selectedFirst) { - m_mapLocationModel->setSelectedUuid(ds->uuid, false); - selectedFirst = true; - } - m_selectedDiveIds.append(idx); + const qreal latitude = ds->latitude.udeg * 0.000001; + const qreal longitude = ds->longitude.udeg * 0.000001; + QGeoCoordinate dsCoord(latitude, longitude); + QPointF point; + QMetaObject::invokeMethod(m_map, "fromCoordinate", Q_RETURN_ARG(QPointF, point), + Q_ARG(QGeoCoordinate, dsCoord)); + if (!qIsNaN(point.x())) { + if (!selectedFirst) { + m_mapLocationModel->setSelectedUuid(ds->uuid, false); + selectedFirst = true; } + m_selectedDiveIds.append(idx); } } emit selectedDivesChanged(m_selectedDiveIds);