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 /core/selection.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 'core/selection.cpp')
-rw-r--r-- | core/selection.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/core/selection.cpp b/core/selection.cpp index 48bb1a76f..d6267c78a 100644 --- a/core/selection.cpp +++ b/core/selection.cpp @@ -254,6 +254,18 @@ extern "C" void deselect_trip(struct dive_trip *trip) } } +extern "C" struct dive_trip *single_selected_trip() +{ + if (amount_trips_selected != 1) + return NULL; + for (int i = 0; i < trip_table.nr; ++i) { + if (trip_table.trips[i]->selected) + return trip_table.trips[i]; + } + fprintf(stderr, "warning: found no selected trip even though one should be selected\n"); + return NULL; // shouldn't happen +} + extern "C" void clear_selection(void) { current_dive = nullptr; |