summaryrefslogtreecommitdiffstats
path: root/desktop-widgets
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2018-09-06 09:52:02 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2018-10-11 16:22:27 -0700
commit7150d1c6f61631079e7620901fd1939bbc54e621 (patch)
treef87e4bebdad98cffb7e1db7e675a1fc278e77b02 /desktop-widgets
parent11e0b7ac0a6db1a6f2d96ca4cb1f035f42181634 (diff)
downloadsubsurface-7150d1c6f61631079e7620901fd1939bbc54e621.tar.gz
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 <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'desktop-widgets')
-rw-r--r--desktop-widgets/command_divelist.cpp14
1 files changed, 14 insertions, 0 deletions
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<DiveToAdd> DiveListBase::removeDives(std::vector<dive *> &divesToDel
std::vector<DiveToAdd> 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<dive *>::fromStdVector(divesToDelete));
+
for (dive *d: divesToDelete)
res.push_back(removeDive(d));
divesToDelete.clear();
@@ -141,6 +146,15 @@ std::vector<dive *> DiveListBase::addDives(std::vector<DiveToAdd> &divesToAdd)
std::vector<dive *> 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<dive *> 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<dive_trip *> addedTrips;