summaryrefslogtreecommitdiffstats
path: root/desktop-widgets/command_divelist.h
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2019-05-19 14:27:10 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2019-05-20 21:23:16 -0700
commit0bc96905bf92de5e7bac88efde181d93d95998f1 (patch)
treedbfda7a6c615d0b8452bb6ae87e3d98c618df40f /desktop-widgets/command_divelist.h
parenteba6e76b963115a77b5f8607bc6c3ea1040a466f (diff)
downloadsubsurface-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.h23
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);