From c2e625756ce74b2691ec10fc7c67d0920b6749ac Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sun, 18 Apr 2021 20:21:03 +0200 Subject: Use one CompletionProxy for everything including EmojiPicker --- src/CompletionProxyModel.cpp | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) (limited to 'src/CompletionProxyModel.cpp') diff --git a/src/CompletionProxyModel.cpp b/src/CompletionProxyModel.cpp index 2341c292..412708a2 100644 --- a/src/CompletionProxyModel.cpp +++ b/src/CompletionProxyModel.cpp @@ -12,16 +12,18 @@ CompletionProxyModel::CompletionProxyModel(QAbstractItemModel *model, int max_mistakes, + size_t max_completions, QObject *parent) : QAbstractProxyModel(parent) , maxMistakes_(max_mistakes) + , max_completions_(max_completions) { setSourceModel(model); QRegularExpression splitPoints("\\s+|-"); // insert all the full texts for (int i = 0; i < sourceModel()->rowCount(); i++) { - if (i < 7) + if (static_cast(i) < max_completions_) mapping.push_back(i); auto string1 = sourceModel() @@ -82,14 +84,9 @@ CompletionProxyModel::invalidate() { auto key = searchString_.toUcs4(); beginResetModel(); - mapping = trie_.search(key, 7, maxMistakes_); + if (!key.empty()) // return default model data, if no search string + mapping = trie_.search(key, max_completions_, maxMistakes_); endResetModel(); - - std::string temp; - for (auto v : mapping) { - temp += std::to_string(v) + ", "; - } - nhlog::ui()->debug("mapping: {}", temp); } QHash @@ -101,12 +98,22 @@ CompletionProxyModel::roleNames() const int CompletionProxyModel::rowCount(const QModelIndex &) const { - return (int)mapping.size(); + if (searchString_.isEmpty()) + return std::min(static_cast(std::min(max_completions_, + std::numeric_limits::max())), + sourceModel()->rowCount()); + else + return (int)mapping.size(); } QModelIndex CompletionProxyModel::mapFromSource(const QModelIndex &sourceIndex) const { + // return default model data, if no search string + if (searchString_.isEmpty()) { + return index(sourceIndex.row(), 0); + } + for (int i = 0; i < (int)mapping.size(); i++) { if (mapping[i] == sourceIndex.row()) { return index(i, 0); @@ -119,6 +126,12 @@ QModelIndex CompletionProxyModel::mapToSource(const QModelIndex &proxyIndex) const { auto row = proxyIndex.row(); + + // return default model data, if no search string + if (searchString_.isEmpty()) { + return index(row, 0); + } + if (row < 0 || row >= (int)mapping.size()) return QModelIndex(); -- cgit 1.5.1