Candidate_v1.7.0
stable
|
Last change
on this file since 0ec9f5 was 0ec9f5, checked in by Frederik Heber <frederik.heber@…>, 5 years ago |
|
Added UndoMarkAction.
NOTE: This action is necessary as not all actions are actually recorded
in the history. For example, the UndoAction is an action that is not
pushed into the history deque and also must not as further undos would
then become impossible. There are other actions that just do output
or similar things that do not change the state.
This makes it impossible to undo back to a certain state by blindly
counting actions as one cannot know from the outside whether an action
is stateless or not.
undoing till the set mark.
- TESTS: added regression test case on undo-mark.
|
-
Property mode
set to
100644
|
|
File size:
1.3 KB
|
| Line | |
|---|
| 1 | /*
|
|---|
| 2 | * ActionHistory.hpp
|
|---|
| 3 | *
|
|---|
| 4 | * Created on: Mar 25, 2010
|
|---|
| 5 | * Author: crueger
|
|---|
| 6 | */
|
|---|
| 7 |
|
|---|
| 8 | #ifndef ACTIONHISTORY_HPP_
|
|---|
| 9 | #define ACTIONHISTORY_HPP_
|
|---|
| 10 |
|
|---|
| 11 | // include config.h
|
|---|
| 12 | #ifdef HAVE_CONFIG_H
|
|---|
| 13 | #include <config.h>
|
|---|
| 14 | #endif
|
|---|
| 15 |
|
|---|
| 16 | #include <deque>
|
|---|
| 17 |
|
|---|
| 18 | #include "Actions/Action.hpp"
|
|---|
| 19 | #include "Actions/RedoAction.hpp"
|
|---|
| 20 | #include "Actions/UndoAction.hpp"
|
|---|
| 21 |
|
|---|
| 22 | namespace MoleCuilder {
|
|---|
| 23 |
|
|---|
| 24 | class ActionHistory
|
|---|
| 25 | {
|
|---|
| 26 | struct HistoryElement {
|
|---|
| 27 | HistoryElement(Action *_action, ActionState::ptr _state) :
|
|---|
| 28 | action(_action),
|
|---|
| 29 | state(_state)
|
|---|
| 30 | {}
|
|---|
| 31 | Action *action;
|
|---|
| 32 | ActionState::ptr state;
|
|---|
| 33 | };
|
|---|
| 34 |
|
|---|
| 35 | public:
|
|---|
| 36 | ActionHistory();
|
|---|
| 37 | ~ActionHistory();
|
|---|
| 38 |
|
|---|
| 39 | void undoLast();
|
|---|
| 40 | void redoLast();
|
|---|
| 41 |
|
|---|
| 42 | bool hasUndo();
|
|---|
| 43 | bool hasRedo();
|
|---|
| 44 |
|
|---|
| 45 | void setMark();
|
|---|
| 46 | void unsetMark();
|
|---|
| 47 | void undoTillMark();
|
|---|
| 48 |
|
|---|
| 49 | void addElement(Action*,ActionState::ptr);
|
|---|
| 50 | void clear();
|
|---|
| 51 |
|
|---|
| 52 | private:
|
|---|
| 53 | std::deque<HistoryElement> history;
|
|---|
| 54 | std::deque<HistoryElement> yrotsih;
|
|---|
| 55 |
|
|---|
| 56 | //!> marks a specific state in the history to allow undoing directly till that
|
|---|
| 57 | HistoryElement * mark;
|
|---|
| 58 |
|
|---|
| 59 | public:
|
|---|
| 60 | // when constructing the actions we need the Actionregistry Singleton
|
|---|
| 61 | // Singletons need static variables to work, but we cannot access statics
|
|---|
| 62 | // inside a static initialization, so we have this init function that
|
|---|
| 63 | // needs to be called at a non-static point at the start of the program
|
|---|
| 64 | // static void init();
|
|---|
| 65 | };
|
|---|
| 66 |
|
|---|
| 67 | }
|
|---|
| 68 |
|
|---|
| 69 | #endif /* ACTIONHISTORY_HPP_ */
|
|---|
Note:
See
TracBrowser
for help on using the repository browser.