source: src/Actions/ActionHistory.hpp@ 0ec9f5

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
22namespace MoleCuilder {
23
24class 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
35public:
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
52private:
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
59public:
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.