diff options
-rw-r--r-- | core/qthelper.cpp | 17 | ||||
-rw-r--r-- | core/qthelper.h | 1 | ||||
-rw-r--r-- | qt-models/divelistmodel.cpp | 12 |
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; |