diff options
-rw-r--r-- | desktop-widgets/divelistview.cpp | 42 | ||||
-rw-r--r-- | qt-models/filtermodels.cpp | 19 |
2 files changed, 41 insertions, 20 deletions
diff --git a/desktop-widgets/divelistview.cpp b/desktop-widgets/divelistview.cpp index fffb1186f..4983b41f4 100644 --- a/desktop-widgets/divelistview.cpp +++ b/desktop-widgets/divelistview.cpp @@ -461,16 +461,21 @@ void DiveListView::selectDives(const QList<int> &newDiveSelection) // the actual reloading of the dive sites will be perfomed // by the main-window in response to the divesSelected signal // emitted below. - QVector<dive_site *> selectedSites; - for (int idx: newDiveSelection) { - dive *d = get_dive(idx); - if (!d) - continue; - dive_site *ds = d->dive_site; - if (ds && !selectedSites.contains(ds)) - selectedSites.append(ds); + // But don't do this if we are in divesite mode, because then + // the dive-site selection is controlled by the filter not + // by the selected dives. + if (!MultiFilterSortModel::instance()->diveSiteMode()) { + QVector<dive_site *> selectedSites; + for (int idx: newDiveSelection) { + dive *d = get_dive(idx); + if (!d) + continue; + dive_site *ds = d->dive_site; + if (ds && !selectedSites.contains(ds)) + selectedSites.append(ds); + } + MapWidget::instance()->setSelected(selectedSites); } - MapWidget::instance()->setSelected(selectedSites); // now that everything is up to date, update the widgets emit divesSelected(); @@ -691,14 +696,19 @@ void DiveListView::selectionChanged(const QItemSelection &selected, const QItemS // When receiving the divesSelected signal the main window will // instruct the map to update the flags. Thus, make sure that // the selected maps are registered correctly. - QVector<dive_site *> selectedSites; - for (QModelIndex index: selectionModel()->selection().indexes()) { - const QAbstractItemModel *model = index.model(); - struct dive *dive = model->data(index, DiveTripModelBase::DIVE_ROLE).value<struct dive *>(); - if (dive && dive->dive_site) - selectedSites.push_back(dive->dive_site); + // But don't do this if we are in divesite mode, because then + // the dive-site selection is controlled by the filter not + // by the selected dives. + if (!MultiFilterSortModel::instance()->diveSiteMode()) { + QVector<dive_site *> selectedSites; + for (QModelIndex index: selectionModel()->selection().indexes()) { + const QAbstractItemModel *model = index.model(); + struct dive *dive = model->data(index, DiveTripModelBase::DIVE_ROLE).value<struct dive *>(); + if (dive && dive->dive_site) + selectedSites.push_back(dive->dive_site); + } + MapWidget::instance()->setSelected(selectedSites); } - MapWidget::instance()->setSelected(selectedSites); emit divesSelected(); } diff --git a/qt-models/filtermodels.cpp b/qt-models/filtermodels.cpp index 7beb11d49..e9fbb9866 100644 --- a/qt-models/filtermodels.cpp +++ b/qt-models/filtermodels.cpp @@ -127,8 +127,7 @@ void MultiFilterSortModel::resetModel(DiveTripModelBase::Layout layout) bool MultiFilterSortModel::showDive(const struct dive *d) const { - // If dive_sites is not empty, we are in a special dive-site filtering mode. - if (!dive_sites.isEmpty()) + if (diveSiteMode()) return dive_sites.contains(d->dive_site); if (!filterData.validFilter) @@ -267,13 +266,16 @@ void MultiFilterSortModel::myInvalidate() #if !defined(SUBSURFACE_MOBILE) // The shown maps may have changed -> reload the map widget. - MapWidget::instance()->reload(); + // But don't do this in dive site mode, because then we show all + // dive sites and only change the selected flag. + if (!diveSiteMode()) + MapWidget::instance()->reload(); #endif emit filterFinished(); #if !defined(SUBSURFACE_MOBILE) - if (!dive_sites.isEmpty()) + if (diveSiteMode()) MainWindow::instance()->diveList->expandAll(); #endif } @@ -303,6 +305,11 @@ void MultiFilterSortModel::startFilterDiveSites(QVector<dive_site *> ds) } else { std::sort(ds.begin(), ds.end()); dive_sites = ds; +#if !defined(SUBSURFACE_MOBILE) + // When switching into dive site mode, reload the dive sites. + // We won't do this in myInvalidate() once we are in dive site mode. + MapWidget::instance()->reload(); +#endif myInvalidate(); } } @@ -323,6 +330,10 @@ void MultiFilterSortModel::setFilterDiveSite(QVector<dive_site *> ds) if (ds == dive_sites) return; dive_sites = ds; + +#if !defined(SUBSURFACE_MOBILE) + MapWidget::instance()->setSelected(dive_sites); +#endif myInvalidate(); } |