diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2019-08-13 20:23:54 +0200 |
---|---|---|
committer | bstoeger <32835590+bstoeger@users.noreply.github.com> | 2019-09-14 13:20:59 +0200 |
commit | 37a3daf2dd51330a9dc0a26f1b923698546373ed (patch) | |
tree | 61a8d6362b15e144f300200ab902629a2b02d7a8 /qt-models | |
parent | 36aab0fe9516f55b410404f379cd083a891afa3a (diff) | |
download | subsurface-37a3daf2dd51330a9dc0a26f1b923698546373ed.tar.gz |
Mobile: decouple full text search from DiveObjectHelper
1) The full text search was looping over the DiveListModel when
it could simply loop over the core model. Do that instead.
2) Don't generate a DiveObjectHelper to do a full text search.
Currently this is harmless as the DiveObjectHelper is only
a disguised "dive *". But from a conceptual point of view,
it represents the full representation of a dive and we don't
want to generate that in a tight loop.
This will help in
1) Making the DiveObjectHelper a non-reference object.
2) Moving fulltext search to the core and thus making it available
to desktop and more performant.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'qt-models')
-rw-r--r-- | qt-models/divelistmodel.cpp | 12 |
1 files changed, 5 insertions, 7 deletions
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; |