summaryrefslogtreecommitdiffstats
path: root/qt-ui/models.cpp
diff options
context:
space:
mode:
authorGravatar Tomaz Canabrava <tcanabrava@kde.org>2013-11-15 21:08:25 -0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-11-15 15:13:53 -0800
commit8827ea6f5d029e6b433ed5622ac7258db512f0ae (patch)
treefde14be0625b4826f5dcdf70c126ca57263a4ee1 /qt-ui/models.cpp
parent06bf0e1849559e0109c419beae627b44f477dc88 (diff)
downloadsubsurface-8827ea6f5d029e6b433ed5622ac7258db512f0ae.tar.gz
This moves the removal code to the model.
It's very important when programming via Model/View, in gtk or qt, to not mess with the model data outside of the model. We were deleting stuff that the model controlled outside of the model, so it thought that there was still data there. This fixes the deletion part, but there are also lots of other parts that I'll tackle in the next commits. Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-ui/models.cpp')
-rw-r--r--qt-ui/models.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp
index 14c3cb5ea..dd69e45c2 100644
--- a/qt-ui/models.cpp
+++ b/qt-ui/models.cpp
@@ -1198,6 +1198,23 @@ QVariant DiveComputerModel::data(const QModelIndex& index, int role) const
return ret;
}
+void DiveTripModel::deleteSelectedDives()
+{
+ // after a dive is deleted the ones following it move forward in the dive_table
+ // so instead of using the for_each_dive macro I'm using an explicit for loop
+ // to make this easier to understand
+ beginRemoveRows(index(0,0), 0, rowCount()-1);
+ for (int i = 0; i < dive_table.nr; i++) {
+ struct dive *d = get_dive(i);
+ if (!d->selected)
+ continue;
+ delete_single_dive(i);
+ i--; // so the next dive isn't skipped... it's now #i
+ }
+ endRemoveRows();
+ setupModelData();
+}
+
int DiveComputerModel::rowCount(const QModelIndex& parent) const
{
return numRows;