QCodeEdit  2.2
qdocumentcommand.h
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** Copyright (C) 2006-2009 fullmetalcoder <fullmetalcoder@hotmail.fr>
4 **
5 ** This file is part of the Edyuk project <http://edyuk.org>
6 **
7 ** This file may be used under the terms of the GNU General Public License
8 ** version 3 as published by the Free Software Foundation and appearing in the
9 ** file GPL.txt included in the packaging of this file.
10 **
11 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13 **
14 ****************************************************************************/
15 
16 #ifndef _QDOCUMENT_COMMAND_H_
17 #define _QDOCUMENT_COMMAND_H_
18 
19 #include "qce-config.h"
20 
26 #include <QUndoCommand>
27 
28 #include "qdocument.h"
29 
30 class QDocumentLine;
33 
35 {
36  public:
37  enum Command
38  {
39  None,
40  Insert,
41  Erase,
42  Replace,
43  Custom
44  };
45 
47  {
48  QString begin, end;
49  int lineNumber, startOffset, endOffset;
51  };
52 
53  QDocumentCommand(Command c, QDocument *d, QDocumentCommand *p = 0);
54  virtual ~QDocumentCommand();
55 
56  virtual int id() const;
57 
58  virtual bool mergeWith(const QUndoCommand *command);
59 
60  virtual void redo();
61  virtual void undo();
62 
63  bool isSilent() const;
64  void setSilent(bool y);
65 
66  bool keepAnchor() const;
67  void setKeepAnchor(bool y);
68 
69  void setTargetCursor(QDocumentCursorHandle *h);
70 
71  void setRedoOffset(int off);
72  void setUndoOffset(int off);
73 
74  static bool isAutoUpdated(const QDocumentCursorHandle *h);
75  static void enableAutoUpdate(QDocumentCursorHandle *h);
76  static void disableAutoUpdate(QDocumentCursorHandle *h);
77  static void discardHandlesFromDocument(QDocument *d);
78 
79  protected:
80  bool m_state, m_first;
81  QDocument *m_doc;
82  int m_redoOffset, m_undoOffset;
83 
84  void markRedone(QDocumentLineHandle *h, bool firstTime);
85  void markUndone(QDocumentLineHandle *h);
86 
87  void updateTarget(int l, int offset);
88 
89  void insertText(int line, int pos, const QString& s);
90  void removeText(int line, int pos, int length);
91 
92  void insertLines(int after, const QList<QDocumentLineHandle*>& l);
93  void removeLines(int after, int n);
94 
95  void updateCursorsOnInsertion(int line, int column, int prefixLength, int numLines, int suffixLength);
96  void updateCursorsOnDeletion(int line, int column, int prefixLength, int numLines, int suffixLength);
97 
98  private:
99  bool m_silent;
100  bool m_keepAnchor;
101  Command m_command;
102  QDocumentCursorHandle *m_cursor;
103 
104  static QList<QDocumentCursorHandle*> m_autoUpdated;
105 };
106 
107 Q_DECLARE_TYPEINFO(QDocumentCommand::TextCommandData, Q_MOVABLE_TYPE);
108 
110 {
111  public:
112  QDocumentInsertCommand( int l, int offset,
113  const QString& text,
114  QDocument *doc,
115  QDocumentCommand *p = 0);
116 
117  virtual ~QDocumentInsertCommand();
118 
119  virtual bool mergeWith(const QUndoCommand *command);
120 
121  virtual void redo();
122  virtual void undo();
123 
124  private:
125  TextCommandData m_data;
126 };
127 
129 {
130  public:
131  QDocumentEraseCommand( int bl, int bo,
132  int el, int eo,
133  QDocument *doc,
134  QDocumentCommand *p = 0);
135 
136  virtual ~QDocumentEraseCommand();
137 
138  virtual bool mergeWith(const QUndoCommand *command);
139 
140  virtual void redo();
141  virtual void undo();
142 
143  private:
144  TextCommandData m_data;
145 };
146 
148 {
149  public:
151  virtual ~QDocumentCommandBlock();
152 
153  virtual void redo();
154  virtual void undo();
155 
156  void setWeakLock(bool l);
157  bool isWeakLocked() const;
158 
159  virtual void addCommand(QDocumentCommand *c);
160  virtual void removeCommand(QDocumentCommand *c);
161 
162  private:
163  bool m_weakLocked;
164  QList<QDocumentCommand*> m_commands;
165 };
166 
167 #endif
#define QCE_EXPORT
Macro needed for cross-platform shared libraries creation.
Definition: qce-config.h:40
Utility file for shared library creation.
A specialized command to insert text.
Definition: qdocumentcommand.h:109
A class storing a document.
Definition: qdocument.h:62
Definition: qdocumentcursor_p.h:45
Definition: qdocumentcommand.h:46
The base class for document editing command.
Definition: qdocumentcommand.h:34
A meta command used for command grouping.
Definition: qdocumentcommand.h:147
virtual void undo()
Undo the command.
Definition: qdocumentcommand.cpp:90
Private implementation of a document line.
Definition: qdocumentline_p.h:55
virtual bool mergeWith(const QUndoCommand *command)
Attempts to merge with another command.
Definition: qdocumentcommand.cpp:74
virtual void redo()
Redo the command.
Definition: qdocumentcommand.cpp:82
A reference to line objects.
Definition: qdocumentline.h:63
Definition of the QDocument class.
A specialized command to erase text.
Definition: qdocumentcommand.h:128