From 1961312b1508070be0d2a3c6e67a1a3eb24c83d5 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sun, 14 Mar 2021 01:24:26 +0100 Subject: Improve sorting and sizing of completions a bit --- src/CompletionProxyModel.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'src/CompletionProxyModel.cpp') 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(); -- cgit 1.5.1