From 132258753aed4927168d4e423c65fd47f85456ea Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Tue, 9 Jun 2009 13:52:27 +0200 Subject: More work on `Quick Fix'. --- src/plugins/cpptools/cpptoolseditorsupport.h | 58 ++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) (limited to 'src/plugins/cpptools/cpptoolseditorsupport.h') diff --git a/src/plugins/cpptools/cpptoolseditorsupport.h b/src/plugins/cpptools/cpptoolseditorsupport.h index 4df23c7b25..f962ca0063 100644 --- a/src/plugins/cpptools/cpptoolseditorsupport.h +++ b/src/plugins/cpptools/cpptoolseditorsupport.h @@ -33,13 +33,21 @@ #include #include #include +#include +#include +#include QT_BEGIN_NAMESPACE class QTimer; QT_END_NAMESPACE +namespace CPlusPlus { + class AST; +} + namespace TextEditor { class ITextEditor; + class ITextMark; } // end of namespace TextEditor namespace CppTools { @@ -47,6 +55,46 @@ namespace Internal { class CppModelManager; +class QuickFixOperation; +typedef QSharedPointer QuickFixOperationPtr; + +class QuickFixOperation +{ + Q_DISABLE_COPY(QuickFixOperation) + +public: + QuickFixOperation(CPlusPlus::Document::Ptr doc, + const CPlusPlus::Snapshot &snapshot); + + virtual ~QuickFixOperation(); + + virtual QString description() const = 0; + virtual void apply(QTextCursor cursor) = 0; + + CPlusPlus::Document::Ptr document() const { return _doc; } + CPlusPlus::Snapshot snapshot() const { return _snapshot; } + + QTextCursor textCursor() const; + void setTextCursor(const QTextCursor &tc); + +protected: + const CPlusPlus::Token &tokenAt(unsigned index) const; + void getTokenStartPosition(unsigned index, unsigned *line, + unsigned *column) const; + void getTokenEndPosition(unsigned index, unsigned *line, + unsigned *column) const; + + QTextCursor cursor(unsigned index) const; + QTextCursor moveAtStartOfToken(unsigned index) const; + QTextCursor moveAtEndOfToken(unsigned index) const; + +private: + CPlusPlus::AST *_node; + CPlusPlus::Document::Ptr _doc; + CPlusPlus::Snapshot _snapshot; + QTextCursor _textCursor; +}; + class CppEditorSupport: public QObject { Q_OBJECT @@ -55,6 +103,9 @@ public: CppEditorSupport(CppModelManager *modelManager); virtual ~CppEditorSupport(); + QList quickFixes() const + { return _quickFixes; } + TextEditor::ITextEditor *textEditor() const; void setTextEditor(TextEditor::ITextEditor *textEditor); @@ -70,6 +121,9 @@ private Q_SLOTS: void updateDocument(); void updateDocumentNow(); + void checkDocument(); + void checkDocumentNow(); + private: enum { UPDATE_DOCUMENT_DEFAULT_INTERVAL = 150 }; @@ -79,6 +133,10 @@ private: int _updateDocumentInterval; QFuture _documentParser; QByteArray _cachedContents; + + QTimer *_quickFixTimer; + TextEditor::ITextMark *_quickFixMark; + QList _quickFixes; }; } // namespace Internal -- cgit v1.2.1