diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2020-03-21 18:30:49 +0100 |
---|---|---|
committer | bstoeger <32835590+bstoeger@users.noreply.github.com> | 2020-03-31 21:53:19 +0200 |
commit | 91f7689787345735cfaac516ce2e77311f32f011 (patch) | |
tree | 0364ebfffe291264ffa05416f6b01d38b3f88607 /commands/command_edit.h | |
parent | ea813938a838be57d6a616b0175d5d650fb8c2a2 (diff) | |
download | subsurface-91f7689787345735cfaac516ce2e77311f32f011.tar.gz |
undo: autogenerate string get() and data() functions using a template
Do this in analogy to other types. However, here we have to convert
from / to QString. We could do this in an even more general way
by using two templat parameters: one for the Qt type, one for the
core type and define conversion functions. However, let's not do
this for now.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'commands/command_edit.h')
-rw-r--r-- | commands/command_edit.h | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/commands/command_edit.h b/commands/command_edit.h index 073853254..e10934704 100644 --- a/commands/command_edit.h +++ b/commands/command_edit.h @@ -84,19 +84,25 @@ private: T data(struct dive *d) const override final; // final prevents further overriding - then just don't use this template }; -class EditNotes : public EditTemplate<QString, DiveField::NOTES> { +// Automatically generate getter and setter in the case for string assignments. +// The third parameter is a pointer to a C-style string in the dive structure. +template <DiveField::Flags ID, char *dive::*PTR> +class EditStringSetter : public EditTemplate<QString, ID> { +private: + using EditTemplate<QString, ID>::EditTemplate; + void set(struct dive *d, QString) const override final; // final prevents further overriding - then just don't use this template + QString data(struct dive *d) const override final; // final prevents further overriding - then just don't use this template +}; + +class EditNotes : public EditStringSetter<DiveField::NOTES, &dive::notes> { public: - using EditTemplate::EditTemplate; // Use constructor of base class. - void set(struct dive *d, QString s) const override; - QString data(struct dive *d) const override; + using EditStringSetter::EditStringSetter; // Use constructor of base class. QString fieldName() const override; }; -class EditSuit : public EditTemplate<QString, DiveField::SUIT> { +class EditSuit : public EditStringSetter<DiveField::SUIT, &dive::suit> { public: - using EditTemplate::EditTemplate; // Use constructor of base class. - void set(struct dive *d, QString s) const override; - QString data(struct dive *d) const override; + using EditStringSetter::EditStringSetter; // Use constructor of base class. QString fieldName() const override; }; |