diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2018-10-24 21:21:38 +0100 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2018-10-25 23:24:22 +0100 |
commit | c5fb66e775092661fe3dd363794d80a9d49cfdff (patch) | |
tree | 13162bef53bccf79f061fe099b8a2a48851c3288 /qt-models | |
parent | 89a242976fc29ca974f5c3a390ce8519416ea718 (diff) | |
download | subsurface-c5fb66e775092661fe3dd363794d80a9d49cfdff.tar.gz |
Mobile/filtering: update nr of dives shown in a trip when filtering
Whenever the filter changes, simply walk the filtered dive list and ensure
that we have the correct count for dives that match this filter.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-models')
-rw-r--r-- | qt-models/divelistmodel.cpp | 21 | ||||
-rw-r--r-- | qt-models/divelistmodel.h | 1 |
2 files changed, 22 insertions, 0 deletions
diff --git a/qt-models/divelistmodel.cpp b/qt-models/divelistmodel.cpp index a12a1d9fa..75eb9137a 100644 --- a/qt-models/divelistmodel.cpp +++ b/qt-models/divelistmodel.cpp @@ -27,6 +27,7 @@ void DiveListSortModel::updateFilterState() QString fullText = includeNotes? mySourceModel->at(i)->fullText() : mySourceModel->at(i)->fullTextNoNotes(); filteredRows.at(i) = fullText.contains(filterString, cs); } + updateDivesShownInTrips(); } void DiveListSortModel::setSourceModel(QAbstractItemModel *sourceModel) @@ -38,6 +39,7 @@ void DiveListSortModel::setFilter(QString f) filterString = f; updateFilterState(); invalidateFilter(); + updateDivesShownInTrips(); } void DiveListSortModel::resetFilter() @@ -45,6 +47,7 @@ void DiveListSortModel::resetFilter() filterString = ""; filteredRows.clear(); invalidateFilter(); + updateDivesShownInTrips(); } // filtering is way too slow on mobile. Maybe we should roll our own? @@ -91,6 +94,24 @@ void DiveListSortModel::addAllDives() updateFilterState(); } +void DiveListSortModel::updateDivesShownInTrips() +{ + // if filtering is active, reset all the counts to zero, otherwise set them to the full count + struct dive_trip *dt = dive_trip_list; + int rc = rowCount(); + while (dt) { + dt->showndives = rc ? 0 : dt->nrdives; + dt = dt->next; + } + for (int i = 0; i < rowCount(); i++) { + QVariant v = data(index(i, 0), DiveListModel::DiveRole); + DiveObjectHelper *d = v.value<DiveObjectHelper *>(); + dt = d->getDive()->divetrip; + if (dt) + dt->showndives++; + } +} + DiveListModel *DiveListModel::m_instance = NULL; DiveListModel::DiveListModel(QObject *parent) : QAbstractListModel(parent) diff --git a/qt-models/divelistmodel.h b/qt-models/divelistmodel.h index dcfc573ee..05c3b76ff 100644 --- a/qt-models/divelistmodel.h +++ b/qt-models/divelistmodel.h @@ -21,6 +21,7 @@ public slots: void setFilter(QString f); void resetFilter(); int shown(); + void updateDivesShownInTrips(); protected: bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const; private: |