summaryrefslogtreecommitdiffstats
path: root/desktop-widgets/undocommands.cpp
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2018-07-22 09:23:47 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2018-10-11 16:22:27 -0700
commitdd9af8e72e169256f2d3ea53cff9d5bbd8feb9fa (patch)
tree2265ef07aa8b4944bac689cf84e5454501e39230 /desktop-widgets/undocommands.cpp
parentba9c35215e88dea0505e0f82531941797fc1ce7d (diff)
downloadsubsurface-dd9af8e72e169256f2d3ea53cff9d5bbd8feb9fa.tar.gz
Undo: make editing of dive-time an undoable operation
The whole undo system assumes that the indexes in the dive table do not change under its feet. On desktop, there seems only one exception left: editing of the dive time. To circumvent this, hook editing of the dive-time to the already existing UndoShiftTime command. This introduces a temporary UI-inconsistency: this is the only edit that is reflected in the undo-list. This will be fixed in due course, when other edit actions are also made undoable. UndoShiftTime is changed to take pointers to dives (which should be stable by now) instead of uniq-ids. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'desktop-widgets/undocommands.cpp')
-rw-r--r--desktop-widgets/undocommands.cpp7
1 files changed, 3 insertions, 4 deletions
diff --git a/desktop-widgets/undocommands.cpp b/desktop-widgets/undocommands.cpp
index 9a56b4e9d..16f87fa23 100644
--- a/desktop-widgets/undocommands.cpp
+++ b/desktop-widgets/undocommands.cpp
@@ -147,7 +147,7 @@ void UndoDeleteDive::redo()
}
-UndoShiftTime::UndoShiftTime(QVector<int> changedDives, int amount)
+UndoShiftTime::UndoShiftTime(const QVector<dive *> &changedDives, int amount)
: diveList(changedDives), timeChanged(amount)
{
setText(tr("delete %n dive(s)", "", changedDives.size()));
@@ -155,10 +155,9 @@ UndoShiftTime::UndoShiftTime(QVector<int> changedDives, int amount)
void UndoShiftTime::undo()
{
- for (int i = 0; i < diveList.count(); i++) {
- dive *d = get_dive_by_uniq_id(diveList.at(i));
+ for (dive *d: diveList)
d->when -= timeChanged;
- }
+
// Changing times may have unsorted the dive table
sort_table(&dive_table);
mark_divelist_changed(true);