Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef STATEMACHINEFACTORY_H_HEADER_INCLUDED_C19AEDDD
00020 #define STATEMACHINEFACTORY_H_HEADER_INCLUDED_C19AEDDD
00021
00022 #include "mitkCommon.h"
00023 #include "mitkState.h"
00024 #include "mitkTransition.h"
00025 #include "mitkAction.h"
00026 #include <vtkXMLParser.h>
00027 #include <iostream>
00028 #include <set>
00029
00030
00031 namespace mitk {
00032
00047 class MITK_CORE_EXPORT StateMachineFactory : public vtkXMLParser
00048 {
00049 public:
00050 static StateMachineFactory *New();
00051 vtkTypeMacro(StateMachineFactory,vtkXMLParser);
00052
00056 typedef std::map<std::string, mitk::State::Pointer> StartStateMap;
00057 typedef StartStateMap::iterator StartStateMapIter;
00058
00062 typedef std::set<int> HistorySet;
00063 typedef HistorySet::iterator HistorySetIter;
00064
00068 typedef std::map<int,State::Pointer> StateMachineMapType;
00069
00073 typedef std::map<std::string, StateMachineMapType* > AllStateMachineMapType;
00074
00081 State* GetStartState(const char* type);
00082
00086 bool LoadBehavior(std::string fileName);
00087
00091 bool LoadBehaviorString(std::string xmlString);
00092
00102 bool LoadStandardBehavior();
00103
00104 const std::string& GetLastLoadedBehavior()
00105 {
00106 return m_LastLoadedBehavior;
00107 }
00108
00119 bool AddStateMachinePattern(const char * type, mitk::State* startState, StateMachineMapType* allStatesOfStateMachine);
00120
00121
00125 friend class StateMachine;
00126
00127 protected:
00131 StateMachineFactory();
00132
00136 ~StateMachineFactory();
00137
00141 void StartElement (const char* elementName, const char **atts);
00142
00146 void EndElement (const char* elementName);
00147
00148 private:
00152 std::string ReadXMLStringAttribut( std::string name, const char** atts);
00156 float ReadXMLFloatAttribut( std::string name, const char** atts );
00160 double ReadXMLDoubleAttribut( std::string name, const char** atts );
00164 int ReadXMLIntegerAttribut( std::string name, const char** atts );
00168 bool ReadXMLBooleanAttribut( std::string name, const char** atts );
00169
00173 mitk::State* GetState( const char* type, int StateId );
00174
00178 bool ConnectStates(mitk::State::StateMap* states);
00179
00183 bool RParse(mitk::State::StateMap* states, mitk::State::StateMapIter thisState, HistorySet *history);
00184
00188 StartStateMap m_StartStates;
00189
00193 mitk::State::StateMap m_AllStatesOfOneStateMachine;
00194
00198 State::Pointer m_AktState;
00199
00203 itk::WeakPointer<Transition> m_AktTransition;
00204
00208 Action::Pointer m_AktAction;
00209
00213 AllStateMachineMapType m_AllStateMachineMap;
00214
00215 std::string m_LastLoadedBehavior;
00216
00217 std::string m_AktStateMachineName;
00218
00222 bool m_SkipStateMachine;
00223 };
00224
00225 }
00226
00227
00228 #endif