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 <neolit123@gmail.com>
This commit is contained in:
Lubomir I. Ivanov 2017-08-09 00:36:33 +03:00 committed by Dirk Hohndel
parent f21ae69f7b
commit 98e869d4f1

View file

@ -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);