From 4ae87da58cda895f3573704966ef2e0dd8161864 Mon Sep 17 00:00:00 2001 From: Berthold Stoeger Date: Fri, 6 Mar 2020 23:20:58 +0100 Subject: undo: reload dive on removal of gas-switch If a gas-switch is removed we have to perform the same action as if a gas-switch is added: fixup the dive and signal the changed cylinder and stats. Adapt the RemoveEvent command accordingly. Copy the code of the AddGasSwitch command and simplify for the fact that only ony cylinder can be affected. Signed-off-by: Berthold Stoeger --- commands/command_event.cpp | 17 ++++++++++++++++- commands/command_event.h | 2 ++ 2 files changed, 18 insertions(+), 1 deletion(-) (limited to 'commands') diff --git a/commands/command_event.cpp b/commands/command_event.cpp index 2b9176af5..391dfe0a9 100644 --- a/commands/command_event.cpp +++ b/commands/command_event.cpp @@ -106,7 +106,9 @@ void RenameEvent::undoit() } RemoveEvent::RemoveEvent(struct dive *d, int dcNr, struct event *ev) : EventBase(d, dcNr), - eventToRemove(ev) + eventToRemove(ev), + cylinder(ev->type == SAMPLE_EVENT_GASCHANGE2 || ev->type == SAMPLE_EVENT_GASCHANGE ? + ev->gas.index : -1) { setText(tr("Remove %1 event").arg(ev->name)); } @@ -131,6 +133,19 @@ void RemoveEvent::undoit() add_event_to_dc(dc, eventToAdd.release()); // return ownership to backend } +void RemoveEvent::post() const +{ + if (cylinder < 0) + return; + + fixup_dive(d); + emit diveListNotifier.cylinderEdited(d, cylinder); + + // TODO: This is silly we send a DURATION change event so that the statistics are recalculated. + // We should instead define a proper DiveField that expresses the change caused by a gas switch. + emit diveListNotifier.divesChanged(QVector{ d }, DiveField::DURATION | DiveField::DEPTH); +} + AddGasSwitch::AddGasSwitch(struct dive *d, int dcNr, int seconds, int tank) : EventBase(d, dcNr) { // If there is a gas change at this time stamp, remove it before adding the new one. diff --git a/commands/command_event.h b/commands/command_event.h index a363540d5..b7e67f218 100644 --- a/commands/command_event.h +++ b/commands/command_event.h @@ -79,9 +79,11 @@ private: bool workToBeDone() override; void undoit() override; void redoit() override; + void post() const; // Called to fix up dives should a gas-change have happened. OwningEventPtr eventToAdd; // for undo event *eventToRemove; // for redo + int cylinder; // affected cylinder (if removing gas switch). <0: not a gas switch. }; class AddGasSwitch : public EventBase { -- cgit v1.2.3-70-g09d2