mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
undo: generate fieldId() virtual functions by templates
Most edit commands derive from a common base class EditBase, which declares a fieldId() virtual function that has to be defined by the child classes. This is tedious. For some reason the C++ makers refuse to allow "virtual member constants". To make the code somewhat less verbose, create these functions by a template. Of course, we could introduce the template parameter directly in the EditBase class. However, that would mean that the code in this base class is generated for every single undo command. I'm not sure we want that. This should als make it somewhat less tedious to create new edit commands by copy & paste. We could do the same for the fieldName. However, that is more complicated for two reasons: 1) For historic reasons(?) C++ doesn't allow for string literals as template parameters. Therefore, arrays-of-string would have to be defined, which is not very nice. 2) We would have to make sure that these strings are recognized by Qt's translation machinery and use the QT_TRANSLATE_NOOP macro, which makes the whole thing even less attractive. Maybe later. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
d13f73001b
commit
ad540ce5e8
2 changed files with 77 additions and 164 deletions
|
@ -14,6 +14,18 @@
|
|||
|
||||
namespace Command {
|
||||
|
||||
template <typename T, DiveField::Flags ID>
|
||||
DiveField EditTemplate<T, ID>::fieldId() const
|
||||
{
|
||||
return ID;
|
||||
}
|
||||
|
||||
template <DiveField::Flags ID>
|
||||
DiveField EditTagsTemplate<ID>::fieldId() const
|
||||
{
|
||||
return ID;
|
||||
}
|
||||
|
||||
static std::vector<dive *> getDives(bool currentDiveOnly)
|
||||
{
|
||||
if (currentDiveOnly)
|
||||
|
@ -166,11 +178,6 @@ QString EditNotes::fieldName() const
|
|||
return Command::Base::tr("notes");
|
||||
}
|
||||
|
||||
DiveField EditNotes::fieldId() const
|
||||
{
|
||||
return DiveField::NOTES;
|
||||
}
|
||||
|
||||
// ***** Suit *****
|
||||
void EditSuit::set(struct dive *d, QString s) const
|
||||
{
|
||||
|
@ -188,11 +195,6 @@ QString EditSuit::fieldName() const
|
|||
return Command::Base::tr("suit");
|
||||
}
|
||||
|
||||
DiveField EditSuit::fieldId() const
|
||||
{
|
||||
return DiveField::SUIT;
|
||||
}
|
||||
|
||||
// ***** Rating *****
|
||||
void EditRating::set(struct dive *d, int value) const
|
||||
{
|
||||
|
@ -209,11 +211,6 @@ QString EditRating::fieldName() const
|
|||
return Command::Base::tr("rating");
|
||||
}
|
||||
|
||||
DiveField EditRating::fieldId() const
|
||||
{
|
||||
return DiveField::RATING;
|
||||
}
|
||||
|
||||
// ***** Visibility *****
|
||||
void EditVisibility::set(struct dive *d, int value) const
|
||||
{
|
||||
|
@ -230,11 +227,6 @@ QString EditVisibility::fieldName() const
|
|||
return Command::Base::tr("visibility");
|
||||
}
|
||||
|
||||
DiveField EditVisibility::fieldId() const
|
||||
{
|
||||
return DiveField::VISIBILITY;
|
||||
}
|
||||
|
||||
// ***** WaveSize *****
|
||||
void EditWaveSize::set(struct dive *d, int value) const
|
||||
{
|
||||
|
@ -251,11 +243,6 @@ QString EditWaveSize::fieldName() const
|
|||
return Command::Base::tr("wavesize");
|
||||
}
|
||||
|
||||
DiveField EditWaveSize::fieldId() const
|
||||
{
|
||||
return DiveField::WAVESIZE;
|
||||
}
|
||||
|
||||
// ***** Current *****
|
||||
void EditCurrent::set(struct dive *d, int value) const
|
||||
{
|
||||
|
@ -272,11 +259,6 @@ QString EditCurrent::fieldName() const
|
|||
return Command::Base::tr("current");
|
||||
}
|
||||
|
||||
DiveField EditCurrent::fieldId() const
|
||||
{
|
||||
return DiveField::CURRENT;
|
||||
}
|
||||
|
||||
// ***** Surge *****
|
||||
void EditSurge::set(struct dive *d, int value) const
|
||||
{
|
||||
|
@ -293,11 +275,6 @@ QString EditSurge::fieldName() const
|
|||
return Command::Base::tr("surge");
|
||||
}
|
||||
|
||||
DiveField EditSurge::fieldId() const
|
||||
{
|
||||
return DiveField::SURGE;
|
||||
}
|
||||
|
||||
// ***** Chill *****
|
||||
void EditChill::set(struct dive *d, int value) const
|
||||
{
|
||||
|
@ -314,11 +291,6 @@ QString EditChill::fieldName() const
|
|||
return Command::Base::tr("chill");
|
||||
}
|
||||
|
||||
DiveField EditChill::fieldId() const
|
||||
{
|
||||
return DiveField::CHILL;
|
||||
}
|
||||
|
||||
// ***** Air Temperature *****
|
||||
void EditAirTemp::set(struct dive *d, int value) const
|
||||
{
|
||||
|
@ -335,11 +307,6 @@ QString EditAirTemp::fieldName() const
|
|||
return Command::Base::tr("air temperature");
|
||||
}
|
||||
|
||||
DiveField EditAirTemp::fieldId() const
|
||||
{
|
||||
return DiveField::AIR_TEMP;
|
||||
}
|
||||
|
||||
// ***** Water Temperature *****
|
||||
void EditWaterTemp::set(struct dive *d, int value) const
|
||||
{
|
||||
|
@ -359,11 +326,6 @@ QString EditWaterTemp::fieldName() const
|
|||
return Command::Base::tr("water temperature");
|
||||
}
|
||||
|
||||
DiveField EditWaterTemp::fieldId() const
|
||||
{
|
||||
return DiveField::WATER_TEMP;
|
||||
}
|
||||
|
||||
// ***** Water Type *****
|
||||
void EditWaterTypeUser::set(struct dive *d, int value) const
|
||||
{
|
||||
|
@ -380,11 +342,6 @@ QString EditWaterTypeUser::fieldName() const
|
|||
return Command::Base::tr("salinity");
|
||||
}
|
||||
|
||||
DiveField EditWaterTypeUser::fieldId() const
|
||||
{
|
||||
return DiveField::SALINITY;
|
||||
}
|
||||
|
||||
// ***** Atmospheric pressure *****
|
||||
void EditAtmPress::set(struct dive *d, int value) const
|
||||
{
|
||||
|
@ -401,11 +358,6 @@ QString EditAtmPress::fieldName() const
|
|||
return Command::Base::tr("Atm. pressure");
|
||||
}
|
||||
|
||||
DiveField EditAtmPress::fieldId() const
|
||||
{
|
||||
return DiveField::ATM_PRESS;
|
||||
}
|
||||
|
||||
// ***** Duration *****
|
||||
void EditDuration::set(struct dive *d, int value) const
|
||||
{
|
||||
|
@ -425,11 +377,6 @@ QString EditDuration::fieldName() const
|
|||
return Command::Base::tr("duration");
|
||||
}
|
||||
|
||||
DiveField EditDuration::fieldId() const
|
||||
{
|
||||
return DiveField::DURATION;
|
||||
}
|
||||
|
||||
// ***** Depth *****
|
||||
void EditDepth::set(struct dive *d, int value) const
|
||||
{
|
||||
|
@ -449,11 +396,6 @@ QString EditDepth::fieldName() const
|
|||
return Command::Base::tr("depth");
|
||||
}
|
||||
|
||||
DiveField EditDepth::fieldId() const
|
||||
{
|
||||
return DiveField::DEPTH;
|
||||
}
|
||||
|
||||
// ***** DiveSite *****
|
||||
void EditDiveSite::set(struct dive *d, struct dive_site *dive_site) const
|
||||
{
|
||||
|
@ -471,11 +413,6 @@ QString EditDiveSite::fieldName() const
|
|||
return Command::Base::tr("dive site");
|
||||
}
|
||||
|
||||
DiveField EditDiveSite::fieldId() const
|
||||
{
|
||||
return DiveField::DIVESITE;
|
||||
}
|
||||
|
||||
void EditDiveSite::undo()
|
||||
{
|
||||
// Do the normal undo thing, then send dive site changed signals
|
||||
|
@ -549,7 +486,7 @@ void EditDiveSiteNew::redo()
|
|||
// - Change the semantics of the mode-editing.
|
||||
// The future will tell.
|
||||
EditMode::EditMode(int indexIn, int newValue, bool currentDiveOnly)
|
||||
: EditBase(newValue, currentDiveOnly), index(indexIn)
|
||||
: EditTemplate(newValue, currentDiveOnly), index(indexIn)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -569,11 +506,6 @@ QString EditMode::fieldName() const
|
|||
return Command::Base::tr("dive mode");
|
||||
}
|
||||
|
||||
DiveField EditMode::fieldId() const
|
||||
{
|
||||
return DiveField::MODE;
|
||||
}
|
||||
|
||||
// ***** Invalid *****
|
||||
void EditInvalid::set(struct dive *d, int invalid) const
|
||||
{
|
||||
|
@ -590,11 +522,6 @@ QString EditInvalid::fieldName() const
|
|||
return Command::Base::tr("invalid");
|
||||
}
|
||||
|
||||
DiveField EditInvalid::fieldId() const
|
||||
{
|
||||
return DiveField::INVALID;
|
||||
}
|
||||
|
||||
// ***** Tag based commands *****
|
||||
EditTagsBase::EditTagsBase(const QStringList &newListIn, bool currentDiveOnly) :
|
||||
EditDivesBase(currentDiveOnly),
|
||||
|
@ -725,11 +652,6 @@ QString EditTags::fieldName() const
|
|||
return Command::Base::tr("tags");
|
||||
}
|
||||
|
||||
DiveField EditTags::fieldId() const
|
||||
{
|
||||
return DiveField::TAGS;
|
||||
}
|
||||
|
||||
// ***** Buddies *****
|
||||
QStringList EditBuddies::data(struct dive *d) const
|
||||
{
|
||||
|
@ -748,11 +670,6 @@ QString EditBuddies::fieldName() const
|
|||
return Command::Base::tr("buddies");
|
||||
}
|
||||
|
||||
DiveField EditBuddies::fieldId() const
|
||||
{
|
||||
return DiveField::BUDDY;
|
||||
}
|
||||
|
||||
// ***** DiveMaster *****
|
||||
QStringList EditDiveMaster::data(struct dive *d) const
|
||||
{
|
||||
|
@ -771,11 +688,6 @@ QString EditDiveMaster::fieldName() const
|
|||
return Command::Base::tr("dive master");
|
||||
}
|
||||
|
||||
DiveField EditDiveMaster::fieldId() const
|
||||
{
|
||||
return DiveField::DIVEMASTER;
|
||||
}
|
||||
|
||||
static void swapCandQString(QString &q, char *&c)
|
||||
{
|
||||
QString tmp(c);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue