summaryrefslogtreecommitdiffstats
path: root/desktop-widgets
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2019-01-28 22:35:07 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2019-04-12 18:19:07 +0300
commit42cfd3f9638a5f9d37e51285e6d1eaaad3e78501 (patch)
treeda20dbdfd7358638df99a20eab392cf894f9d609 /desktop-widgets
parent512a2e6b684e237c5e6aacd3cba42fb7d2093e0a (diff)
downloadsubsurface-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.cpp10
-rw-r--r--desktop-widgets/command.h2
-rw-r--r--desktop-widgets/command_edit.cpp44
-rw-r--r--desktop-widgets/command_edit.h18
-rw-r--r--desktop-widgets/tab-widgets/maintab.cpp28
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