Undo: make editing of dive number undoable

When pressing F2 in the dive list, the number can be edited.
Make this action undoable by implementing a EditNumber command.

This command is differs from the other undo commands, as not the
currently selected dives are changed. This means that the EditCommand
needs an alternative constructor taking a single dive. This constructor
was implemented in the base class so that all edit commands can now
be called with a single dive.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2019-07-17 15:49:45 +02:00 committed by Dirk Hohndel
parent 658ac2bb78
commit 726d08c2f7
5 changed files with 55 additions and 2 deletions

View file

@ -33,6 +33,13 @@ EditDivesBase::EditDivesBase(bool currentDiveOnly) :
{
}
EditDivesBase::EditDivesBase(dive *d) :
dives({ d }),
selectedDives(getDiveSelection()),
current(current_dive)
{
}
int EditDivesBase::numDives() const
{
return dives.size();
@ -45,6 +52,13 @@ EditBase<T>::EditBase(T newValue, bool currentDiveOnly) :
{
}
template<typename T>
EditBase<T>::EditBase(T newValue, dive *d) :
EditDivesBase(d),
value(std::move(newValue))
{
}
// This is quite hackish: we can't use virtual functions in the constructor and
// therefore can't initialize the list of dives [the values of the dives are
// accessed by virtual functions]. Therefore, we (mis)use the fact that workToBeDone()
@ -445,6 +459,28 @@ DiveField EditMode::fieldId() const
return DiveField::MODE;
}
// ***** Number *****
void EditNumber::set(struct dive *d, int number) const
{
d->number = number;
}
int EditNumber::data(struct dive *d) const
{
return d->number;
}
QString EditNumber::fieldName() const
{
return tr("number");
}
DiveField EditNumber::fieldId() const
{
return DiveField::NR;
}
// ***** Tag based commands *****
EditTagsBase::EditTagsBase(const QStringList &newListIn, bool currentDiveOnly) :
EditDivesBase(currentDiveOnly),