diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2009-06-09 13:52:27 +0200 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2009-06-09 13:52:52 +0200 |
commit | 132258753aed4927168d4e423c65fd47f85456ea (patch) | |
tree | 86bb52961fedf02c81ecb9397272d2f78401224d /src/plugins/cpptools/cpptoolseditorsupport.h | |
parent | e5fcbba7fcf79dcc85f6221f8c3843554f07a496 (diff) | |
download | qt-creator-132258753aed4927168d4e423c65fd47f85456ea.tar.gz |
More work on `Quick Fix'.
Diffstat (limited to 'src/plugins/cpptools/cpptoolseditorsupport.h')
-rw-r--r-- | src/plugins/cpptools/cpptoolseditorsupport.h | 58 |
1 files changed, 58 insertions, 0 deletions
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 <QObject> #include <QPointer> #include <QFuture> +#include <QSharedPointer> +#include <QTextCursor.h> +#include <cplusplus/CppDocument.h> 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<QuickFixOperation> 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<QuickFixOperationPtr> 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<void> _documentParser; QByteArray _cachedContents; + + QTimer *_quickFixTimer; + TextEditor::ITextMark *_quickFixMark; + QList<QuickFixOperationPtr> _quickFixes; }; } // namespace Internal |