summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2021-03-14 01:24:26 +0100
committerNicolas Werner <nicolas.werner@hotmail.de>2021-03-14 01:24:26 +0100
commit1961312b1508070be0d2a3c6e67a1a3eb24c83d5 (patch)
tree33c2f9c0e2c1c3cb04196a1a076114d559053f30 /src
parentFix text corruption from unrounded pixel height (diff)
downloadnheko-1961312b1508070be0d2a3c6e67a1a3eb24c83d5.tar.xz
Improve sorting and sizing of completions a bit
Diffstat (limited to 'src')
-rw-r--r--src/CompletionProxyModel.cpp19
-rw-r--r--src/CompletionProxyModel.h6
2 files changed, 20 insertions, 5 deletions
diff --git a/src/CompletionProxyModel.cpp b/src/CompletionProxyModel.cpp

index a6759978..45b44fca 100644 --- a/src/CompletionProxyModel.cpp +++ b/src/CompletionProxyModel.cpp
@@ -19,6 +19,7 @@ CompletionProxyModel::CompletionProxyModel(QAbstractItemModel *model, setSourceModel(model); QRegularExpression splitPoints("\\s+|-"); + // insert all the full texts for (int i = 0; i < sourceModel()->rowCount(); i++) { if (i < 7) mapping.push_back(i); @@ -29,6 +30,19 @@ CompletionProxyModel::CompletionProxyModel(QAbstractItemModel *model, .toLower(); trie_.insert(string1.toUcs4(), i); + auto string2 = sourceModel() + ->data(sourceModel()->index(i, 0), CompletionModel::SearchRole2) + .toString() + .toLower(); + } + + // insert the partial matches + for (int i = 0; i < sourceModel()->rowCount(); i++) { + auto string1 = sourceModel() + ->data(sourceModel()->index(i, 0), CompletionModel::SearchRole) + .toString() + .toLower(); + for (const auto &e : string1.split(splitPoints)) { if (!e.isEmpty()) // NOTE(Nico): Use Qt::SkipEmptyParts in Qt 5.14 trie_.insert(e.toUcs4(), i); @@ -40,7 +54,6 @@ CompletionProxyModel::CompletionProxyModel(QAbstractItemModel *model, .toLower(); if (!string2.isEmpty()) { - trie_.insert(string2.toUcs4(), i); for (const auto &e : string2.split(splitPoints)) { if (!e.isEmpty()) // NOTE(Nico): Use Qt::SkipEmptyParts in Qt 5.14 trie_.insert(e.toUcs4(), i); @@ -55,7 +68,7 @@ CompletionProxyModel::CompletionProxyModel(QAbstractItemModel *model, [this](QString s) { s.remove(":"); s.remove("@"); - searchString = s.toLower(); + searchString_ = s.toLower(); invalidate(); }, Qt::QueuedConnection); @@ -64,7 +77,7 @@ CompletionProxyModel::CompletionProxyModel(QAbstractItemModel *model, void CompletionProxyModel::invalidate() { - auto key = searchString.toUcs4(); + auto key = searchString_.toUcs4(); beginResetModel(); mapping = trie_.search(key, 7, maxMistakes_); endResetModel(); diff --git a/src/CompletionProxyModel.h b/src/CompletionProxyModel.h
index 214845b7..5d3ae152 100644 --- a/src/CompletionProxyModel.h +++ b/src/CompletionProxyModel.h
@@ -135,7 +135,8 @@ struct trie class CompletionProxyModel : public QAbstractProxyModel { Q_OBJECT - + Q_PROPERTY( + QString searchString READ searchString WRITE setSearchString NOTIFY newSearchString) public: CompletionProxyModel(QAbstractItemModel *model, int max_mistakes = 2, @@ -159,12 +160,13 @@ public slots: QVariant completionAt(int i) const; void setSearchString(QString s); + QString searchString() const { return searchString_; } signals: void newSearchString(QString); private: - QString searchString; + QString searchString_; trie<uint, int> trie_; std::vector<int> mapping; int maxMistakes_;