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 #include "StaticPluginRegister.hh"
00034
00035 namespace gazebo
00036 {
00037
00038
00039 class Gui;
00040
00041
00042 typedef Gui* (*GuiFactoryFn) (int x, int y, int w, int h, const std::string &label);
00043
00045 class GuiFactory
00046 {
00047
00049 public: static void RegisterGui(std::string type, std::string classname,
00050 GuiFactoryFn factoryfn);
00051
00053 public: static Gui *NewGui(const std::string &classname, int x, int y, int w, int h, const std::string &label);
00054
00056 private: static std::map<std::string, GuiFactoryFn> guis;
00057 };
00058
00059
00065 #define GZ_REGISTER_STATIC_GUI(name, classname) \
00066 Gui *New##classname(int x, int y, int w, int h, const std::string &label) \
00067 { \
00068 return new classname(x, y, w, h, label); \
00069 } \
00070 void Register##classname() \
00071 {\
00072 GuiFactory::RegisterGui("static", name, New##classname);\
00073 }\
00074 StaticPluginRegister Registered##classname (Register##classname);
00075
00076 }
00077
00078 #endif