summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppcodecompletion.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/cpptools/cppcodecompletion.cpp')
-rw-r--r--src/plugins/cpptools/cppcodecompletion.cpp54
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),