diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2019-06-23 09:22:26 +0200 |
---|---|---|
committer | bstoeger <32835590+bstoeger@users.noreply.github.com> | 2019-06-23 20:08:46 +0200 |
commit | 27944a52b1c2a1c68ccfe88c4a84d3f74fb8b512 (patch) | |
tree | 160fef9677e5cc2e907d4c32448553f74df4d2db /desktop-widgets/command_edit.cpp | |
parent | cbcddaa396f6668fef7750eb2721bc70ca11d0e4 (diff) | |
download | subsurface-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.cpp | 52 |
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(); |