diff --git a/src/plugins/cppeditor/cppquickfix.cpp b/src/plugins/cppeditor/cppquickfix.cpp index 4b098444ba5212f941c6f54633e11fc5328438b4..601b717c65f761c0537eecd0b5a0128afdae55b4 100644 --- a/src/plugins/cppeditor/cppquickfix.cpp +++ b/src/plugins/cppeditor/cppquickfix.cpp @@ -29,6 +29,9 @@ #include "cppquickfix.h" #include "cppeditor.h" + +#include <cplusplus/CppDocument.h> + #include <TranslationUnit.h> #include <Token.h> @@ -38,6 +41,34 @@ using namespace CppEditor::Internal; using namespace CPlusPlus; +namespace { + +class HelloQuickFixOp: public QuickFixOperation +{ +public: + HelloQuickFixOp(Document::Ptr doc, const Snapshot &snapshot) + : QuickFixOperation(doc, snapshot) + {} + + virtual QString description() const + { + return QLatin1String("Hello"); // ### tr? + } + + virtual void apply(QTextCursor cursor) + { + cursor.beginEditBlock(); + cursor.insertBlock(); + cursor.insertText(QLatin1String("Hello, QuickFix!\n")); + cursor.insertText(document()->fileName()); + cursor.insertBlock(); + cursor.endEditBlock(); + } +}; + +} // end of anonymous namespace + + QuickFixOperation::QuickFixOperation(CPlusPlus::Document::Ptr doc, const CPlusPlus::Snapshot &snapshot) : _doc(doc), _snapshot(snapshot) { } @@ -112,13 +143,33 @@ int CPPQuickFixCollector::startCompletion(TextEditor::ITextEditable *editable) { qDebug() << Q_FUNC_INFO; Q_ASSERT(editable != 0); + _editor = qobject_cast<CPPEditor *>(editable->widget()); + Q_ASSERT(_editor != 0); + + const SemanticInfo info = _editor->semanticInfo(); + + if (info.doc) { + QuickFixOperationPtr op(new HelloQuickFixOp(info.doc, info.snapshot)); + _quickFixes.append(op); + return editable->position(); + } + return -1; } -void CPPQuickFixCollector::completions(QList<TextEditor::CompletionItem> *quicFixItems) +void CPPQuickFixCollector::completions(QList<TextEditor::CompletionItem> *quickFixItems) { - quicFixItems->append(_quickFixItems); + qDebug() << Q_FUNC_INFO; + + for (int i = 0; i < _quickFixes.size(); ++i) { + QuickFixOperationPtr op = _quickFixes.at(i); + + TextEditor::CompletionItem item(this); + item.text = op->description(); + item.data = QVariant::fromValue(i); + quickFixItems->append(item); + } } void CPPQuickFixCollector::complete(const TextEditor::CompletionItem &item) @@ -127,15 +178,13 @@ void CPPQuickFixCollector::complete(const TextEditor::CompletionItem &item) const int index = item.data.toInt(); - QList<QuickFixOperationPtr> quickFixes; // ### get get the quick fixes. - - if (index < quickFixes.size()) { - QuickFixOperationPtr quickFix = quickFixes.at(index); + if (index < _quickFixes.size()) { + QuickFixOperationPtr quickFix = _quickFixes.at(index); quickFix->apply(_editor->textCursor()); } } void CPPQuickFixCollector::cleanup() { - _quickFixItems.clear(); + _quickFixes.clear(); } diff --git a/src/plugins/cppeditor/cppquickfix.h b/src/plugins/cppeditor/cppquickfix.h index 88ffda075bba8d22ead82e173193c2f35e85e8da..0f4320cc5abc794661011362f8992d93898a8381 100644 --- a/src/plugins/cppeditor/cppquickfix.h +++ b/src/plugins/cppeditor/cppquickfix.h @@ -102,7 +102,7 @@ public: private: CppTools::CppModelManagerInterface *_modelManager; CPPEditor *_editor; - QList<TextEditor::CompletionItem> _quickFixItems; + QList<QuickFixOperationPtr> _quickFixes; }; } // end of namespace Internal