mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Dive list: move dive-selection code from filter to list
After invalidating the filter, the dive-selection was modified to ensure that at least one dive is selected. This was done in the filter code, but it seems preferrable to do this in the dive-list code, which has direct access to the selection-model. Therefore, move the code from MultiFilterSortModel to DiveListView. While doing so, split the code in DiveListView into more functions to: 1) Get the index of the first dive (if any). 2) Select the first dive (if any). This allows a distinct size reduction of conditional compilation in MultiFilterSortModel (accesses to MainWindow are not possible in mobile code). Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
2f81890f49
commit
9829e49815
3 changed files with 62 additions and 47 deletions
|
@ -641,10 +641,8 @@ void MultiFilterSortModel::filterChanged(const QModelIndex &from, const QModelIn
|
|||
|
||||
void MultiFilterSortModel::myInvalidate()
|
||||
{
|
||||
#if !defined(SUBSURFACE_MOBILE)
|
||||
int i;
|
||||
struct dive *d;
|
||||
DiveListView *dlv = MainWindow::instance()->diveList;
|
||||
|
||||
divesDisplayed = 0;
|
||||
|
||||
|
@ -658,33 +656,11 @@ void MultiFilterSortModel::myInvalidate()
|
|||
|
||||
invalidateFilter();
|
||||
|
||||
// first make sure the trips are no longer shown as selected
|
||||
// (but without updating the selection state of the dives... this just cleans
|
||||
// up an oddity in the filter handling)
|
||||
// TODO: This should go internally to DiveList, to be triggered after a filter is due.
|
||||
dlv->clearTripSelection();
|
||||
|
||||
// if we have no more selected dives, clean up the display - this later triggers us
|
||||
// to pick one of the dives that are shown in the list as selected dive which is the
|
||||
// natural behavior
|
||||
if (amount_selected == 0) {
|
||||
MainWindow::instance()->cleanUpEmpty();
|
||||
} else {
|
||||
// otherwise find the dives that should still be selected (the filter above unselected any
|
||||
// dive that's no longer visible) and select them again
|
||||
QList<int> curSelectedDives;
|
||||
for_each_dive (i, d) {
|
||||
if (d->selected)
|
||||
curSelectedDives.append(get_divenr(d));
|
||||
}
|
||||
dlv->selectDives(curSelectedDives);
|
||||
}
|
||||
|
||||
emit filterFinished();
|
||||
|
||||
if (curr_dive_site) {
|
||||
dlv->expandAll();
|
||||
}
|
||||
#if !defined(SUBSURFACE_MOBILE)
|
||||
if (curr_dive_site)
|
||||
MainWindow::instance()->diveList->expandAll();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue