summaryrefslogtreecommitdiffstats
path: root/desktop-widgets/command_divelist.cpp
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2019-05-19 18:43:21 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2019-05-20 21:23:16 -0700
commita124198275e2b6cbb11795a8c328235d8154d148 (patch)
tree6e64a5a69c90adf9523d28898ee95333ca7ab695 /desktop-widgets/command_divelist.cpp
parent4fe9b39cdbb5839830281820621059cefc26a03a (diff)
downloadsubsurface-a124198275e2b6cbb11795a8c328235d8154d148.tar.gz
Undo: be smarter about dive computer shown after deletion
When deleting a dive computer, don't just show the first dive computer, but the next one in the list (if it exists). Moreover, on undo jump to the previously shown dive computer. Do this by keeping track of the before and after dive computer number in the undo command. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'desktop-widgets/command_divelist.cpp')
-rw-r--r--desktop-widgets/command_divelist.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/desktop-widgets/command_divelist.cpp b/desktop-widgets/command_divelist.cpp
index 4bbe1057d..d2cd0a413 100644
--- a/desktop-widgets/command_divelist.cpp
+++ b/desktop-widgets/command_divelist.cpp
@@ -802,7 +802,8 @@ SplitDiveComputer::SplitDiveComputer(dive *d, int dc_num) : SplitDivesBase(d, sp
setText(tr("split dive computer"));
}
-DiveComputerBase::DiveComputerBase(dive *old_dive, dive *new_dive)
+DiveComputerBase::DiveComputerBase(dive *old_dive, dive *new_dive, int dc_nr_after_in) : dc_nr_before(dc_number),
+ dc_nr_after(dc_nr_after_in)
{
if (!new_dive)
return;
@@ -840,7 +841,8 @@ void DiveComputerBase::redoit()
restoreSelection(diveToRemove.dives, diveToRemove.dives[0]);
// Update the profile to show the first dive computer
- dc_number = 0;
+ dc_number = dc_nr_after;
+ std::swap(dc_nr_before, dc_nr_after);
MainWindow::instance()->graphics->replot(current_dive);
}
@@ -851,13 +853,13 @@ void DiveComputerBase::undoit()
}
MoveDiveComputerToFront::MoveDiveComputerToFront(dive *d, int dc_num)
- : DiveComputerBase(d, make_first_dc(d, dc_num))
+ : DiveComputerBase(d, make_first_dc(d, dc_num), 0)
{
setText(tr("move dive computer to front"));
}
DeleteDiveComputer::DeleteDiveComputer(dive *d, int dc_num)
- : DiveComputerBase(d, clone_delete_divecomputer(d, dc_num))
+ : DiveComputerBase(d, clone_delete_divecomputer(d, dc_num), std::min(count_divecomputers(d) - 1, dc_num))
{
setText(tr("delete dive computer"));
}