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 #ifndef ARMODE_H
00027 #define ARMODE_H
00028
00029 #include "ariaTypedefs.h"
00030 #include "ArFunctor.h"
00031 #include <string>
00032 #include <list>
00033
00034 class ArRobot;
00035
00036
00038
00050 class ArMode
00051 {
00052 public:
00054 AREXPORT ArMode(ArRobot *robot, const char *name, char key, char key2);
00056 AREXPORT virtual ~ArMode();
00058 AREXPORT const char *getName(void);
00060 AREXPORT virtual void activate(void) = 0;
00062 AREXPORT virtual void deactivate(void) = 0;
00064 AREXPORT virtual void userTask(void) {}
00066
00070 AREXPORT virtual void help(void) {}
00073 AREXPORT bool baseActivate(void);
00076 AREXPORT bool baseDeactivate(void);
00078 AREXPORT static void baseHelp(void);
00080 AREXPORT char getKey(void);
00082 AREXPORT char getKey2(void);
00083 protected:
00084 void addKeyHandler(int keyToHandle, ArFunctor *functor);
00085 void remKeyHandler(ArFunctor *functor);
00086
00087 static ArMode *ourActiveMode;
00088 std::string myName;
00089 ArRobot *myRobot;
00090 ArFunctorC<ArMode> myActivateCB;
00091 ArFunctorC<ArMode> myDeactivateCB;
00092 ArFunctorC<ArMode> myUserTaskCB;
00093 char myKey;
00094 char myKey2;
00095
00096 static ArGlobalFunctor *ourHelpCB;
00097 static std::list<ArMode *> ourModes;
00098 };
00099
00100 #endif // ARMODE_H