| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- #include "commands.h"
- CharCommand::CharCommand(XByteArray * xData, Cmd cmd, int charPos, char newChar, QUndoCommand *parent)
- : QUndoCommand(parent)
- {
- _xData = xData;
- _charPos = charPos;
- _newChar = newChar;
- _cmd = cmd;
- }
- bool CharCommand::mergeWith(const QUndoCommand *command)
- {
- const CharCommand *nextCommand = static_cast<const CharCommand *>(command);
- bool result = false;
- if (_cmd != remove)
- {
- if (nextCommand->_cmd == replace)
- if (nextCommand->_charPos == _charPos)
- {
- _newChar = nextCommand->_newChar;
- result = true;
- }
- }
- return result;
- }
- void CharCommand::undo()
- {
- switch (_cmd)
- {
- case insert:
- _xData->remove(_charPos, 1);
- break;
- case replace:
- _xData->replace(_charPos, _oldChar);
- _xData->setDataChanged(_charPos, _wasChanged);
- break;
- case remove:
- _xData->insert(_charPos, _oldChar);
- _xData->setDataChanged(_charPos, _wasChanged);
- break;
- }
- }
- void CharCommand::redo()
- {
- switch (_cmd)
- {
- case insert:
- _xData->insert(_charPos, _newChar);
- break;
- case replace:
- _oldChar = _xData->data()[_charPos];
- _wasChanged = _xData->dataChanged(_charPos);
- _xData->replace(_charPos, _newChar);
- break;
- case remove:
- _oldChar = _xData->data()[_charPos];
- _wasChanged = _xData->dataChanged(_charPos);
- _xData->remove(_charPos, 1);
- break;
- }
- }
- ArrayCommand::ArrayCommand(XByteArray * xData, Cmd cmd, int baPos, QByteArray newBa, int len, QUndoCommand *parent)
- : QUndoCommand(parent)
- {
- _cmd = cmd;
- _xData = xData;
- _baPos = baPos;
- _newBa = newBa;
- _len = len;
- }
- void ArrayCommand::undo()
- {
- switch (_cmd)
- {
- case insert:
- _xData->remove(_baPos, _newBa.length());
- break;
- case replace:
- _xData->replace(_baPos, _oldBa);
- _xData->setDataChanged(_baPos, _wasChanged);
- break;
- case remove:
- _xData->insert(_baPos, _oldBa);
- _xData->setDataChanged(_baPos, _wasChanged);
- break;
- }
- }
- void ArrayCommand::redo()
- {
- switch (_cmd)
- {
- case insert:
- _xData->insert(_baPos, _newBa);
- break;
- case replace:
- _oldBa = _xData->data().mid(_baPos, _len);
- _wasChanged = _xData->dataChanged(_baPos, _len);
- _xData->replace(_baPos, _newBa);
- break;
- case remove:
- _oldBa = _xData->data().mid(_baPos, _len);
- _wasChanged = _xData->dataChanged(_baPos, _len);
- _xData->remove(_baPos, _len);
- break;
- }
- }
|