diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2019-05-19 18:43:21 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2019-05-20 21:23:16 -0700 |
commit | a124198275e2b6cbb11795a8c328235d8154d148 (patch) | |
tree | 6e64a5a69c90adf9523d28898ee95333ca7ab695 /desktop-widgets | |
parent | 4fe9b39cdbb5839830281820621059cefc26a03a (diff) | |
download | subsurface-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')
-rw-r--r-- | desktop-widgets/command_divelist.cpp | 10 | ||||
-rw-r--r-- | desktop-widgets/command_divelist.h | 3 |
2 files changed, 8 insertions, 5 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")); } diff --git a/desktop-widgets/command_divelist.h b/desktop-widgets/command_divelist.h index 7de168e9a..152c7365b 100644 --- a/desktop-widgets/command_divelist.h +++ b/desktop-widgets/command_divelist.h @@ -244,7 +244,7 @@ class DiveComputerBase : public DiveListBase { protected: // old_dive must be a dive known to the core. // new_dive must be new dive whose ownership is taken. - DiveComputerBase(dive *old_dive, dive *new_dive); + DiveComputerBase(dive *old_dive, dive *new_dive, int dc_nr_after); private: void undoit() override; void redoit() override; @@ -254,6 +254,7 @@ protected: // For redo and undo DivesAndTripsToAdd diveToAdd; DivesAndSitesToRemove diveToRemove; + int dc_nr_before, dc_nr_after; }; class MoveDiveComputerToFront : public DiveComputerBase { |