mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
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>
This commit is contained in:
parent
cbcddaa396
commit
27944a52b1
18 changed files with 193 additions and 185 deletions
|
@ -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();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue