Kate
katesmartmanager.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef KATESMARTMANAGER_H
00020 #define KATESMARTMANAGER_H
00021
00022 #include <QtCore/QObject>
00023 #include <QtCore/QSet>
00024 #include <QtCore/QLinkedList>
00025 #include <QtCore/QThreadStorage>
00026
00027 #include <ktexteditor/smartrange.h>
00028
00029 #include "kateedit.h"
00030
00031 class KateDocument;
00032 class KateSmartCursor;
00033 class KateSmartRange;
00034 class KateSmartGroup;
00035
00042 class KateSmartManager : public QObject
00043 {
00044 Q_OBJECT
00045
00046 public:
00047 explicit KateSmartManager(KateDocument* parent);
00048 virtual ~KateSmartManager();
00049
00050 KateDocument* doc() const;
00051
00063 inline bool isClearing() const { return m_clearing; }
00064 void clear(bool includingInternal);
00065
00066 int currentRevision() const;
00067 void releaseRevision(int revision) const;
00068 void useRevision(int revision = -1);
00069 KTextEditor::Cursor translateFromRevision(const KTextEditor::Cursor& cursor, KTextEditor::SmartCursor::InsertBehavior insertBehavior = KTextEditor::SmartCursor::StayOnInsert) const;
00070 KTextEditor::Range translateFromRevision(const KTextEditor::Range& range, KTextEditor::SmartRange::InsertBehaviors insertBehavior = KTextEditor::SmartRange::ExpandLeft | KTextEditor::SmartRange::ExpandRight) const;
00071
00072 KateSmartCursor* newSmartCursor(const KTextEditor::Cursor& position = KTextEditor::Cursor(), KTextEditor::SmartCursor::InsertBehavior insertBehavior = KTextEditor::SmartCursor::MoveOnInsert, bool internal = true);
00073 void deleteCursors(bool includingInternal);
00074
00075 KateSmartRange* newSmartRange(const KTextEditor::Range& range = KTextEditor::Range(), KTextEditor::SmartRange* parent = 0L, KTextEditor::SmartRange::InsertBehaviors insertBehavior = KTextEditor::SmartRange::DoNotExpand, bool internal = true);
00076 KateSmartRange* newSmartRange(KateSmartCursor* start, KateSmartCursor* end, KTextEditor::SmartRange* parent = 0L, KTextEditor::SmartRange::InsertBehaviors insertBehavior = KTextEditor::SmartRange::DoNotExpand, bool internal = true);
00077 void unbindSmartRange(KTextEditor::SmartRange* range);
00078 void deleteRanges(bool includingInternal);
00079
00080 void rangeGotParent(KateSmartRange* range);
00081 void rangeLostParent(KateSmartRange* range);
00083 void rangeDeleted(KateSmartRange* range);
00084
00085 KateSmartGroup* groupForLine(int line) const;
00086
00087 Q_SIGNALS:
00088 void signalRangeDeleted(KateSmartRange* range);
00089
00090 private Q_SLOTS:
00091 void slotTextChanged(KateEditInfo* edit);
00092 void verifyCorrect() const;
00093
00094 private:
00095 KateSmartRange* feedbackRange(const KateEditInfo& edit, KateSmartRange* range);
00096 int usingRevision() const;
00097
00098 void debugOutput() const;
00099
00100 KateSmartGroup* m_firstGroup;
00101 QSet<KateSmartRange*> m_topRanges;
00102 KateSmartGroup* m_invalidGroup;
00103 bool m_clearing;
00104 QThreadStorage<int*> m_usingRevision;
00105 struct KateTranslationDebugger;
00106 KateTranslationDebugger* m_currentKateTranslationDebugger;
00107 };
00108
00117 class KateSmartGroup
00118 {
00119 public:
00120 KateSmartGroup(int startLine, int endLine, KateSmartGroup* previous, KateSmartGroup* next);
00121
00122 inline int startLine() const { return m_startLine; }
00123 inline int newStartLine() const { return m_newStartLine; }
00124 inline int endLine() const { return m_endLine; }
00125 inline int newEndLine() const { return m_newEndLine; }
00126 inline void setEndLine(int endLine) { m_newEndLine = m_endLine = endLine; }
00127 inline void setNewEndLine(int endLine) { m_newEndLine = endLine; }
00128 inline int length() const { return m_endLine - m_startLine + 1; }
00129 inline bool containsLine(int line) const { return line >= m_newStartLine && line <= m_newEndLine; }
00130
00131 inline KateSmartGroup* previous() const { return m_previous; }
00132 inline void setPrevious(KateSmartGroup* previous) { m_previous = previous; }
00133
00134 inline KateSmartGroup* next() const { return m_next; }
00135 inline void setNext(KateSmartGroup* next) { m_next = next; }
00136
00137 void addCursor(KateSmartCursor* cursor);
00138 void changeCursorFeedback(KateSmartCursor* cursor);
00139 void removeCursor(KateSmartCursor* cursor);
00140
00141 const QSet<KateSmartCursor*>& feedbackCursors() const;
00142
00143 const QSet<KateSmartCursor*>& normalCursors() const;
00144
00145
00151 void joined(KateSmartCursor* cursor);
00152
00158 void leaving(KateSmartCursor* cursor);
00159
00160
00161 void merge();
00162
00163
00164 void translateChanged(const KateEditInfo& edit);
00165 void translateShifted(const KateEditInfo& edit);
00166
00167
00168 void translatedChanged(const KateEditInfo& edit);
00169 void translatedShifted(const KateEditInfo& edit);
00170
00171
00172 void translatedChanged2(const KateEditInfo& edit);
00173
00174 void deleteCursors(bool includingInternal);
00175 void deleteCursorsInternal(QSet<KateSmartCursor*>& set);
00176
00177 void debugOutput() const;
00178
00179 private:
00180 int m_startLine, m_newStartLine, m_endLine, m_newEndLine;
00181 KateSmartGroup* m_next;
00182 KateSmartGroup* m_previous;
00183
00184 QSet<KateSmartCursor*> m_feedbackCursors;
00185 QSet<KateSmartCursor*> m_normalCursors;
00186 };
00187
00188 #endif