From 70b64280ee38cf6327ed2733a41a13413b08df26 Mon Sep 17 00:00:00 2001 From: Leandro Melo <leandro.melo@nokia.com> Date: Fri, 10 Feb 2012 12:58:05 +0100 Subject: [PATCH] Improve code-assist API isSortable Now IGenericProposalModel::isSortable also takes the current prefix as a parameter. This is particularly useful for cases like in the C++ completion: For global completions it will only sort if there's already a content prefix - Notice, however, that the "sorting threshold" for a maximum number of items is still kept in IGenericProposalModel::sort. Task-number: QTCREATORBUG-6404 Change-Id: I3c2f282aa565287b8b4989930b6a27093862ef25 Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com> --- src/plugins/cpptools/cppcompletionassist.cpp | 16 +++++++++------- .../profilecompletionassist.cpp | 2 +- .../qt4projectmanager/profilecompletionassist.h | 2 +- .../codeassist/basicproposalitemlistmodel.cpp | 4 +++- .../codeassist/basicproposalitemlistmodel.h | 2 +- .../codeassist/genericproposalwidget.cpp | 2 +- .../codeassist/igenericproposalmodel.h | 2 +- 7 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/plugins/cpptools/cppcompletionassist.cpp b/src/plugins/cpptools/cppcompletionassist.cpp index 5999c6570b2..fa4d7fd1642 100644 --- a/src/plugins/cpptools/cppcompletionassist.cpp +++ b/src/plugins/cpptools/cppcompletionassist.cpp @@ -183,16 +183,14 @@ class CppAssistProposalModel : public TextEditor::BasicProposalItemListModel public: CppAssistProposalModel() : TextEditor::BasicProposalItemListModel() - , m_sortable(false) , m_completionOperator(T_EOF_SYMBOL) , m_replaceDotForArrow(false) , m_typeOfExpression(new TypeOfExpression) {} - virtual bool isSortable() const { return m_sortable; } + virtual bool isSortable(const QString &prefix) const; virtual IAssistProposalItem *proposalItem(int index) const; - bool m_sortable; unsigned m_completionOperator; bool m_replaceDotForArrow; QSharedPointer<TypeOfExpression> m_typeOfExpression; @@ -229,6 +227,14 @@ private: Q_DECLARE_METATYPE(CppTools::Internal::CompleteFunctionDeclaration) +bool CppAssistProposalModel::isSortable(const QString &prefix) const +{ + if (m_completionOperator != T_EOF_SYMBOL) + return true; + + return !prefix.isEmpty(); +} + IAssistProposalItem *CppAssistProposalModel::proposalItem(int index) const { BasicProposalItem *item = @@ -699,10 +705,6 @@ IAssistProposal * CppCompletionAssistProcessor::perform(const IAssistInterface * if (m_hintProposal) return m_hintProposal; - if (m_model->m_completionOperator != T_EOF_SYMBOL) - m_model->m_sortable = true; - else - m_model->m_sortable = false; return createContentProposal(); } diff --git a/src/plugins/qt4projectmanager/profilecompletionassist.cpp b/src/plugins/qt4projectmanager/profilecompletionassist.cpp index 874e3999523..94f998ea67a 100644 --- a/src/plugins/qt4projectmanager/profilecompletionassist.cpp +++ b/src/plugins/qt4projectmanager/profilecompletionassist.cpp @@ -225,7 +225,7 @@ ProFileAssistProposalModel::ProFileAssistProposalModel( ProFileAssistProposalModel::~ProFileAssistProposalModel() {} -bool ProFileAssistProposalModel::isSortable() const +bool ProFileAssistProposalModel::isSortable(const QString &prefix) const { return false; } diff --git a/src/plugins/qt4projectmanager/profilecompletionassist.h b/src/plugins/qt4projectmanager/profilecompletionassist.h index a08521a40b1..260e1e825f3 100644 --- a/src/plugins/qt4projectmanager/profilecompletionassist.h +++ b/src/plugins/qt4projectmanager/profilecompletionassist.h @@ -97,7 +97,7 @@ public: ProFileAssistProposalModel(const QList<TextEditor::BasicProposalItem *> &items); virtual ~ProFileAssistProposalModel(); - virtual bool isSortable() const; + virtual bool isSortable(const QString &prefix) const; }; } // Internal diff --git a/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.cpp b/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.cpp index ca4e6ba977c..a2cdeadf504 100644 --- a/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.cpp +++ b/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.cpp @@ -216,8 +216,10 @@ void BasicProposalItemListModel::filter(const QString &prefix) } } -bool BasicProposalItemListModel::isSortable() const +bool BasicProposalItemListModel::isSortable(const QString &prefix) const { + Q_UNUSED(prefix); + if (m_currentItems.size() < kMaxSort) return true; return false; diff --git a/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.h b/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.h index 8029d4e42f4..0ea79c2872b 100644 --- a/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.h +++ b/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.h @@ -60,7 +60,7 @@ public: virtual int persistentId(int index) const; virtual void removeDuplicates(); virtual void filter(const QString &prefix); - virtual bool isSortable() const; + virtual bool isSortable(const QString &prefix) const; virtual void sort(); virtual bool supportsPrefixExpansion() const; virtual QString proposalPrefix() const; diff --git a/src/plugins/texteditor/codeassist/genericproposalwidget.cpp b/src/plugins/texteditor/codeassist/genericproposalwidget.cpp index a06891da3a9..8b0951ee848 100644 --- a/src/plugins/texteditor/codeassist/genericproposalwidget.cpp +++ b/src/plugins/texteditor/codeassist/genericproposalwidget.cpp @@ -437,7 +437,7 @@ bool GenericProposalWidget::updateAndCheck(const QString &prefix) abort(); return false; } - if (d->m_model->isSortable()) + if (d->m_model->isSortable(prefix)) d->m_model->sort(); d->m_completionListView->reset(); diff --git a/src/plugins/texteditor/codeassist/igenericproposalmodel.h b/src/plugins/texteditor/codeassist/igenericproposalmodel.h index d5ba9550225..746b9242a9b 100644 --- a/src/plugins/texteditor/codeassist/igenericproposalmodel.h +++ b/src/plugins/texteditor/codeassist/igenericproposalmodel.h @@ -55,7 +55,7 @@ public: virtual int persistentId(int index) const = 0; virtual void removeDuplicates() = 0; virtual void filter(const QString &prefix) = 0; - virtual bool isSortable() const = 0; + virtual bool isSortable(const QString &prefix) const = 0; virtual void sort() = 0; virtual bool supportsPrefixExpansion() const = 0; virtual QString proposalPrefix() const = 0; -- GitLab