aboutsummaryrefslogtreecommitdiffstats
path: root/desktop-widgets/command_edit.cpp
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2019-06-23 09:22:26 +0200
committerGravatar bstoeger <32835590+bstoeger@users.noreply.github.com>2019-06-23 20:08:46 +0200
commit27944a52b1c2a1c68ccfe88c4a84d3f74fb8b512 (patch)
tree160fef9677e5cc2e907d4c32448553f74df4d2db /desktop-widgets/command_edit.cpp
parentcbcddaa396f6668fef7750eb2721bc70ca11d0e4 (diff)
downloadsubsurface-27944a52b1c2a1c68ccfe88c4a84d3f74fb8b512.tar.gz
Undo: don't send signals batched by trip
Since the default view is batched by trips, signals were sent trip-wise. This seemed like a good idea at first, but when more and more parts used these signals, it became a burden. Therefore push the batching to the part of the code where it is needed: the trip view. The divesAdded and divesDeleted are not yet converted, because these are combined with trip addition/deletion. This should also be detangled, but not now. Since the dive-lists were sorted in the processByTrip function, the dive-list model now does its own sorting. This will have to be audited. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'desktop-widgets/command_edit.cpp')
-rw-r--r--desktop-widgets/command_edit.cpp52
1 files changed, 23 insertions, 29 deletions
diff --git a/desktop-widgets/command_edit.cpp b/desktop-widgets/command_edit.cpp
index 89b864f60..5112043d2 100644
--- a/desktop-widgets/command_edit.cpp
+++ b/desktop-widgets/command_edit.cpp
@@ -97,9 +97,7 @@ void EditBase<T>::undo()
// Send signals.
DiveField id = fieldId();
- processByTrip(dives, [&](dive_trip *trip, const QVector<dive *> &divesInTrip) {
- emit diveListNotifier.divesChanged(trip, divesInTrip, id);
- });
+ emit diveListNotifier.divesChanged(QVector<dive *>::fromStdVector(dives), id);
if (setSelection(selectedDives, current))
emit diveListNotifier.selectionChanged(); // If the selection changed -> tell the frontend
@@ -539,9 +537,7 @@ void EditTagsBase::undo()
// Send signals.
DiveField id = fieldId();
- processByTrip(dives, [&](dive_trip *trip, const QVector<dive *> &divesInTrip) {
- emit diveListNotifier.divesChanged(trip, divesInTrip, id);
- });
+ emit diveListNotifier.divesChanged(QVector<dive *>::fromStdVector(dives), id);
if (setSelection(selectedDives, current))
emit diveListNotifier.selectionChanged(); // If the selection changed -> tell the frontend
@@ -750,7 +746,7 @@ void PasteDives::undo()
}
ownedDiveSites.clear();
- std::vector<dive *> divesToNotify; // Remember dives so that we can send signals later
+ QVector<dive *> divesToNotify; // Remember dives so that we can send signals later
divesToNotify.reserve(dives.size());
for (PasteState &state: dives) {
divesToNotify.push_back(state.d);
@@ -780,28 +776,26 @@ void PasteDives::undo()
// TODO: We send one signal per changed field. This means that the dive list may
// update the entry numerous times. Perhaps change the field-id into flags?
// There seems to be a number of enums / flags describing dive fields. Perhaps unify them all?
- processByTrip(divesToNotify, [&](dive_trip *trip, const QVector<dive *> &divesInTrip) {
- if (what.notes)
- emit diveListNotifier.divesChanged(trip, divesInTrip, DiveField::NOTES);
- if (what.divemaster)
- emit diveListNotifier.divesChanged(trip, divesInTrip, DiveField::DIVEMASTER);
- if (what.buddy)
- emit diveListNotifier.divesChanged(trip, divesInTrip, DiveField::BUDDY);
- if (what.suit)
- emit diveListNotifier.divesChanged(trip, divesInTrip, DiveField::SUIT);
- if (what.rating)
- emit diveListNotifier.divesChanged(trip, divesInTrip, DiveField::RATING);
- if (what.visibility)
- emit diveListNotifier.divesChanged(trip, divesInTrip, DiveField::VISIBILITY);
- if (what.divesite)
- emit diveListNotifier.divesChanged(trip, divesInTrip, DiveField::DIVESITE);
- if (what.tags)
- emit diveListNotifier.divesChanged(trip, divesInTrip, DiveField::TAGS);
- if (what.cylinders)
- emit diveListNotifier.cylindersReset(trip, divesInTrip);
- if (what.weights)
- emit diveListNotifier.weightsystemsReset(trip, divesInTrip);
- });
+ if (what.notes)
+ emit diveListNotifier.divesChanged(divesToNotify, DiveField::NOTES);
+ if (what.divemaster)
+ emit diveListNotifier.divesChanged(divesToNotify, DiveField::DIVEMASTER);
+ if (what.buddy)
+ emit diveListNotifier.divesChanged(divesToNotify, DiveField::BUDDY);
+ if (what.suit)
+ emit diveListNotifier.divesChanged(divesToNotify, DiveField::SUIT);
+ if (what.rating)
+ emit diveListNotifier.divesChanged(divesToNotify, DiveField::RATING);
+ if (what.visibility)
+ emit diveListNotifier.divesChanged(divesToNotify, DiveField::VISIBILITY);
+ if (what.divesite)
+ emit diveListNotifier.divesChanged(divesToNotify, DiveField::DIVESITE);
+ if (what.tags)
+ emit diveListNotifier.divesChanged(divesToNotify, DiveField::TAGS);
+ if (what.cylinders)
+ emit diveListNotifier.cylindersReset(divesToNotify);
+ if (what.weights)
+ emit diveListNotifier.weightsystemsReset(divesToNotify);
if (diveSiteListChanged)
MapWidget::instance()->reload();