summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2019-11-08 22:47:38 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2019-12-05 10:14:25 -0800
commit72c6b838662f1fb79a806ac2264c7215efa0aa67 (patch)
tree8b10fe7ad548a62ed428347c8a35882ee291b41a /core
parent029c9ccf020fdb73c148da489e0e7b1acd3ca149 (diff)
downloadsubsurface-72c6b838662f1fb79a806ac2264c7215efa0aa67.tar.gz
Undo: make weight editing undoable
Implement the EditWeight undo command. Since there is common code (storage of the old weight), this creates a common base class for RemoveWeight and EditWeight. The model calls directly into the undo command, which is somewhat unfortunate as it feels like a layering violation. It's the easy thing to do for now. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'core')
-rw-r--r--core/equipment.c9
-rw-r--r--core/equipment.h1
-rw-r--r--core/subsurface-qt/DiveListNotifier.h1
3 files changed, 11 insertions, 0 deletions
diff --git a/core/equipment.c b/core/equipment.c
index e7ac327fd..07e468c1c 100644
--- a/core/equipment.c
+++ b/core/equipment.c
@@ -288,6 +288,15 @@ void remove_weightsystem(struct dive *dive, int idx)
remove_from_weightsystem_table(&dive->weightsystems, idx);
}
+// ws is cloned.
+void set_weightsystem(struct dive *dive, int idx, weightsystem_t ws)
+{
+ if (idx < 0 || idx >= dive->weightsystems.nr)
+ return;
+ free_weightsystem(dive->weightsystems.weightsystems[idx]);
+ dive->weightsystems.weightsystems[idx] = clone_weightsystem(ws);
+}
+
/* when planning a dive we need to make sure that all cylinders have a sane depth assigned
* and if we are tracking gas consumption the pressures need to be reset to start = end = workingpressure */
void reset_cylinders(struct dive *dive, bool track_gas)
diff --git a/core/equipment.h b/core/equipment.h
index 77fd9c430..11d6f37c1 100644
--- a/core/equipment.h
+++ b/core/equipment.h
@@ -83,6 +83,7 @@ extern bool same_weightsystem(weightsystem_t w1, weightsystem_t w2);
extern bool same_cylinder(cylinder_t cyl1, cylinder_t cyl2);
extern void remove_cylinder(struct dive *dive, int idx);
extern void remove_weightsystem(struct dive *dive, int idx);
+extern void set_weightsystem(struct dive *dive, int idx, weightsystem_t ws);
extern void reset_cylinders(struct dive *dive, bool track_gas);
extern int gas_volume(const cylinder_t *cyl, pressure_t p); /* Volume in mliter of a cylinder at pressure 'p' */
extern int find_best_gasmix_match(struct gasmix mix, const struct cylinder_table *cylinders);
diff --git a/core/subsurface-qt/DiveListNotifier.h b/core/subsurface-qt/DiveListNotifier.h
index 8c681948e..fc7115a99 100644
--- a/core/subsurface-qt/DiveListNotifier.h
+++ b/core/subsurface-qt/DiveListNotifier.h
@@ -88,6 +88,7 @@ signals:
void weightsystemsReset(const QVector<dive *> &dives);
void weightAdded(dive *d, int pos);
void weightRemoved(dive *d, int pos);
+ void weightEdited(dive *d, int pos);
// Trip edited signal
void tripChanged(dive_trip *trip, TripField field);