summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/qthelper.cpp17
-rw-r--r--core/qthelper.h1
-rw-r--r--qt-models/divelistmodel.cpp12
3 files changed, 23 insertions, 7 deletions
diff --git a/core/qthelper.cpp b/core/qthelper.cpp
index cd9fc7b90..8082db742 100644
--- a/core/qthelper.cpp
+++ b/core/qthelper.cpp
@@ -1403,6 +1403,23 @@ QString getUUID()
return uuidString;
}
+static bool contains(const char *s, const QString &filterstring, Qt::CaseSensitivity cs)
+{
+ return !empty_string(s) && QString(s).contains(filterstring, cs);
+}
+
+bool diveContainsText(const struct dive *d, const QString &filterstring, Qt::CaseSensitivity cs, bool includeNotes)
+{
+ if (!d)
+ return false;
+ return contains(get_dive_location(d), filterstring, cs) ||
+ (d->divetrip && contains(d->divetrip->location, filterstring, cs)) ||
+ contains(d->buddy, filterstring, cs) ||
+ contains(d->divemaster, filterstring, cs) ||
+ contains(d->suit, filterstring, cs) ||
+ get_taglist_string(d->tag_list).contains(filterstring, cs) ||
+ (includeNotes && contains(d->notes, filterstring, cs));
+}
int parse_seabear_header(const char *filename, char **params, int pnr)
{
QFile f(filename);
diff --git a/core/qthelper.h b/core/qthelper.h
index 74185b467..1322cc9b9 100644
--- a/core/qthelper.h
+++ b/core/qthelper.h
@@ -79,6 +79,7 @@ QLocale getLocale();
QVector<QPair<QString, int>> selectedDivesGasUsed();
QString getUserAgent();
QString printGPSCoords(const location_t *loc);
+bool diveContainsText(const struct dive *d, const QString &filterstring, Qt::CaseSensitivity cs, bool includeNotes);
#if defined __APPLE__
#define TITLE_OR_TEXT(_t, _m) "", _t + "\n" + _m
diff --git a/qt-models/divelistmodel.cpp b/qt-models/divelistmodel.cpp
index 72ce90049..c1b8bea83 100644
--- a/qt-models/divelistmodel.cpp
+++ b/qt-models/divelistmodel.cpp
@@ -20,19 +20,17 @@ void DiveListSortModel::updateFilterState()
bool includeNotes = qPrefGeneral::filterFullTextNotes();
Qt::CaseSensitivity cs = qPrefGeneral::filterCaseSensitive() ? Qt::CaseSensitive : Qt::CaseInsensitive;
- // get the underlying model and re-calculate the filter value for each dive
- DiveListModel *mySourceModel = qobject_cast<DiveListModel *>(sourceModel());
- for (int i = 0; i < mySourceModel->rowCount(); i++) {
- DiveObjectHelper *d = mySourceModel->at(i);
- QString fullText = includeNotes? d->fullText() : d->fullTextNoNotes();
- d->getDive()->hidden_by_filter = !fullText.contains(filterString, cs);
- }
+ int i;
+ struct dive *d;
+ for_each_dive(i, d)
+ d->hidden_by_filter = !diveContainsText(d, filterString, cs, includeNotes);
}
void DiveListSortModel::setSourceModel(QAbstractItemModel *sourceModel)
{
QSortFilterProxyModel::setSourceModel(sourceModel);
}
+
void DiveListSortModel::setFilter(QString f)
{
filterString = f;