Version 5 (modified by peko, 16 years ago) (diff) |
---|
Analysis
Overview
This task is related to the UndoManager. The change manager is like the undo-manager, but allows skipping, unskipping etc. Currently we have an UndoManger which will later become a change manager with the additional features described bellow.
skip change, unskip change, undo change,
Task requirements
- review code in UndoManager that represents the current undo manager.
- besides undo change and redo change the ChangeManager should also be capable of doing the following:
- skip a change - the change will be skipped and the next in turn will be available if such exists. Unmanaged changes should all be skipped by default (see PRO_CHANGE_PRIMITIVES_R0). Other changes may be skipped depending on certain situations.
- unskip a change - will provide the opportunity to revert the skipping of a change. This should be possible only if a skip of the change had been done.
- undo/redo - the undo/redo mechanism should behave in a generally accepted manner as in most applications nowadays.
- Important:
- skip/unskip and undo/redo are all going to be defined as changes.
- undo/redo should be possible to be skipped and unskipped.
- skip/unskip should be possible to be undone and redone.
- Provide unit tests for at least 5 scenarios.
Task result
- review of current source code.
- more source code.
- unit tests
Implementation idea
- review current code.
- add the new features.
- write unit tests.
Example scenarios - every number represents a change and its position in the list:
skip: 1. a = 5 | 5 2. a = 6 | 6 3. a = 7 | 7 4. skip 2 | 7 because a new change has occurred after 2. skip/undo: 1. b = 10 | 10 2. b = 5 | 5 3. skip 2 | 10 is the last change that is to be undone. 4. undo | 5 because the skip is undone. 5. skip 4 | 10 because the last undo is skipped as a change. more complicated: 1. c = 5 | 5 2. c = 7 | 7 3. c = 10 | 10 4. c = 12 | 12 5. undo | 10 this is the current value of c after the undo 6. skip 3 | 7 since 10 was last value after the undo which is the third change. 7. undo | 10 again 8. skip 7 | 7 after skipping change 7 we should return to value 7. 9. redo | 7 because this should not be possible since the corresponding undo is already missing so nothing changes. 10. unskip 7 | 10 since the value after the undo should had been 7. 11. skip 10 | 7 the previous value is returned. 12. skip 11 | 10 the previous is unskip 10 so the value remains exactly 10. 13. skip 12 | 7 again 14. unskip 11| 10 15. skip 1 | 10 15. skip 2 | 10 15. skip 3 | 10 15. skip 4 | 10 at this point we cannot revert the initializing of c. Now what ?!?
Notes:
- skipping the previous change acts like a undo.
- unskipping the previous change acts like a redo.
Related
PRO_CHANGE_PRIMITIVES_R0
PRO_CHANGE_TRANSACTION_SAFETY_R0
PRO_CHANGE_COMPOSING_R0
PRO_CHANGE_MANAGER_R0