GuiFactory.hh
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
00028 #ifndef GUIFACTORY_HH
00029 #define GUIFACTORY_HH
00030
00031 #include <string>
00032 #include <map>
00033
00034 namespace gazebo
00035 {
00036
00037
00038 class Gui;
00039
00040
00041 typedef Gui* (*GuiFactoryFn) (int x, int y, int w, int h, const std::string &label);
00042
00044 class GuiFactory
00045 {
00047 public: static void RegisterAll();
00048
00050 public: static void RegisterGui(std::string type, std::string classname,
00051 GuiFactoryFn factoryfn);
00052
00055 public: static Gui *NewGui(const std::string &classname, int x, int y, int w, int h, const std::string &label);
00056
00058 private: static std::map<std::string, GuiFactoryFn> guis;
00059 };
00060
00061
00067 #define GZ_REGISTER_STATIC_GUI(name, classname) \
00068 Gui *New##classname(int x, int y, int w, int h, const std::string &label) \
00069 { \
00070 return new classname(x, y, w, h, label); \
00071 } \
00072 void Register##classname() \
00073 {\
00074 GuiFactory::RegisterGui("static", name, New##classname);\
00075 }
00076
00077 }
00078
00079 #endif