summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2018-10-24 21:21:38 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2018-10-25 23:24:22 +0100
commitc5fb66e775092661fe3dd363794d80a9d49cfdff (patch)
tree13162bef53bccf79f061fe099b8a2a48851c3288
parent89a242976fc29ca974f5c3a390ce8519416ea718 (diff)
downloadsubsurface-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>
-rw-r--r--qt-models/divelistmodel.cpp21
-rw-r--r--qt-models/divelistmodel.h1
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: