diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2020-05-02 18:14:44 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2020-05-03 15:02:21 -0700 |
commit | 769915f3fe75bcef8029e82fdfed7ae206182390 (patch) | |
tree | ab38f02413b4d55d1feafffcd31267b527467cda /desktop-widgets/divelistview.cpp | |
parent | 51471317011bef1b6e51a42951f61073bb8be905 (diff) | |
download | subsurface-769915f3fe75bcef8029e82fdfed7ae206182390.tar.gz |
selection: create global single_selected_trip() function
The DiveListView had a singleSelectedTrip function that
returns the selected trip if exactly one trip is selected.
This could be very slow if numerous non-trip items were
selected, because all the selection indices were back-
translated by the proxy model.
This could make selection changes very slow, because the
MainTab used said function to determine whether it should
show trip or dive data.. Indeed, with a 3500 dive test log,
when selecting all dives in tree mode, the updating of the
TabWidgets is sped up from 130 ms to 5 ms this commit.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'desktop-widgets/divelistview.cpp')
-rw-r--r-- | desktop-widgets/divelistview.cpp | 22 |
1 files changed, 2 insertions, 20 deletions
diff --git a/desktop-widgets/divelistview.cpp b/desktop-widgets/divelistview.cpp index 3e1ec6baa..403165759 100644 --- a/desktop-widgets/divelistview.cpp +++ b/desktop-widgets/divelistview.cpp @@ -263,9 +263,8 @@ void DiveListView::rowsInserted(const QModelIndex &parent, int start, int end) // Shouldn't the core-layer call us? void DiveListView::tripChanged(dive_trip *trip, TripField) { - // First check if the trip is already selected (and only - // this trip, as only then is it displayed). Is so, then do nothing. - if (singleSelectedTrip() == trip) + // First check if the trip is already selected (and only this trip, as only then is it displayed). + if (single_selected_trip() == trip) return; unselectDives(); @@ -297,23 +296,6 @@ void DiveListView::unselectDives() selectionModel()->clearSelection(); } -// This function returns a trip if there is one selected trip or NULL. -// Returning all selected trips turned out to be too slow. -dive_trip_t *DiveListView::singleSelectedTrip() -{ - dive_trip_t *res = nullptr; - for (const QModelIndex &index: selectionModel()->selectedRows()) { - if (index.parent().isValid()) - continue; - if (dive_trip_t *trip = index.data(DiveTripModelBase::TRIP_ROLE).value<dive_trip *>()) { - if (res) - return nullptr; // More than one - res = trip; - } - } - return res; -} - bool DiveListView::eventFilter(QObject *, QEvent *event) { if (event->type() != QEvent::KeyPress) |