diff options
Diffstat (limited to 'qt-models')
-rw-r--r-- | qt-models/maplocationmodel.cpp | 21 | ||||
-rw-r--r-- | qt-models/maplocationmodel.h | 3 |
2 files changed, 16 insertions, 8 deletions
diff --git a/qt-models/maplocationmodel.cpp b/qt-models/maplocationmodel.cpp index 4cad06801..295f514eb 100644 --- a/qt-models/maplocationmodel.cpp +++ b/qt-models/maplocationmodel.cpp @@ -129,7 +129,7 @@ static bool hasSelectedDive(const dive_site *ds) [] (const dive *d) { return d->selected; }); } -void MapLocationModel::reload() +void MapLocationModel::reload(QObject *map) { beginResetModel(); @@ -139,7 +139,6 @@ void MapLocationModel::reload() QMap<QString, MapLocation *> locationNameMap; MapLocation *location; - qreal latitude, longitude; #ifdef SUBSURFACE_MOBILE bool diveSiteMode = false; @@ -154,17 +153,25 @@ void MapLocationModel::reload() #endif for (int i = 0; i < dive_site_table.nr; ++i) { struct dive_site *ds = dive_site_table.dive_sites[i]; + QGeoCoordinate dsCoord; // Don't show dive sites of hidden dives, unless we're in dive site edit mode. if (!diveSiteMode && !hasVisibleDive(ds)) continue; - if (!dive_site_has_gps_location(ds)) - continue; + if (!dive_site_has_gps_location(ds)) { + // Dive sites that do not have a gps location are not shown in normal mode. + // In dive-edit mode, selected sites are placed at the center of the map, + // so that the user can drag them somewhere without having to enter coordinates. + if (!diveSiteMode || !m_selectedDs.contains(ds) || !map) + continue; + dsCoord = map->property("center").value<QGeoCoordinate>(); + } else { + qreal latitude = ds->location.lat.udeg * 0.000001; + qreal longitude = ds->location.lon.udeg * 0.000001; + dsCoord = QGeoCoordinate(latitude, longitude); + } if (!diveSiteMode && hasSelectedDive(ds) && !m_selectedDs.contains(ds)) m_selectedDs.append(ds); - latitude = ds->location.lat.udeg * 0.000001; - longitude = ds->location.lon.udeg * 0.000001; - QGeoCoordinate dsCoord(latitude, longitude); QString name(ds->name); if (!diveSiteMode) { // don't add dive locations with the same name, unless they are diff --git a/qt-models/maplocationmodel.h b/qt-models/maplocationmodel.h index b1b13896a..404c76d4a 100644 --- a/qt-models/maplocationmodel.h +++ b/qt-models/maplocationmodel.h @@ -60,7 +60,8 @@ public: int rowCount(const QModelIndex &parent) const override; int count(); void add(MapLocation *); - void reload(); + // If map is not null, it will be used to place new dive sites without GPS location at the center of the map + void reload(QObject *map); MapLocation *getMapLocation(const struct dive_site *ds); const QVector<dive_site *> &selectedDs() const; void updateMapLocationCoordinates(const struct dive_site *ds, QGeoCoordinate coord); |