1 /*! 2 @file 3 @author Albert Semenov 4 @date 08/2010 5 */ 6 7 #ifndef _89360b4d_f172_4c02_9008_673f376bdee7_ 8 #define _89360b4d_f172_4c02_9008_673f376bdee7_ 9 10 #include <MyGUI.h> 11 #include "StateController.h" 12 13 namespace tools 14 { 15 16 class MYGUI_EXPORT_DLL StateManager : 17 public MyGUI::Singleton<StateManager> 18 { 19 public: 20 void initialise(); 21 void shutdown(); 22 23 void pushState(StateController* _state); 24 void pushState(const std::string& _stateName); 25 void popState(); 26 27 bool getStateActivate(StateController* _state); 28 StateController* getCurentState(); 29 void rollbackToState(StateController* _state); 30 31 void stateEvent(StateController* _state, const std::string& _event); 32 void stateEvent(const std::string& _stateName, const std::string& _event); 33 34 void registerState(StateController* _state, const std::string& _name); 35 void registerEventState(const std::string& _stateName, const std::string& _eventName, const std::string& _toState); 36 37 private: 38 std::string getNameState(StateController* _state); 39 std::string getEventToState(const std::string& _currentStateName, const std::string& _eventName); 40 StateController* getStateByName(const std::string& _stateName); 41 42 private: 43 typedef std::vector<StateController*> VectorStateController; 44 VectorStateController mStates; 45 46 typedef std::map<std::string, StateController*> MapStateController; 47 MapStateController mStateName; 48 49 typedef std::pair< std::string, std::pair<std::string, std::string> > PairPairString; 50 typedef std::vector<PairPairString> VectorPairPairString; 51 VectorPairPairString mLinks; 52 }; 53 54 } 55 56 #endif 57