summaryrefslogtreecommitdiffstats
path: root/qt-models/divetripmodel.cpp
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2018-08-25 16:42:35 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2018-10-11 16:22:27 -0700
commit0cca36377b01fc10063ecc67f5471ce80d133991 (patch)
treeea578d41d66234cf848b0873f46f2140e1675107 /qt-models/divetripmodel.cpp
parent3c6cdfd8c02e215f98986cbb74b33f58e47fe632 (diff)
downloadsubsurface-0cca36377b01fc10063ecc67f5471ce80d133991.tar.gz
Dive list: retain selection on moval of dives
The current code cheats when it comes to move dives inside a trip or move dives between trips: Instead of using the *MoveRows() functionality, the dives are removed from and re-added to the respective trips. This loses the selection. Therefore, remember which of the moved dives are selected and select them manually after they are re-added. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'qt-models/divetripmodel.cpp')
-rw-r--r--qt-models/divetripmodel.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/qt-models/divetripmodel.cpp b/qt-models/divetripmodel.cpp
index 761a2ffa6..b6c69af0f 100644
--- a/qt-models/divetripmodel.cpp
+++ b/qt-models/divetripmodel.cpp
@@ -1075,6 +1075,16 @@ void DiveTripModel::divesChanged(dive_trip *trip, const QVector<dive *> &divesIn
}
}
+QVector<dive *> filterSelectedDives(const QVector<dive *> &dives)
+{
+ QVector<dive *> res;
+ res.reserve(dives.size());
+ for (dive *d: dives)
+ if (d->selected)
+ res.append(d);
+ return res;
+}
+
void DiveTripModel::divesMovedBetweenTrips(dive_trip *from, dive_trip *to, bool deleteFrom, bool createTo, const QVector<dive *> &dives)
{
// Move dives between trips. This is an "interesting" problem, as we might
@@ -1090,8 +1100,12 @@ void DiveTripModel::divesMovedBetweenTrips(dive_trip *from, dive_trip *to, bool
return;
// Cheating!
+ // Unfortunately, removing the dives means that their selection is lost.
+ // Thus, remember the selection and re-add it later.
+ QVector<dive *> selectedDives = filterSelectedDives(dives);
divesAdded(to, createTo, dives);
divesDeleted(from, deleteFrom, dives);
+ divesSelected(to, selectedDives);
}
void DiveTripModel::divesTimeChanged(dive_trip *trip, timestamp_t delta, const QVector<dive *> &dives)
@@ -1104,8 +1118,12 @@ void DiveTripModel::divesTimeChanged(dive_trip *trip, timestamp_t delta, const Q
// moved by the same delta.
// Cheating!
+ // Unfortunately, removing the dives means that their selection is lost.
+ // Thus, remember the selection and re-add it later.
+ QVector<dive *> selectedDives = filterSelectedDives(dives);
divesDeleted(trip, false, dives);
divesAdded(trip, false, dives);
+ divesSelected(trip, selectedDives);
}
void DiveTripModel::divesSelected(dive_trip *trip, const QVector<dive *> &dives)