• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • applications API Reference
  • KDE Home
  • Contact Us
 

Kate

  • kde-4.14
  • applications
  • kate
  • part
  • undo
kateundo.h
Go to the documentation of this file.
1 /* This file is part of the KDE libraries
2  Copyright (C) 2011 Dominik Haumann <dhaumann@kde.org>
3  Copyright (C) 2009-2010 Bernhard Beschow <bbeschow@cs.tu-berlin.de>
4  Copyright (C) 2002 John Firebaugh <jfirebaugh@kde.org>
5  Copyright (C) 2001 Christoph Cullmann <cullmann@kde.org>
6  Copyright (C) 2001 Joseph Wenninger <jowenn@kde.org>
7 
8  This library is free software; you can redistribute it and/or
9  modify it under the terms of the GNU Library General Public
10  License version 2 as published by the Free Software Foundation.
11 
12  This library is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  Library General Public License for more details.
16 
17  You should have received a copy of the GNU Library General Public License
18  along with this library; see the file COPYING.LIB. If not, write to
19  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  Boston, MA 02110-1301, USA.
21 */
22 
23 #ifndef kate_undo_h
24 #define kate_undo_h
25 
26 #include <QtCore/QList>
27 
28 #include <ktexteditor/range.h>
29 #include <QtCore/QBitArray>
30 
31 class KateUndoManager;
32 class KateDocument;
33 
34 namespace KTextEditor {
35  class View;
36 }
37 
41 class KateUndo
42 {
43  public:
48  KateUndo (KateDocument *document);
49 
53  virtual ~KateUndo();
54 
55  public:
59  enum UndoType
60  {
61  editInsertText,
62  editRemoveText,
63  editWrapLine,
64  editUnWrapLine,
65  editInsertLine,
66  editRemoveLine,
67  editMarkLineAutoWrapped,
68  editInvalid
69  };
70 
71  public:
77  virtual bool isEmpty() const;
78 
85  virtual bool mergeWith(const KateUndo* undo);
86 
90  virtual void undo() = 0;
91 
95  virtual void redo() = 0;
96 
101  virtual KateUndo::UndoType type() const = 0;
102 
103  protected:
108  inline KateDocument *document() { return m_document; }
109 
110  private:
114  KateDocument *m_document;
115 
116  //
117  // Line modification system
118  //
119  public:
120  enum ModificationFlag {
121  UndoLine1Modified = 1,
122  UndoLine2Modified = 2,
123  UndoLine1Saved = 4,
124  UndoLine2Saved = 8,
125  RedoLine1Modified = 16,
126  RedoLine2Modified = 32,
127  RedoLine1Saved = 64,
128  RedoLine2Saved = 128
129  };
130 
131  inline void setFlag(ModificationFlag flag) {
132  m_lineModFlags |= flag;
133  }
134 
135  inline void unsetFlag(ModificationFlag flag) {
136  m_lineModFlags &= (~flag);
137  }
138 
139  inline bool isFlagSet(ModificationFlag flag) const {
140  return m_lineModFlags & flag;
141  }
142 
143  virtual void updateUndoSavedOnDiskFlag(QBitArray & lines) { Q_UNUSED(lines) }
144  virtual void updateRedoSavedOnDiskFlag(QBitArray & lines) { Q_UNUSED(lines) }
145 
146  private:
147  uchar m_lineModFlags;
148 };
149 
150 class KateEditInsertTextUndo : public KateUndo
151 {
152  public:
153  KateEditInsertTextUndo (KateDocument *document, int line, int col, const QString &text);
154 
158  bool isEmpty() const;
159 
163  void undo();
164 
168  void redo();
169 
173  bool mergeWith (const KateUndo *undo);
174 
178  KateUndo::UndoType type() const { return KateUndo::editInsertText; }
179 
180  protected:
181  inline int len() const { return m_text.length(); }
182  inline int line() const { return m_line; }
183 
184  private:
185  const int m_line;
186  const int m_col;
187  QString m_text;
188 };
189 
190 class KateEditRemoveTextUndo : public KateUndo
191 {
192  public:
193  KateEditRemoveTextUndo (KateDocument *document, int line, int col, const QString &text);
194 
198  bool isEmpty() const;
199 
203  void undo();
204 
208  void redo();
209 
213  bool mergeWith (const KateUndo *undo);
214 
218  KateUndo::UndoType type() const { return KateUndo::editRemoveText; }
219 
220  protected:
221  inline int len() const { return m_text.length(); }
222  inline int line() const { return m_line; }
223 
224  private:
225  const int m_line;
226  int m_col;
227  QString m_text;
228 };
229 
230 class KateEditMarkLineAutoWrappedUndo : public KateUndo
231 {
232  public:
233  KateEditMarkLineAutoWrappedUndo (KateDocument *document, int line, bool autowrapped)
234  : KateUndo (document)
235  , m_line (line)
236  , m_autowrapped (autowrapped)
237  {}
238 
242  void undo();
243 
247  void redo();
248 
252  KateUndo::UndoType type() const { return KateUndo::editMarkLineAutoWrapped; }
253 
254  private:
255  const int m_line;
256  const bool m_autowrapped;
257 };
258 
259 class KateEditWrapLineUndo : public KateUndo
260 {
261  public:
262  KateEditWrapLineUndo (KateDocument *document, int line, int col, int len, bool newLine);
263 
267  void undo();
268 
272  void redo();
273 
277  KateUndo::UndoType type() const { return KateUndo::editWrapLine; }
278 
279  protected:
280  inline int line() const { return m_line; }
281 
282  private:
283  const int m_line;
284  const int m_col;
285  const int m_len;
286  const bool m_newLine;
287 };
288 
289 class KateEditUnWrapLineUndo : public KateUndo
290 {
291  public:
292  KateEditUnWrapLineUndo (KateDocument *document, int line, int col, int len, bool removeLine);
293 
297  void undo();
298 
302  void redo();
303 
307  KateUndo::UndoType type() const { return KateUndo::editUnWrapLine; }
308 
309  protected:
310  inline int line() const { return m_line; }
311 
312  private:
313  const int m_line;
314  const int m_col;
315  const int m_len;
316  const bool m_removeLine;
317 };
318 
319 class KateEditInsertLineUndo : public KateUndo
320 {
321  public:
322  KateEditInsertLineUndo (KateDocument *document, int line, const QString &text);
323 
327  void undo();
328 
332  void redo();
333 
337  KateUndo::UndoType type() const { return KateUndo::editInsertLine; }
338 
339  protected:
340  inline int line() const { return m_line; }
341 
342  private:
343  const int m_line;
344  const QString m_text;
345 };
346 
347 class KateEditRemoveLineUndo : public KateUndo
348 {
349  public:
350  KateEditRemoveLineUndo (KateDocument *document, int line, const QString &text);
351 
355  void undo();
356 
360  void redo();
361 
365  KateUndo::UndoType type() const { return KateUndo::editRemoveLine; }
366 
367  protected:
368  inline int line() const { return m_line; }
369 
370  private:
371  const int m_line;
372  const QString m_text;
373 };
374 
378 class KateUndoGroup
379 {
380  public:
385  explicit KateUndoGroup (KateUndoManager *manager, const KTextEditor::Cursor &cursorPosition, const KTextEditor::Range &selectionRange);
386 
390  ~KateUndoGroup();
391 
392  public:
396  void undo(KTextEditor::View *view);
397 
401  void redo(KTextEditor::View *view);
402 
403  void editEnd(const KTextEditor::Cursor &cursorPosition, const KTextEditor::Range selectionRange);
404 
411  bool merge (KateUndoGroup* newGroup,bool complex);
412 
416  void safePoint (bool safePoint=true);
417 
421  bool isEmpty() const { return m_items.isEmpty(); }
422 
426  void flagSavedAsModified();
427 
428  void markUndoAsSaved(QBitArray & lines);
429  void markRedoAsSaved(QBitArray & lines);
430 
434  inline void setUndoCursor(const KTextEditor::Cursor & cursor)
435  { m_undoCursor = cursor; }
436 
440  inline void setRedoCursor(const KTextEditor::Cursor & cursor)
441  { m_redoCursor = cursor; }
442 
443  inline const KTextEditor::Cursor & redoCursor() const
444  { return m_redoCursor; }
445 
446  private:
447  KTextEditor::Document *document();
448 
453  KateUndo::UndoType singleType() const;
454 
460  bool isOnlyType(KateUndo::UndoType type) const;
461 
462  public:
467  void addItem (KateUndo *u);
468 
469  private:
470  KateUndoManager *const m_manager;
471 
475  QList<KateUndo*> m_items;
476 
480  bool m_safePoint;
481 
485  const KTextEditor::Range m_undoSelection;
486 
490  KTextEditor::Range m_redoSelection;
491 
495  KTextEditor::Cursor m_undoCursor;
496 
500  KTextEditor::Cursor m_redoCursor;
501 };
502 
503 #endif
504 
505 // kate: space-indent on; indent-width 2; replace-tabs on;
KateUndo::mergeWith
virtual bool mergeWith(const KateUndo *undo)
merge an undo item Saves a bit of memory and potentially many calls when undo/redoing.
Definition: kateundo.cpp:105
KateUndo::UndoLine1Modified
Definition: kateundo.h:121
KateEditRemoveTextUndo::isEmpty
bool isEmpty() const
Check whether the item is empty.
Definition: kateundo.cpp:100
KateUndoGroup::addItem
void addItem(KateUndo *u)
add an undo item
Definition: kateundo.cpp:305
KateUndoGroup::setUndoCursor
void setUndoCursor(const KTextEditor::Cursor &cursor)
Set the undo cursor to cursor.
Definition: kateundo.h:434
KateUndo::UndoLine2Saved
Definition: kateundo.h:124
KateUndo::editInsertText
Definition: kateundo.h:61
KateUndo::editRemoveLine
Definition: kateundo.h:66
KateEditWrapLineUndo::redo
void redo()
redo this item
Definition: kateundo.cpp:210
KateUndo::UndoType
UndoType
Types for undo items.
Definition: kateundo.h:59
KateUndo::RedoLine2Modified
Definition: kateundo.h:126
KateEditMarkLineAutoWrappedUndo::undo
void undo()
undo this item
Definition: kateundo.cpp:182
KateUndoGroup::merge
bool merge(KateUndoGroup *newGroup, bool complex)
merge this group with an other
Definition: kateundo.cpp:315
KateUndo::type
virtual KateUndo::UndoType type() const =0
type of item
KateEditRemoveTextUndo
Definition: kateundo.h:190
KateUndo::editUnWrapLine
Definition: kateundo.h:64
KateUndoGroup::isEmpty
bool isEmpty() const
is this undogroup empty?
Definition: kateundo.h:421
KateUndo::isEmpty
virtual bool isEmpty() const
Check whether the item is empty.
Definition: kateundo.cpp:90
KateEditRemoveTextUndo::mergeWith
bool mergeWith(const KateUndo *undo)
Definition: kateundo.cpp:124
KateEditInsertTextUndo
Definition: kateundo.h:150
KateUndo::RedoLine1Modified
Definition: kateundo.h:125
KateUndoManager
KateUndoManager implements a document's history.
Definition: kateundomanager.h:45
KateUndo::undo
virtual void undo()=0
undo this item
KateUndo::RedoLine2Saved
Definition: kateundo.h:128
KateEditUnWrapLineUndo::redo
void redo()
redo this item
Definition: kateundo.cpp:203
KateUndo::editRemoveText
Definition: kateundo.h:62
KateEditRemoveTextUndo::redo
void redo()
redo this item
Definition: kateundo.cpp:189
KateEditUnWrapLineUndo
Definition: kateundo.h:289
KateUndoGroup::undo
void undo(KTextEditor::View *view)
Undo the contained undo items.
Definition: kateundo.cpp:253
KateUndoGroup::markRedoAsSaved
void markRedoAsSaved(QBitArray &lines)
Definition: kateundo.cpp:378
KateEditInsertLineUndo::type
KateUndo::UndoType type() const
type of item
Definition: kateundo.h:337
KateEditInsertTextUndo::undo
void undo()
undo this item
Definition: kateundo.cpp:140
KateUndo::document
KateDocument * document()
Return the document the undo item belongs to.
Definition: kateundo.h:108
KateUndoGroup
Class to manage a group of undo items.
Definition: kateundo.h:378
KateUndoGroup::setRedoCursor
void setRedoCursor(const KTextEditor::Cursor &cursor)
Set the redo cursor to cursor.
Definition: kateundo.h:440
KateEditRemoveTextUndo::undo
void undo()
undo this item
Definition: kateundo.cpp:147
KateEditWrapLineUndo::line
int line() const
Definition: kateundo.h:280
KateUndo::UndoLine2Modified
Definition: kateundo.h:122
KateEditInsertTextUndo::KateEditInsertTextUndo
KateEditInsertTextUndo(KateDocument *document, int line, int col, const QString &text)
Definition: kateundo.cpp:41
KateEditInsertTextUndo::line
int line() const
Definition: kateundo.h:182
KateUndo::UndoLine1Saved
Definition: kateundo.h:123
QList::isEmpty
bool isEmpty() const
KateUndoGroup::redoCursor
const KTextEditor::Cursor & redoCursor() const
Definition: kateundo.h:443
KateEditInsertTextUndo::len
int len() const
Definition: kateundo.h:181
KateUndo::editMarkLineAutoWrapped
Definition: kateundo.h:67
KateUndo::editInvalid
Definition: kateundo.h:68
KateUndoGroup::markUndoAsSaved
void markUndoAsSaved(QBitArray &lines)
Definition: kateundo.cpp:370
KateEditInsertLineUndo::KateEditInsertLineUndo
KateEditInsertLineUndo(KateDocument *document, int line, const QString &text)
Definition: kateundo.cpp:75
KateUndo::setFlag
void setFlag(ModificationFlag flag)
Definition: kateundo.h:131
KateEditUnWrapLineUndo::undo
void undo()
undo this item
Definition: kateundo.cpp:161
KateEditWrapLineUndo::type
KateUndo::UndoType type() const
type of item
Definition: kateundo.h:277
KateEditWrapLineUndo::undo
void undo()
undo this item
Definition: kateundo.cpp:154
QString
KateUndo::updateRedoSavedOnDiskFlag
virtual void updateRedoSavedOnDiskFlag(QBitArray &lines)
Definition: kateundo.h:144
QList< KateUndo * >
QBitArray
KateUndo::unsetFlag
void unsetFlag(ModificationFlag flag)
Definition: kateundo.h:135
KateEditInsertLineUndo::undo
void undo()
undo this item
Definition: kateundo.cpp:168
KateUndo::redo
virtual void redo()=0
redo this item
KateEditRemoveLineUndo::type
KateUndo::UndoType type() const
type of item
Definition: kateundo.h:365
KateUndo::editWrapLine
Definition: kateundo.h:63
KateEditRemoveLineUndo::undo
void undo()
undo this item
Definition: kateundo.cpp:175
KateEditWrapLineUndo
Definition: kateundo.h:259
KateEditUnWrapLineUndo::KateEditUnWrapLineUndo
KateEditUnWrapLineUndo(KateDocument *document, int line, int col, int len, bool removeLine)
Definition: kateundo.cpp:66
KateEditRemoveTextUndo::KateEditRemoveTextUndo
KateEditRemoveTextUndo(KateDocument *document, int line, int col, const QString &text)
Definition: kateundo.cpp:49
KateDocument
Definition: katedocument.h:74
KateEditRemoveLineUndo::redo
void redo()
redo this item
Definition: kateundo.cpp:217
KateUndoGroup::editEnd
void editEnd(const KTextEditor::Cursor &cursorPosition, const KTextEditor::Range selectionRange)
Definition: kateundo.cpp:299
KateEditWrapLineUndo::KateEditWrapLineUndo
KateEditWrapLineUndo(KateDocument *document, int line, int col, int len, bool newLine)
Definition: kateundo.cpp:57
KateUndoGroup::flagSavedAsModified
void flagSavedAsModified()
Change all LineSaved flags to LineModified of the line modification system.
Definition: kateundo.cpp:345
KateEditInsertTextUndo::redo
void redo()
redo this item
Definition: kateundo.cpp:196
KateEditInsertLineUndo::redo
void redo()
redo this item
Definition: kateundo.cpp:224
KateUndo::KateUndo
KateUndo(KateDocument *document)
Constructor.
Definition: kateundo.cpp:31
KateEditInsertLineUndo::line
int line() const
Definition: kateundo.h:340
KateUndoGroup::safePoint
void safePoint(bool safePoint=true)
set group as as savepoint.
Definition: kateundo.cpp:340
KateUndo::RedoLine1Saved
Definition: kateundo.h:127
KateEditRemoveTextUndo::line
int line() const
Definition: kateundo.h:222
KateEditRemoveTextUndo::len
int len() const
Definition: kateundo.h:221
KateUndo::editInsertLine
Definition: kateundo.h:65
KateUndo::updateUndoSavedOnDiskFlag
virtual void updateUndoSavedOnDiskFlag(QBitArray &lines)
Definition: kateundo.h:143
KateUndoGroup::~KateUndoGroup
~KateUndoGroup()
Destructor.
Definition: kateundo.cpp:248
KateEditMarkLineAutoWrappedUndo::redo
void redo()
redo this item
Definition: kateundo.cpp:231
QString::length
int length() const
KateUndo::isFlagSet
bool isFlagSet(ModificationFlag flag) const
Definition: kateundo.h:139
KateUndo::~KateUndo
virtual ~KateUndo()
Destructor.
Definition: kateundo.cpp:37
KateEditRemoveLineUndo::KateEditRemoveLineUndo
KateEditRemoveLineUndo(KateDocument *document, int line, const QString &text)
Definition: kateundo.cpp:82
KateUndoGroup::redo
void redo(KTextEditor::View *view)
Redo the contained undo items.
Definition: kateundo.cpp:276
KateEditInsertTextUndo::isEmpty
bool isEmpty() const
Check whether the item is empty.
Definition: kateundo.cpp:95
KateEditInsertTextUndo::type
KateUndo::UndoType type() const
type of item
Definition: kateundo.h:178
KateEditMarkLineAutoWrappedUndo::type
KateUndo::UndoType type() const
type of item
Definition: kateundo.h:252
KateEditMarkLineAutoWrappedUndo
Definition: kateundo.h:230
KateUndo
Base class for Kate undo commands.
Definition: kateundo.h:41
KateUndo::ModificationFlag
ModificationFlag
Definition: kateundo.h:120
KateEditRemoveLineUndo
Definition: kateundo.h:347
KateEditMarkLineAutoWrappedUndo::KateEditMarkLineAutoWrappedUndo
KateEditMarkLineAutoWrappedUndo(KateDocument *document, int line, bool autowrapped)
Definition: kateundo.h:233
KateEditUnWrapLineUndo::line
int line() const
Definition: kateundo.h:310
KateEditUnWrapLineUndo::type
KateUndo::UndoType type() const
type of item
Definition: kateundo.h:307
KateUndoGroup::KateUndoGroup
KateUndoGroup(KateUndoManager *manager, const KTextEditor::Cursor &cursorPosition, const KTextEditor::Range &selectionRange)
Constructor.
Definition: kateundo.cpp:238
KateEditInsertTextUndo::mergeWith
bool mergeWith(const KateUndo *undo)
Definition: kateundo.cpp:110
KateEditRemoveLineUndo::line
int line() const
Definition: kateundo.h:368
KateEditInsertLineUndo
Definition: kateundo.h:319
KateEditRemoveTextUndo::type
KateUndo::UndoType type() const
type of item
Definition: kateundo.h:218
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Sat May 9 2020 03:56:58 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

Kate

Skip menu "Kate"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

applications API Reference

Skip menu "applications API Reference"
  •   kate
  •       kate
  •   KTextEditor
  •   Kate
  • Konsole

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal