More work on `Quick Fix'.

This commit is contained in:
Roberto Raggi
2009-06-09 13:52:27 +02:00
parent e5fcbba7fc
commit 132258753a
10 changed files with 396 additions and 2 deletions

View File

@@ -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),