mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-27 20:58:47 +00:00
Map: make edit mode depend on dive-site-filtering
Since the dive-site-filter is active either on the dive-site-edit page or the dive-site-list page, use that as the flag for dive-site-edit mode. Moreover, when the filter is reset, the MapWidgetHelper::reloadMapLocations() function is called, so we can use that place to enter/exit edit mode. This makes it easier to keep everything consistent. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
b6d830f004
commit
d29f82c52d
7 changed files with 29 additions and 34 deletions
|
@ -182,7 +182,6 @@ void LocationInformationWidget::acceptChanges()
|
|||
MainWindow::instance()->diveList->setEnabled(true);
|
||||
MainWindow::instance()->setEnabledToolbar(true);
|
||||
MainWindow::instance()->setApplicationState("Default");
|
||||
MapWidget::instance()->endGetDiveCoordinates();
|
||||
MapWidget::instance()->repopulateLabels();
|
||||
MultiFilterSortModel::instance()->stopFilterDiveSites();
|
||||
}
|
||||
|
@ -200,7 +199,6 @@ void LocationInformationWidget::initFields(dive_site *ds)
|
|||
filter_model.set(0, location_t { degrees_t{ 0 }, degrees_t{ 0 } });
|
||||
clearLabels();
|
||||
}
|
||||
MapWidget::instance()->prepareForGetDiveCoordinates(ds);
|
||||
}
|
||||
|
||||
void LocationInformationWidget::on_diveSiteCoordinates_editingFinished()
|
||||
|
|
|
@ -84,24 +84,6 @@ void MapWidget::reload()
|
|||
}
|
||||
}
|
||||
|
||||
void MapWidget::endGetDiveCoordinates()
|
||||
{
|
||||
CHECK_IS_READY_RETURN_VOID();
|
||||
|
||||
skipReload = false;
|
||||
m_mapHelper->exitEditMode();
|
||||
}
|
||||
|
||||
void MapWidget::prepareForGetDiveCoordinates(struct dive_site *ds)
|
||||
{
|
||||
CHECK_IS_READY_RETURN_VOID();
|
||||
m_mapHelper->enterEditMode(ds);
|
||||
|
||||
// Ignore any reload signals during edit mode to avoid showing all flags when in edit mode.
|
||||
// This can happen for example when the filter is reset.
|
||||
skipReload = true;
|
||||
}
|
||||
|
||||
void MapWidget::selectedDivesChanged(const QList<int> &list)
|
||||
{
|
||||
CHECK_IS_READY_RETURN_VOID();
|
||||
|
|
|
@ -27,9 +27,7 @@ public:
|
|||
public slots:
|
||||
void centerOnDiveSite(struct dive_site *);
|
||||
void centerOnIndex(const QModelIndex& idx);
|
||||
void endGetDiveCoordinates();
|
||||
void repopulateLabels();
|
||||
void prepareForGetDiveCoordinates(struct dive_site *ds);
|
||||
void selectedDivesChanged(const QList<int> &);
|
||||
void coordinatesChanged(struct dive_site *ds, const location_t &);
|
||||
void doneLoading(QQuickWidget::Status status);
|
||||
|
|
|
@ -8,6 +8,9 @@
|
|||
#include "core/divesite.h"
|
||||
#include "core/qthelper.h"
|
||||
#include "qt-models/maplocationmodel.h"
|
||||
#ifndef SUBSURFACE_MOBILE
|
||||
#include "qt-models/filtermodels.h"
|
||||
#endif
|
||||
|
||||
#define SMALL_CIRCLE_RADIUS_PX 26.0
|
||||
|
||||
|
@ -103,6 +106,14 @@ void MapWidgetHelper::centerOnSelectedDiveSite()
|
|||
|
||||
void MapWidgetHelper::reloadMapLocations()
|
||||
{
|
||||
#ifndef SUBSURFACE_MOBILE
|
||||
// The filter being set to dive site is the signal that we are in dive site edit mode.
|
||||
// This is the case when either the dive site edit tab or the dive site list tab are active.
|
||||
if (MultiFilterSortModel::instance()->diveSiteMode())
|
||||
enterEditMode();
|
||||
else
|
||||
exitEditMode();
|
||||
#endif
|
||||
m_mapLocationModel->reload();
|
||||
}
|
||||
|
||||
|
@ -230,26 +241,26 @@ void MapWidgetHelper::updateDiveSiteCoordinates(struct dive_site *ds, const loca
|
|||
|
||||
void MapWidgetHelper::exitEditMode()
|
||||
{
|
||||
if (!m_editMode)
|
||||
return;
|
||||
m_editMode = false;
|
||||
emit editModeChanged();
|
||||
}
|
||||
|
||||
void MapWidgetHelper::enterEditMode(struct dive_site *ds)
|
||||
void MapWidgetHelper::enterEditMode()
|
||||
{
|
||||
// We don't support editing of a dive site that doesn't exist
|
||||
if (!ds)
|
||||
if (m_editMode)
|
||||
return;
|
||||
|
||||
m_editMode = true;
|
||||
// if divesite doesn't exist in the model, add a new MapLocation.
|
||||
MapLocation *exists = m_mapLocationModel->getMapLocation(ds);
|
||||
if (!exists) {
|
||||
// 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(&ds->location) ? getCoordinates(ds)
|
||||
: m_map->property("center").value<QGeoCoordinate>();
|
||||
m_mapLocationModel->add(new MapLocation(ds, coord, QString(ds->name)));
|
||||
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)));
|
||||
}
|
||||
centerOnDiveSite(ds);
|
||||
emit editModeChanged();
|
||||
}
|
||||
|
||||
|
|
|
@ -35,11 +35,11 @@ public:
|
|||
Q_INVOKABLE void updateCurrentDiveSiteCoordinatesFromMap(struct dive_site *ds, QGeoCoordinate coord);
|
||||
Q_INVOKABLE void selectVisibleLocations();
|
||||
void updateDiveSiteCoordinates(struct dive_site *ds, const location_t &);
|
||||
void enterEditMode(struct dive_site *ds);
|
||||
void exitEditMode();
|
||||
QString pluginObject();
|
||||
|
||||
private:
|
||||
void enterEditMode();
|
||||
void exitEditMode();
|
||||
QObject *m_map;
|
||||
MapLocationModel *m_mapLocationModel;
|
||||
qreal m_smallCircleRadius;
|
||||
|
|
|
@ -110,6 +110,11 @@ void MapLocationModel::add(MapLocation *location)
|
|||
endInsertRows();
|
||||
}
|
||||
|
||||
const QVector<dive_site *> &MapLocationModel::selectedDs() const
|
||||
{
|
||||
return m_selectedDs;
|
||||
}
|
||||
|
||||
void MapLocationModel::reload()
|
||||
{
|
||||
int idx;
|
||||
|
|
|
@ -62,6 +62,7 @@ public:
|
|||
void add(MapLocation *);
|
||||
void reload();
|
||||
MapLocation *getMapLocation(const struct dive_site *ds);
|
||||
const QVector<dive_site *> &selectedDs() const;
|
||||
void updateMapLocationCoordinates(const struct dive_site *ds, QGeoCoordinate coord);
|
||||
Q_INVOKABLE void setSelected(struct dive_site *ds, bool fromClick = true);
|
||||
// The dive site is passed as a QVariant, because a null-QVariant is not automatically
|
||||
|
|
Loading…
Reference in a new issue