00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef ARMODE_H
00028 #define ARMODE_H
00029
00030 #include "ariaTypedefs.h"
00031 #include "ArFunctor.h"
00032 #include <string>
00033 #include <list>
00034
00035 class ArRobot;
00036
00037
00039
00051 class ArMode
00052 {
00053 public:
00055 ArMode(ArRobot *robot, const char *name, char key, char key2);
00057 virtual ~ArMode();
00059 const char *getName(void);
00061 virtual void activate(void) = 0;
00063 virtual void deactivate(void) = 0;
00065 virtual void userTask(void) {}
00067
00071 virtual void help(void) {}
00074 bool baseActivate(void);
00077 bool baseDeactivate(void);
00079 static void baseHelp(void);
00081 char getKey(void);
00083 char getKey2(void);
00084 protected:
00085 void addKeyHandler(int keyToHandle, ArFunctor *functor);
00086 void remKeyHandler(ArFunctor *functor);
00087
00088 static ArMode *ourActiveMode;
00089 std::string myName;
00090 ArRobot *myRobot;
00091 ArFunctorC<ArMode> myActivateCB;
00092 ArFunctorC<ArMode> myDeactivateCB;
00093 ArFunctorC<ArMode> myUserTaskCB;
00094 char myKey;
00095 char myKey2;
00096
00097 static ArGlobalFunctor *ourHelpCB;
00098 static std::list<ArMode *> ourModes;
00099 };
00100
00101 #endif // ARMODE_H