mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 05:00:20 +00:00
undo: set dive mode to CCR in undo command, not profile code
When setting a CCR setpoint, the profile code(!) would turn the dive into a CCR dive. Not only should the display layer not alter dives, this also means that the action is not undoable. Move that to the appropriate undo command, where it makes more sense, but obviously also makes things more complicated. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
cd32c280ae
commit
1a0f6f53ed
4 changed files with 23 additions and 5 deletions
|
@ -1,4 +1,5 @@
|
||||||
- undo: save to git after editing weights [#3159]
|
- undo: save to git after editing weights [#3159]
|
||||||
|
- undo: reset dive-mode on undo of set-point addition
|
||||||
- desktop: complete rewrite of the statistics code, significantly expanding capabilities
|
- desktop: complete rewrite of the statistics code, significantly expanding capabilities
|
||||||
- desktop: add preferences option to disable default cylinder types
|
- desktop: add preferences option to disable default cylinder types
|
||||||
- mobile: add ability to show fundamentally the same statistics as on the desktop
|
- mobile: add ability to show fundamentally the same statistics as on the desktop
|
||||||
|
|
|
@ -74,11 +74,24 @@ AddEventDivemodeSwitch::AddEventDivemodeSwitch(struct dive *d, int dcNr, int sec
|
||||||
}
|
}
|
||||||
|
|
||||||
AddEventSetpointChange::AddEventSetpointChange(struct dive *d, int dcNr, int seconds, pressure_t pO2) :
|
AddEventSetpointChange::AddEventSetpointChange(struct dive *d, int dcNr, int seconds, pressure_t pO2) :
|
||||||
AddEventBase(d, dcNr, create_event(seconds, SAMPLE_EVENT_PO2, 0, pO2.mbar, QT_TRANSLATE_NOOP("gettextFromC", "SP change")))
|
AddEventBase(d, dcNr, create_event(seconds, SAMPLE_EVENT_PO2, 0, pO2.mbar, QT_TRANSLATE_NOOP("gettextFromC", "SP change"))),
|
||||||
|
divemode(CCR)
|
||||||
{
|
{
|
||||||
setText(Command::Base::tr("Add set point change")); // TODO: format pO2 value in bar or psi.
|
setText(Command::Base::tr("Add set point change")); // TODO: format pO2 value in bar or psi.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AddEventSetpointChange::undoit()
|
||||||
|
{
|
||||||
|
AddEventBase::undoit();
|
||||||
|
std::swap(get_dive_dc(d, dcNr)->divemode, divemode);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddEventSetpointChange::redoit()
|
||||||
|
{
|
||||||
|
AddEventBase::redoit();
|
||||||
|
std::swap(get_dive_dc(d, dcNr)->divemode, divemode);
|
||||||
|
}
|
||||||
|
|
||||||
RenameEvent::RenameEvent(struct dive *d, int dcNr, struct event *ev, const char *name) : EventBase(d, dcNr),
|
RenameEvent::RenameEvent(struct dive *d, int dcNr, struct event *ev, const char *name) : EventBase(d, dcNr),
|
||||||
eventToAdd(clone_event_rename(ev, name)),
|
eventToAdd(clone_event_rename(ev, name)),
|
||||||
eventToRemove(ev)
|
eventToRemove(ev)
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#define COMMAND_EVENT_H
|
#define COMMAND_EVENT_H
|
||||||
|
|
||||||
#include "command_base.h"
|
#include "command_base.h"
|
||||||
|
#include "core/divemode.h"
|
||||||
|
|
||||||
// We put everything in a namespace, so that we can shorten names without polluting the global namespace
|
// We put everything in a namespace, so that we can shorten names without polluting the global namespace
|
||||||
namespace Command {
|
namespace Command {
|
||||||
|
@ -35,10 +36,11 @@ private:
|
||||||
class AddEventBase : public EventBase {
|
class AddEventBase : public EventBase {
|
||||||
public:
|
public:
|
||||||
AddEventBase(struct dive *d, int dcNr, struct event *ev); // Takes ownership of event!
|
AddEventBase(struct dive *d, int dcNr, struct event *ev); // Takes ownership of event!
|
||||||
private:
|
protected:
|
||||||
bool workToBeDone() override;
|
|
||||||
void undoit() override;
|
void undoit() override;
|
||||||
void redoit() override;
|
void redoit() override;
|
||||||
|
private:
|
||||||
|
bool workToBeDone() override;
|
||||||
|
|
||||||
OwningEventPtr eventToAdd; // for redo
|
OwningEventPtr eventToAdd; // for redo
|
||||||
event *eventToRemove; // for undo
|
event *eventToRemove; // for undo
|
||||||
|
@ -57,6 +59,10 @@ public:
|
||||||
class AddEventSetpointChange : public AddEventBase {
|
class AddEventSetpointChange : public AddEventBase {
|
||||||
public:
|
public:
|
||||||
AddEventSetpointChange(struct dive *d, int dcNr, int seconds, pressure_t pO2);
|
AddEventSetpointChange(struct dive *d, int dcNr, int seconds, pressure_t pO2);
|
||||||
|
private:
|
||||||
|
divemode_t divemode; // Wonderful: this may change the divemode of the dive to CCR
|
||||||
|
void undoit() override;
|
||||||
|
void redoit() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
class RenameEvent : public EventBase {
|
class RenameEvent : public EventBase {
|
||||||
|
|
|
@ -345,8 +345,6 @@ static void check_setpoint_events(const struct dive *dive, struct divecomputer *
|
||||||
do {
|
do {
|
||||||
i = set_setpoint(pi, i, setpoint.mbar, ev->time.seconds);
|
i = set_setpoint(pi, i, setpoint.mbar, ev->time.seconds);
|
||||||
setpoint.mbar = ev->value;
|
setpoint.mbar = ev->value;
|
||||||
if (setpoint.mbar)
|
|
||||||
dc->divemode = CCR;
|
|
||||||
ev = get_next_event(ev->next, "SP change");
|
ev = get_next_event(ev->next, "SP change");
|
||||||
} while (ev);
|
} while (ev);
|
||||||
set_setpoint(pi, i, setpoint.mbar, INT_MAX);
|
set_setpoint(pi, i, setpoint.mbar, INT_MAX);
|
||||||
|
|
Loading…
Reference in a new issue