From 6635ddbde59c983b4cd28a26a4dbb367459dc671 Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Thu, 2 Apr 2009 10:19:23 +0200 Subject: [PATCH] Introduced ICompletionCollector::isValid(editor). --- src/plugins/cpptools/cppcodecompletion.cpp | 3 +++ src/plugins/cpptools/cppcodecompletion.h | 1 + src/plugins/texteditor/completionsupport.cpp | 16 +++++++++++++--- src/plugins/texteditor/completionsupport.h | 1 + src/plugins/texteditor/icompletioncollector.h | 5 +++++ 5 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 2bdaa6445f6..9a9dd71ec3c 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -508,6 +508,9 @@ static int startOfOperator(TextEditor::ITextEditable *editor, return start; } +bool CppCodeCompletion::isValid(TextEditor::ITextEditable *editor) +{ return m_manager->isCppEditor(editor); } + bool CppCodeCompletion::triggersCompletion(TextEditor::ITextEditable *editor) { if (! m_manager->isCppEditor(editor)) // ### remove me diff --git a/src/plugins/cpptools/cppcodecompletion.h b/src/plugins/cpptools/cppcodecompletion.h index c37e09ea03e..174e5d994f4 100644 --- a/src/plugins/cpptools/cppcodecompletion.h +++ b/src/plugins/cpptools/cppcodecompletion.h @@ -58,6 +58,7 @@ class CppCodeCompletion : public TextEditor::ICompletionCollector public: explicit CppCodeCompletion(CppModelManager *manager); + bool isValid(TextEditor::ITextEditable *editor); bool triggersCompletion(TextEditor::ITextEditable *editor); int startCompletion(TextEditor::ITextEditable *editor); void completions(QList<TextEditor::CompletionItem> *completions); diff --git a/src/plugins/texteditor/completionsupport.cpp b/src/plugins/texteditor/completionsupport.cpp index 2e456193ad5..ef4834c8088 100644 --- a/src/plugins/texteditor/completionsupport.cpp +++ b/src/plugins/texteditor/completionsupport.cpp @@ -58,10 +58,11 @@ CompletionSupport::CompletionSupport() m_completionList(0), m_startPosition(0), m_checkCompletionTrigger(false), - m_editor(0) + m_editor(0), + m_completionCollector(0) { - m_completionCollector = ExtensionSystem::PluginManager::instance() - ->getObject<ICompletionCollector>(); + m_completionCollectors = ExtensionSystem::PluginManager::instance() + ->getObjects<ICompletionCollector>(); } void CompletionSupport::performCompletion(const CompletionItem &item) @@ -90,6 +91,15 @@ void CompletionSupport::cleanupCompletions() void CompletionSupport::autoComplete(ITextEditable *editor, bool forced) { + m_completionCollector = 0; + + foreach (ICompletionCollector *collector, m_completionCollectors) { + if (collector->isValid(editor)) { + m_completionCollector = collector; + break; + } + } + if (!m_completionCollector) return; diff --git a/src/plugins/texteditor/completionsupport.h b/src/plugins/texteditor/completionsupport.h index 7cbd5ece5b4..ebe9cbd70f3 100644 --- a/src/plugins/texteditor/completionsupport.h +++ b/src/plugins/texteditor/completionsupport.h @@ -69,6 +69,7 @@ private: int m_startPosition; bool m_checkCompletionTrigger; // Whether to check for completion trigger after cleanup ITextEditable *m_editor; + QList<ICompletionCollector *> m_completionCollectors; ICompletionCollector *m_completionCollector; }; diff --git a/src/plugins/texteditor/icompletioncollector.h b/src/plugins/texteditor/icompletioncollector.h index 49d70f18288..a151e4cf41f 100644 --- a/src/plugins/texteditor/icompletioncollector.h +++ b/src/plugins/texteditor/icompletioncollector.h @@ -77,6 +77,11 @@ public: ICompletionCollector(QObject *parent = 0) : QObject(parent) {} virtual ~ICompletionCollector() {} + /* + * Returns true if this completion collector can be used with the given editor. + */ + virtual bool isValid(ITextEditable *editor) = 0; + /* This method should return whether the cursor is at a position which could * trigger an autocomplete. It will be called each time a character is typed in * the text editor. -- GitLab