diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2019-01-28 22:35:07 +0100 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2019-04-12 18:19:07 +0300 |
commit | 42cfd3f9638a5f9d37e51285e6d1eaaad3e78501 (patch) | |
tree | da20dbdfd7358638df99a20eab392cf894f9d609 /desktop-widgets | |
parent | 512a2e6b684e237c5e6aacd3cba42fb7d2093e0a (diff) | |
download | subsurface-42cfd3f9638a5f9d37e51285e6d1eaaad3e78501.tar.gz |
Undo: implement undo of rating and visibility rating
This was rather trivial and modeled after the previous edit
UndoCommands. Since this is the first time we're editing
integers a new constructor instantiation had to be added.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'desktop-widgets')
-rw-r--r-- | desktop-widgets/command.cpp | 10 | ||||
-rw-r--r-- | desktop-widgets/command.h | 2 | ||||
-rw-r--r-- | desktop-widgets/command_edit.cpp | 44 | ||||
-rw-r--r-- | desktop-widgets/command_edit.h | 18 | ||||
-rw-r--r-- | desktop-widgets/tab-widgets/maintab.cpp | 28 |
5 files changed, 86 insertions, 16 deletions
diff --git a/desktop-widgets/command.cpp b/desktop-widgets/command.cpp index 7f18b343c..37c53235d 100644 --- a/desktop-widgets/command.cpp +++ b/desktop-widgets/command.cpp @@ -145,4 +145,14 @@ void editSuit(const QVector<dive *> dives, const QString &newValue, const QStrin execute(new EditSuit(dives, newValue, oldValue)); } +void editRating(const QVector<dive *> dives, int newValue, int oldValue) +{ + execute(new EditRating(dives, newValue, oldValue)); +} + +void editVisibility(const QVector<dive *> dives, int newValue, int oldValue) +{ + execute(new EditVisibility(dives, newValue, oldValue)); +} + } // namespace Command diff --git a/desktop-widgets/command.h b/desktop-widgets/command.h index d31098a4b..bc3e36cae 100644 --- a/desktop-widgets/command.h +++ b/desktop-widgets/command.h @@ -55,6 +55,8 @@ void purgeUnusedDiveSites(); void editNotes(const QVector<dive *> dives, const QString &newValue, const QString &oldValue); void editSuit(const QVector<dive *> dives, const QString &newValue, const QString &oldValue); void editMode(const QVector<dive *> dives, int index, int newValue, int oldValue); +void editRating(const QVector<dive *> dives, int newValue, int oldValue); +void editVisibility(const QVector<dive *> dives, int newValue, int oldValue); } // namespace Command diff --git a/desktop-widgets/command_edit.cpp b/desktop-widgets/command_edit.cpp index 80113dbdc..0480378b8 100644 --- a/desktop-widgets/command_edit.cpp +++ b/desktop-widgets/command_edit.cpp @@ -68,6 +68,8 @@ void EditBase<T>::undo() // class by virtue of a "using" declaration. template EditBase<QString>::EditBase(const QVector<dive *> &dives, QString oldValue, QString newValue); +template +EditBase<int>::EditBase(const QVector<dive *> &dives, int oldValue, int newValue); // Undo and redo do the same as just the stored value is exchanged template<typename T> @@ -122,6 +124,48 @@ DiveField EditSuit::fieldId() const return DiveField::SUIT; } +// ***** Rating ***** +void EditRating::set(struct dive *d, int value) const +{ + d->rating = value; +} + +int EditRating::data(struct dive *d) const +{ + return d->rating; +} + +QString EditRating::fieldName() const +{ + return tr("rating"); +} + +DiveField EditRating::fieldId() const +{ + return DiveField::RATING; +} + +// ***** Visibility **** +void EditVisibility::set(struct dive *d, int value) const +{ + d->visibility = value; +} + +int EditVisibility::data(struct dive *d) const +{ + return d->visibility; +} + +QString EditVisibility::fieldName() const +{ + return tr("visibility"); +} + +DiveField EditVisibility::fieldId() const +{ + return DiveField::VISIBILITY; +} + // ***** Mode ***** // Editing the dive mode has very peculiar semantics for historic reasons: // Since the dive-mode depends on the dive computer, the i-th dive computer diff --git a/desktop-widgets/command_edit.h b/desktop-widgets/command_edit.h index 0209b7d64..831f7f971 100644 --- a/desktop-widgets/command_edit.h +++ b/desktop-widgets/command_edit.h @@ -65,6 +65,24 @@ public: DiveField fieldId() const override; }; +class EditRating : public EditBase<int> { +public: + using EditBase<int>::EditBase; // Use constructor of base class. + void set(struct dive *d, int value) const override; + int data(struct dive *d) const override; + QString fieldName() const override; + DiveField fieldId() const override; +}; + +class EditVisibility : public EditBase<int> { +public: + using EditBase<int>::EditBase; // Use constructor of base class. + void set(struct dive *d, int value) const override; + int data(struct dive *d) const override; + QString fieldName() const override; + DiveField fieldId() const override; +}; + class EditMode : public EditBase<int> { int index; public: diff --git a/desktop-widgets/tab-widgets/maintab.cpp b/desktop-widgets/tab-widgets/maintab.cpp index 962cdc645..2f6c8c8cd 100644 --- a/desktop-widgets/tab-widgets/maintab.cpp +++ b/desktop-widgets/tab-widgets/maintab.cpp @@ -342,6 +342,12 @@ void MainTab::divesEdited(const QVector<dive *> &, DiveField field) return; switch(field) { + case DiveField::RATING: + ui.rating->setCurrentStars(current_dive->rating); + break; + case DiveField::VISIBILITY: + ui.visibility->setCurrentStars(current_dive->visibility); + break; case DiveField::SUIT: ui.suit->setText(QString(current_dive->suit)); break; @@ -798,10 +804,6 @@ void MainTab::acceptChanges() struct dive *cd = current_dive; // now check if something has changed and if yes, edit the selected dives that // were identical with the master dive shown (and mark the divelist as changed) - if (displayed_dive.rating != cd->rating) - MODIFY_DIVES(selectedDives, EDIT_VALUE(rating)); - if (displayed_dive.visibility != cd->visibility) - MODIFY_DIVES(selectedDives, EDIT_VALUE(visibility)); if (displayed_dive.airtemp.mkelvin != cd->airtemp.mkelvin) MODIFY_DIVES(selectedDives, EDIT_VALUE(airtemp.mkelvin)); if (displayed_dive.watertemp.mkelvin != cd->watertemp.mkelvin) @@ -1378,24 +1380,18 @@ void MainTab::on_notes_editingFinished() void MainTab::on_rating_valueChanged(int value) { - if (acceptingEdit == true) + if (acceptingEdit == true || !current_dive) return; - if (displayed_dive.rating != value) { - displayed_dive.rating = value; - modified = true; - enableEdition(); - } + + Command::editRating(getSelectedDivesCurrentLast(), value, current_dive->rating); } void MainTab::on_visibility_valueChanged(int value) { - if (acceptingEdit == true) + if (acceptingEdit == true || !current_dive) return; - if (displayed_dive.visibility != value) { - displayed_dive.visibility = value; - modified = true; - enableEdition(); - } + + Command::editVisibility(getSelectedDivesCurrentLast(), value, current_dive->visibility); } #undef MODIFY_DIVES |