mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-30 22:20:21 +00:00
Map: in edit mode place no-gps dive sites at center of map
Move the code to add the first selected dive site from MapWidgetHelper::enterEditMode() to MapLocationModel::reload(). Thus, the list of sites is built only at one place. For this it is necessary to pass a pointer to the map, so that new dive sites can be added at the center of the map. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
0c38754916
commit
0da86dfd86
3 changed files with 17 additions and 17 deletions
|
@ -100,7 +100,7 @@ void MapWidgetHelper::reloadMapLocations()
|
||||||
else
|
else
|
||||||
exitEditMode();
|
exitEditMode();
|
||||||
#endif
|
#endif
|
||||||
m_mapLocationModel->reload();
|
m_mapLocationModel->reload(m_map);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MapWidgetHelper::selectedLocationChanged(MapLocation *location)
|
void MapWidgetHelper::selectedLocationChanged(MapLocation *location)
|
||||||
|
@ -239,14 +239,6 @@ void MapWidgetHelper::enterEditMode()
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_editMode = true;
|
m_editMode = true;
|
||||||
// if divesite of the first selected dive doesn't exist in the model, add a new MapLocation.
|
|
||||||
const QVector<dive_site *> selDs = m_mapLocationModel->selectedDs();
|
|
||||||
if (!selDs.isEmpty() && ! m_mapLocationModel->getMapLocation(selDs[0])) {
|
|
||||||
// If the dive site doesn't have a GPS location, use the centre of the map
|
|
||||||
QGeoCoordinate coord = has_location(&selDs[0]->location) ? getCoordinates(selDs[0])
|
|
||||||
: m_map->property("center").value<QGeoCoordinate>();
|
|
||||||
m_mapLocationModel->add(new MapLocation(selDs[0], coord, QString(selDs[0]->name)));
|
|
||||||
}
|
|
||||||
emit editModeChanged();
|
emit editModeChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -129,7 +129,7 @@ static bool hasSelectedDive(const dive_site *ds)
|
||||||
[] (const dive *d) { return d->selected; });
|
[] (const dive *d) { return d->selected; });
|
||||||
}
|
}
|
||||||
|
|
||||||
void MapLocationModel::reload()
|
void MapLocationModel::reload(QObject *map)
|
||||||
{
|
{
|
||||||
beginResetModel();
|
beginResetModel();
|
||||||
|
|
||||||
|
@ -139,7 +139,6 @@ void MapLocationModel::reload()
|
||||||
|
|
||||||
QMap<QString, MapLocation *> locationNameMap;
|
QMap<QString, MapLocation *> locationNameMap;
|
||||||
MapLocation *location;
|
MapLocation *location;
|
||||||
qreal latitude, longitude;
|
|
||||||
|
|
||||||
#ifdef SUBSURFACE_MOBILE
|
#ifdef SUBSURFACE_MOBILE
|
||||||
bool diveSiteMode = false;
|
bool diveSiteMode = false;
|
||||||
|
@ -154,17 +153,25 @@ void MapLocationModel::reload()
|
||||||
#endif
|
#endif
|
||||||
for (int i = 0; i < dive_site_table.nr; ++i) {
|
for (int i = 0; i < dive_site_table.nr; ++i) {
|
||||||
struct dive_site *ds = dive_site_table.dive_sites[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.
|
// Don't show dive sites of hidden dives, unless we're in dive site edit mode.
|
||||||
if (!diveSiteMode && !hasVisibleDive(ds))
|
if (!diveSiteMode && !hasVisibleDive(ds))
|
||||||
continue;
|
continue;
|
||||||
if (!dive_site_has_gps_location(ds))
|
if (!dive_site_has_gps_location(ds)) {
|
||||||
continue;
|
// 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))
|
if (!diveSiteMode && hasSelectedDive(ds) && !m_selectedDs.contains(ds))
|
||||||
m_selectedDs.append(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);
|
QString name(ds->name);
|
||||||
if (!diveSiteMode) {
|
if (!diveSiteMode) {
|
||||||
// don't add dive locations with the same name, unless they are
|
// don't add dive locations with the same name, unless they are
|
||||||
|
|
|
@ -60,7 +60,8 @@ public:
|
||||||
int rowCount(const QModelIndex &parent) const override;
|
int rowCount(const QModelIndex &parent) const override;
|
||||||
int count();
|
int count();
|
||||||
void add(MapLocation *);
|
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);
|
MapLocation *getMapLocation(const struct dive_site *ds);
|
||||||
const QVector<dive_site *> &selectedDs() const;
|
const QVector<dive_site *> &selectedDs() const;
|
||||||
void updateMapLocationCoordinates(const struct dive_site *ds, QGeoCoordinate coord);
|
void updateMapLocationCoordinates(const struct dive_site *ds, QGeoCoordinate coord);
|
||||||
|
|
Loading…
Reference in a new issue