Undo: return number of changed dives from undo commands

To enable a "multiple dives edited" message, return the number
of edited dives from dive edit undo commands. Since there are
two kinds of these commands, viz. normal fields and tag fields,
and the former use templates, create a common base class that
can return the number of dives. Yes, the class hierarchy is
getting scarily deep! At least, this gives a tiny bit of
code-reuse.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2019-05-23 20:27:19 +02:00 committed by Dirk Hohndel
parent 1641147e7b
commit 03d5e641e1
5 changed files with 87 additions and 67 deletions

View file

@ -25,15 +25,25 @@ static std::vector<dive *> getDives(bool currentDiveOnly)
return res;
}
template<typename T>
EditBase<T>::EditBase(T newValue, bool currentDiveOnly) :
value(std::move(newValue)),
EditDivesBase::EditDivesBase(bool currentDiveOnly) :
dives(getDives(currentDiveOnly)),
selectedDives(getDiveSelection()),
current(current_dive)
{
}
int EditDivesBase::numDives() const
{
return dives.size();
}
template<typename T>
EditBase<T>::EditBase(T newValue, bool currentDiveOnly) :
EditDivesBase(currentDiveOnly),
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()
@ -439,9 +449,7 @@ DiveField EditMode::fieldId() const
// ***** Tag based commands *****
EditTagsBase::EditTagsBase(const QStringList &newListIn, bool currentDiveOnly) :
dives(getDives(currentDiveOnly)),
selectedDives(getDiveSelection()),
current(current_dive),
EditDivesBase(currentDiveOnly),
newList(newListIn)
{
}