00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00031 #ifndef __vtkKWStateMachine_h
00032 #define __vtkKWStateMachine_h
00033
00034 #include "vtkKWObject.h"
00035
00036 class vtkKWStateMachineState;
00037 class vtkKWStateMachineTransition;
00038 class vtkKWStateMachineInput;
00039 class vtkKWStateMachineInternals;
00040 class vtkKWStateMachineCluster;
00041
00042 class KWWidgets_EXPORT vtkKWStateMachine : public vtkKWObject
00043 {
00044
00045 public:
00046 static vtkKWStateMachine* New();
00047 vtkTypeRevisionMacro(vtkKWStateMachine, vtkKWObject);
00048 void PrintSelf(ostream& os, vtkIndent indent);
00049
00051
00052 virtual int AddState(vtkKWStateMachineState *state);
00053 virtual int HasState(vtkKWStateMachineState *state);
00054 virtual int GetNumberOfStates();
00055 virtual vtkKWStateMachineState* GetNthState(int rank);
00057
00059
00060 virtual int AddInput(vtkKWStateMachineInput *input);
00061 virtual int HasInput(vtkKWStateMachineInput *input);
00062 virtual int GetNumberOfInputs();
00063 virtual vtkKWStateMachineInput* GetNthInput(int rank);
00065
00067
00072 virtual int AddTransition(vtkKWStateMachineTransition *transition);
00073 virtual int HasTransition(vtkKWStateMachineTransition *transition);
00074 virtual int GetNumberOfTransitions();
00075 virtual vtkKWStateMachineTransition* GetNthTransition(int rank);
00077
00079
00082 virtual vtkKWStateMachineTransition* CreateTransition(
00083 vtkKWStateMachineState *origin,
00084 vtkKWStateMachineInput *input,
00085 vtkKWStateMachineState *destination);
00087
00089
00090 virtual vtkKWStateMachineTransition* FindTransition(
00091 vtkKWStateMachineState *origin,
00092 vtkKWStateMachineInput *input);
00093 virtual vtkKWStateMachineTransition* FindTransition(
00094 vtkKWStateMachineState *origin,
00095 vtkKWStateMachineInput *input,
00096 vtkKWStateMachineState *destination);
00098
00100
00107 vtkGetObjectMacro(InitialState, vtkKWStateMachineState);
00108 virtual int SetInitialState(vtkKWStateMachineState*);
00110
00113 virtual int IsRunning();
00114
00116
00117 vtkGetObjectMacro(CurrentState, vtkKWStateMachineState);
00118 vtkKWStateMachineState* GetPreviousState();
00120
00122 virtual void PushInput(vtkKWStateMachineInput *input);
00123
00134 virtual void ProcessInputs();
00135
00137
00139 virtual int GetNumberOfTransitionsInHistory();
00140 virtual vtkKWStateMachineTransition* GetNthTransitionInHistory(int rank);
00142
00144
00149 virtual int AddCluster(vtkKWStateMachineCluster *cluster);
00150 virtual int HasCluster(vtkKWStateMachineCluster *cluster);
00151 virtual int GetNumberOfClusters();
00152 virtual vtkKWStateMachineCluster* GetNthCluster(int rank);
00154
00156
00162 virtual void SetCurrentStateChangedCommand(
00163 vtkObject *object, const char *method);
00164 virtual void InvokeCurrentStateChangedCommand();
00165 virtual int HasCurrentStateChangedCommand();
00167
00169
00171 enum
00172 {
00173 CurrentStateChangedEvent = 10000
00174 };
00175
00177
00178
00179
00180 protected:
00181 vtkKWStateMachine();
00182 ~vtkKWStateMachine();
00183
00184 vtkKWStateMachineState *InitialState;
00185 vtkKWStateMachineState *CurrentState;
00186
00188
00189 virtual void RemoveState(vtkKWStateMachineState *state);
00190 virtual void RemoveAllStates();
00192
00194
00195 virtual void RemoveInput(vtkKWStateMachineInput *input);
00196 virtual void RemoveAllInputs();
00198
00200
00201 virtual void RemoveTransition(vtkKWStateMachineTransition *transition);
00202 virtual void RemoveAllTransitions();
00204
00206
00207 virtual void RemoveCluster(vtkKWStateMachineCluster *cluster);
00208 virtual void RemoveAllClusters();
00210
00211
00212
00213 vtkKWStateMachineInternals *Internals;
00214
00215
00217 virtual void ProcessInput(vtkKWStateMachineInput *input);
00218
00219 char *CurrentStateChangedCommand;
00220
00222 virtual void PushTransitionToHistory(vtkKWStateMachineTransition*);
00223
00224
00225
00226 private:
00227
00228 vtkKWStateMachine(const vtkKWStateMachine&);
00229 void operator=(const vtkKWStateMachine&);
00230 };
00231
00232 #endif
00233