diff options
Diffstat (limited to 'src/plugins/cpptools/cppcodecompletion.cpp')
-rw-r--r-- | src/plugins/cpptools/cppcodecompletion.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index d69d683f81..ffa09ae1c8 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -30,6 +30,7 @@ #include "cppcodecompletion.h" #include "cppmodelmanager.h" #include "cppdoxygen.h" +#include "cpptoolseditorsupport.h" #include <Control.h> #include <AST.h> @@ -421,6 +422,59 @@ void FunctionArgumentWidget::updateHintText() m_popupFrame->move(pos); } +CppQuickFixCollector::CppQuickFixCollector(CppModelManager *modelManager) + : _modelManager(modelManager), _editor(0) +{ } + +CppQuickFixCollector::~CppQuickFixCollector() +{ } + +bool CppQuickFixCollector::supportsEditor(TextEditor::ITextEditable *editor) +{ return _modelManager->isCppEditor(editor); } + +bool CppQuickFixCollector::triggersCompletion(TextEditor::ITextEditable *) +{ return false; } + +int CppQuickFixCollector::startCompletion(TextEditor::ITextEditable *editor) +{ + _editor = editor; + + if (CppEditorSupport *extra = _modelManager->editorSupport(editor)) { + const QList<QuickFixOperationPtr> quickFixes = extra->quickFixes(); + if (! quickFixes.isEmpty()) { + int i = 0; + foreach (QuickFixOperationPtr op, quickFixes) { + TextEditor::CompletionItem item(this); + item.m_text = op->description(); + item.m_data = QVariant::fromValue(i); + _completions.append(item); + ++i; + } + return editor->position(); + } + } + return -1; +} + +void CppQuickFixCollector::completions(QList<TextEditor::CompletionItem> *completions) +{ + completions->append(_completions); +} + +void CppQuickFixCollector::complete(const TextEditor::CompletionItem &item) +{ + CppEditorSupport *extra = _modelManager->editorSupport(_editor); + const QList<QuickFixOperationPtr> quickFixes = extra->quickFixes(); + QuickFixOperationPtr quickFix = quickFixes.at(item.m_data.toInt()); + TextEditor::BaseTextEditor *ed = qobject_cast<TextEditor::BaseTextEditor *>(_editor->widget()); + quickFix->apply(ed->textCursor()); +} + +void CppQuickFixCollector::cleanup() +{ + _completions.clear(); +} + CppCodeCompletion::CppCodeCompletion(CppModelManager *manager) : ICompletionCollector(manager), m_manager(manager), |