Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Actions/Action.hpp

    rbfce50 rf9352d  
    1010
    1111#include <string>
     12#include <boost/shared_ptr.hpp>
     13
     14// forward declaration
     15
     16class ActionState;
     17class ActionSequence;
    1218
    1319/**
     
    2127class Action
    2228{
    23 protected:
     29friend class ActionSequence;
    2430public:
     31
     32  typedef boost::shared_ptr<ActionState> state_ptr;
     33
    2534  Action(std::string _name,bool _doRegister=true);
    2635  virtual ~Action();
    2736
    28   virtual void call()=0;
    29   virtual void undo()=0;
     37  // this method only handles the infrastructure
     38  // actuall action is passed on to a private virtual
     39  void call();
     40  state_ptr undo(state_ptr);
     41  state_ptr redo(state_ptr);
     42
    3043  virtual bool canUndo()=0;
    31   //virtual bool shouldUndo()=0;
     44  virtual bool shouldUndo()=0;
     45
     46  virtual bool isActive();
    3247
    3348  virtual const std::string getName();
    3449
     50protected:
     51  static state_ptr success;
     52  static state_ptr failure;
     53
    3554private:
     55  virtual state_ptr performCall()=0;
     56  virtual state_ptr performUndo(state_ptr)=0;
     57  virtual state_ptr performRedo(state_ptr)=0;
     58
    3659  std::string name;
    3760};
    3861
     62/**
     63 * This class can be used by actions to save the state.
     64 *
     65 * It is implementing a memento pattern. The base class is completely empty,
     66 * since no general state internals can be given. The Action performing
     67 * the Undo should downcast to the apropriate type.
     68 */
     69class ActionState{
     70public:
     71  ActionState(){}
     72  virtual ~ActionState(){}
     73};
     74
    3975#endif /* ACTION_H_ */
Note: See TracChangeset for help on using the changeset viewer.