| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #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
|