commands.h
70 lines
| 1.9 KiB
| text/x-c
|
CLexer
Jeandet Alexis
|
r0 | #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 | ||||