From 7150d1c6f61631079e7620901fd1939bbc54e621 Mon Sep 17 00:00:00 2001 From: Berthold Stoeger Date: Thu, 6 Sep 2018 09:52:02 +0200 Subject: Filter: Make filters aware of added / removed dives Instead of reloading all the filter, only increment / decrement the count of the entries of added / removed dives. Originally, this was planned to be done via the signals from the divelist, but it turned out that this was suboptimal, because if the filter decides that the new item is selected, this has to be done *before* adding the dive. Otherwise, it wouldn't be shown. Signed-off-by: Berthold Stoeger --- desktop-widgets/command_divelist.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'desktop-widgets') diff --git a/desktop-widgets/command_divelist.cpp b/desktop-widgets/command_divelist.cpp index 057e852c0..1bc225086 100644 --- a/desktop-widgets/command_divelist.cpp +++ b/desktop-widgets/command_divelist.cpp @@ -109,6 +109,11 @@ std::vector DiveListBase::removeDives(std::vector &divesToDel std::vector res; res.reserve(divesToDelete.size()); + // First, tell the filters that dives are removed. This could + // be done later using the emitted signals, but we do this here + // for symmetry with addDives() + MultiFilterSortModel::instance()->divesDeleted(QVector::fromStdVector(divesToDelete)); + for (dive *d: divesToDelete) res.push_back(removeDive(d)); divesToDelete.clear(); @@ -141,6 +146,15 @@ std::vector DiveListBase::addDives(std::vector &divesToAdd) std::vector res; res.resize(divesToAdd.size()); + // First, tell the filters that new dives are added. We do this here + // instead of later by signals, so that the filter can set the + // checkboxes of the new rows to its liking. The added dives will + // then appear in the correct shown/hidden state. + QVector divesForFilter; + for (const DiveToAdd &entry: divesToAdd) + divesForFilter.push_back(entry.dive.get()); + MultiFilterSortModel::instance()->divesAdded(divesForFilter); + // At the end of the function, to send the proper dives-added signals, // we the the list of added trips. Create this list now. std::vector addedTrips; -- cgit v1.2.3-70-g09d2