Candidate_v1.7.0
        stable
      
      
        
          | Last change
 on this file since 0fbea3 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 recordedin 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.