aboutsummaryrefslogtreecommitdiffstats
path: root/qt-models/divelocationmodel.cpp
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2019-03-12 22:35:43 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2019-04-12 18:19:07 +0300
commit8e1f736d2b608784e1ea942ec8579d2361691c43 (patch)
treec6c9c60d112e95158a69b692a1ca32b0923a39d3 /qt-models/divelocationmodel.cpp
parente99c4c90592c9dba17d5cbb9a99d0bf458fb53d2 (diff)
downloadsubsurface-8e1f736d2b608784e1ea942ec8579d2361691c43.tar.gz
Undo: make dive site removal undoable
Create a new undo-command for deleting dive sites. If there are dives associated with that site, the dives will be removed. The frontend is not yet updated in such a case, as that infrastructure is in a different PR. Connect the trashcan icon of the dive site table to the undo command. Currently, this code is in the dive site model, which makes little sense, but is how the TableView class works. We might want to change that when cylinder and weight editing are made undoable. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'qt-models/divelocationmodel.cpp')
-rw-r--r--qt-models/divelocationmodel.cpp25
1 files changed, 24 insertions, 1 deletions
diff --git a/qt-models/divelocationmodel.cpp b/qt-models/divelocationmodel.cpp
index 383de43ca..ebdffc185 100644
--- a/qt-models/divelocationmodel.cpp
+++ b/qt-models/divelocationmodel.cpp
@@ -5,8 +5,12 @@
#include "core/qthelper.h"
#include "core/divesite.h"
#include "core/metrics.h"
+#ifndef SUBSURFACE_MOBILE
#include "cleanertablemodel.h" // for trashIcon();
-#include <QDebug>
+#include "desktop-widgets/mainwindow.h" // to place message box
+#include "desktop-widgets/command.h"
+#include <QMessageBox>
+#endif
#include <QLineEdit>
#include <QIcon>
#include <core/gettextfromc.h>
@@ -219,6 +223,25 @@ QStringList DiveSiteSortedModel::allSiteNames() const
return locationNames;
}
+#ifndef SUBSURFACE_MOBILE
+// TODO: Remove from model. It doesn't make sense to call the model here, which calls the undo command,
+// which in turn calls the model.
+void DiveSiteSortedModel::remove(const QModelIndex &index)
+{
+ if (index.column() != LocationInformationModel::REMOVE)
+ return;
+ struct dive_site *ds = get_dive_site(mapToSource(index).row(), &dive_site_table);
+ if (!ds)
+ return;
+ if (ds->dives.nr > 0 &&
+ QMessageBox::warning(MainWindow::instance(), tr("Delete dive site?"),
+ tr("This dive site has %n dive(s). Do you really want to delete it?\n", "", ds->dives.nr),
+ QMessageBox::Yes|QMessageBox::No) == QMessageBox::No)
+ return;
+ Command::deleteDiveSites(QVector<dive_site *>{ds});
+}
+#endif
+
GeoReferencingOptionsModel *GeoReferencingOptionsModel::instance()
{
static GeoReferencingOptionsModel *self = new GeoReferencingOptionsModel();