Undo: make adding of weights an undoable action

Introduce an AddWeight undo command. This is modelled after the
numerous dive-edit undo commands. The redo and undo actions are
connected to the WeightModel via two new signals, weightAdded
and weightRemoved.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2019-11-02 21:19:29 +01:00 committed by Dirk Hohndel
parent 76a5a38f5e
commit 147a36647c
8 changed files with 76 additions and 14 deletions

View file

@ -268,6 +268,11 @@ void editProfile(dive *d)
execute(new ReplanDive(d, true));
}
int addWeight(bool currentDiveOnly)
{
return execute_edit(new AddWeight(currentDiveOnly));
}
// Trip editing related commands
void editTripLocation(dive_trip *trip, const QString &s)
{

View file

@ -81,6 +81,7 @@ int editDiveMaster(const QStringList &newList, bool currentDiveOnly);
void pasteDives(const dive *d, dive_components what);
void replanDive(dive *d); // dive computer(s) and cylinder(s) will be reset!
void editProfile(dive *d); // dive computer(s) and cylinder(s) will be reset!
int addWeight(bool currentDiveOnly);
// 5) Trip editing commands

View file

@ -953,4 +953,36 @@ void ReplanDive::redo()
undo();
}
// ***** Add Weight *****
AddWeight::AddWeight(bool currentDiveOnly) :
EditDivesBase(currentDiveOnly)
{
//: remove the part in parentheses for %n = 1
setText(tr("Add weight (%n dive(s))", "", dives.size()));
}
bool AddWeight::workToBeDone()
{
return true;
}
void AddWeight::undo()
{
for (dive *d: dives) {
if (d->weightsystems.nr <= 0)
continue;
remove_weightsystem(d, d->weightsystems.nr - 1);
emit diveListNotifier.weightRemoved(d, d->weightsystems.nr);
}
}
void AddWeight::redo()
{
weightsystem_t ws { {0}, "" };
for (dive *d: dives) {
add_cloned_weightsystem(&d->weightsystems, ws);
emit diveListNotifier.weightAdded(d, d->weightsystems.nr - 1);
}
}
} // namespace Command

View file

@ -330,6 +330,15 @@ private:
bool workToBeDone() override;
};
class AddWeight : public EditDivesBase {
public:
AddWeight(bool currentDiveOnly);
private:
void undo() override;
void redo() override;
bool workToBeDone() override;
};
} // namespace Command
#endif