diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2018-09-06 09:52:02 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2018-10-11 16:22:27 -0700 |
commit | 7150d1c6f61631079e7620901fd1939bbc54e621 (patch) | |
tree | f87e4bebdad98cffb7e1db7e675a1fc278e77b02 /desktop-widgets | |
parent | 11e0b7ac0a6db1a6f2d96ca4cb1f035f42181634 (diff) | |
download | subsurface-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.cpp | 14 |
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; |