aboutsummaryrefslogtreecommitdiffhomepage
path: root/externals/qhexedit/commands.h
diff options
context:
space:
mode:
Diffstat (limited to 'externals/qhexedit/commands.h')
-rw-r--r--externals/qhexedit/commands.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/externals/qhexedit/commands.h b/externals/qhexedit/commands.h
new file mode 100644
index 00000000..9931b3fb
--- /dev/null
+++ b/externals/qhexedit/commands.h
@@ -0,0 +1,70 @@
+#ifndef COMMANDS_H
+#define COMMANDS_H
+
+/** \cond docNever */
+
+#include <QUndoCommand>
+
+#include "xbytearray.h"
+
+/*! CharCommand is a class to prived undo/redo functionality in QHexEdit.
+A QUndoCommand represents a single editing action on a document. CharCommand
+is responsable for manipulations on single chars. It can insert. replace and
+remove characters. A manipulation stores allways to actions
+1. redo (or do) action
+2. undo action.
+
+CharCommand also supports command compression via mergeWidht(). This allows
+the user to execute a undo command contation e.g. 3 steps in a single command.
+If you for example insert a new byt "34" this means for the editor doing 3
+steps: insert a "00", replace it with "03" and the replace it with "34". These
+3 steps are combined into a single step, insert a "34".
+*/
+class CharCommand : public QUndoCommand
+{
+public:
+ enum { Id = 1234 };
+ enum Cmd {insert, remove, replace};
+
+ CharCommand(XByteArray * xData, Cmd cmd, int charPos, char newChar,
+ QUndoCommand *parent=0);
+
+ void undo();
+ void redo();
+ bool mergeWith(const QUndoCommand *command);
+ int id() const { return Id; }
+
+private:
+ XByteArray * _xData;
+ int _charPos;
+ bool _wasChanged;
+ char _newChar;
+ char _oldChar;
+ Cmd _cmd;
+};
+
+/*! ArrayCommand provides undo/redo functionality for handling binary strings. It
+can undo/redo insert, replace and remove binary strins (QByteArrays).
+*/
+class ArrayCommand : public QUndoCommand
+{
+public:
+ enum Cmd {insert, remove, replace};
+ ArrayCommand(XByteArray * xData, Cmd cmd, int baPos, QByteArray newBa=QByteArray(), int len=0,
+ QUndoCommand *parent=0);
+ void undo();
+ void redo();
+
+private:
+ Cmd _cmd;
+ XByteArray * _xData;
+ int _baPos;
+ int _len;
+ QByteArray _wasChanged;
+ QByteArray _newBa;
+ QByteArray _oldBa;
+};
+
+/** \endcond docNever */
+
+#endif // COMMANDS_H