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_;
|