mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
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>
This commit is contained in:
parent
5147131701
commit
769915f3fe
5 changed files with 17 additions and 23 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue