forked from eden-emu/eden
		
	
		
			
				
	
	
		
			70 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #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
 | 
