diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2019-05-19 14:27:10 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2019-05-20 21:23:16 -0700 |
commit | 0bc96905bf92de5e7bac88efde181d93d95998f1 (patch) | |
tree | dbfda7a6c615d0b8452bb6ae87e3d98c618df40f /desktop-widgets/command_divelist.h | |
parent | eba6e76b963115a77b5f8607bc6c3ea1040a466f (diff) | |
download | subsurface-0bc96905bf92de5e7bac88efde181d93d95998f1.tar.gz |
Undo: make "delete dive computer" undoable
Simply reuse the code for "move dive computer" by creating
a DiveComputerBase base class.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'desktop-widgets/command_divelist.h')
-rw-r--r-- | desktop-widgets/command_divelist.h | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/desktop-widgets/command_divelist.h b/desktop-widgets/command_divelist.h index d46697454..7de168e9a 100644 --- a/desktop-widgets/command_divelist.h +++ b/desktop-widgets/command_divelist.h @@ -236,23 +236,36 @@ public: SplitDiveComputer(dive *d, int dc_num); }; -// When moving the dive computer to the front, we go the ineffective, -// but easy way: We keep two full copies of the dive (before and after). +// When manipulating dive computers (moving, deleting) we go the ineffective, +// but simple and robust way: We keep two full copies of the dive (before and after). // Removing and readding assures that the dive stays at the correct // position in the list (the dive computer list is used for sorting dives). -class MoveDiveComputerToFront : public DiveListBase { -public: - MoveDiveComputerToFront(dive *d, int dc_num); +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); private: void undoit() override; void redoit() override; bool workToBeDone() override; +protected: // For redo and undo DivesAndTripsToAdd diveToAdd; DivesAndSitesToRemove diveToRemove; }; +class MoveDiveComputerToFront : public DiveComputerBase { +public: + MoveDiveComputerToFront(dive *d, int dc_num); +}; + +class DeleteDiveComputer : public DiveComputerBase { +public: + DeleteDiveComputer(dive *d, int dc_num); +}; + class MergeDives : public DiveListBase { public: MergeDives(const QVector<dive *> &dives); |