summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cpptoolseditorsupport.h
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-06-09 13:52:27 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2009-06-09 13:52:52 +0200
commit132258753aed4927168d4e423c65fd47f85456ea (patch)
tree86bb52961fedf02c81ecb9397272d2f78401224d /src/plugins/cpptools/cpptoolseditorsupport.h
parente5fcbba7fcf79dcc85f6221f8c3843554f07a496 (diff)
downloadqt-creator-132258753aed4927168d4e423c65fd47f85456ea.tar.gz
More work on `Quick Fix'.
Diffstat (limited to 'src/plugins/cpptools/cpptoolseditorsupport.h')
-rw-r--r--src/plugins/cpptools/cpptoolseditorsupport.h58
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