Selection: automatically unselect old selection in selectDives()

DiveListView::selectDives() would only select new dives but not clear
the old selection. Thus, callers would have to clear the selection
first. That would lead to two selection-changed signals.

Move the unselectDives() call into DiveListView::selectDives().
The DiveListView has an internal flag to prevent double signals.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2019-05-03 22:17:03 +02:00 committed by Dirk Hohndel
parent 8eb586d1d4
commit 403206ca06
2 changed files with 8 additions and 9 deletions

View file

@ -277,9 +277,7 @@ void DiveListView::restoreSelection()
return;
selectionSaved = false;
dontEmitDiveChangedSignal = true;
unselectDives();
dontEmitDiveChangedSignal = false;
QList<int> divesToSelect;
Q_FOREACH (dive_trip_t *trip, selectedDives.keys()) {
QList<int> divesOnTrip = getDivesInTrip(trip);
QList<int> selectedDivesOnTrip = selectedDives.values(trip);
@ -289,8 +287,9 @@ void DiveListView::restoreSelection()
selectTrip(trip);
selectedDivesOnTrip.removeAll(-1);
}
selectDives(selectedDivesOnTrip);
divesToSelect += selectedDivesOnTrip;
}
selectDives(divesToSelect);
}
// This is a bit ugly: we hook directly into the tripChanged signal to
@ -417,6 +416,10 @@ void DiveListView::selectDives(const QList<int> &newDiveSelection)
return;
dontEmitDiveChangedSignal = true;
// First, clear the old selection
unselectDives();
// select the dives, highest index first - this way the oldest of the dives
// becomes the selected_dive that we scroll to
QList<int> sortedSelection = newDiveSelection;

View file

@ -105,11 +105,7 @@ void MapWidget::prepareForGetDiveCoordinates(struct dive_site *ds)
void MapWidget::selectedDivesChanged(const QList<int> &list)
{
CHECK_IS_READY_RETURN_VOID();
skipReload = true;
MainWindow::instance()->diveList->unselectDives();
if (!list.empty())
MainWindow::instance()->diveList->selectDives(list);
skipReload = false;
MainWindow::instance()->diveList->selectDives(list);
}
void MapWidget::coordinatesChanged(struct dive_site *ds, const location_t &location)