00001 00017 #ifndef GFXPROXY_H 00018 #define GFXPROXY_H 00019 00020 #include <Midad/MultiPage/GfxBase.h> 00021 #include <Midad/Util/NamedProxy.h> 00022 #include <Midad/MultiPage/GfxMenu.h> 00023 00024 #include <list> 00025 #include <iostream> 00026 00027 #include <sigc++/class_slot.h> 00028 00029 class MultiPage; 00030 class GfxProxyBase: public NamedProxy 00031 { 00032 static std::list<const char*> fNames; 00033 GfxMenu* fMenu; 00034 public: 00035 GfxProxyBase(const char* name, GfxMenu* menu = 0) 00036 : NamedProxy(name,"Gfx") 00037 ,fMenu(menu) { 00038 00039 fNames.push_back(name); 00040 gfx_added.emit(name); 00041 } 00042 virtual ~GfxProxyBase() {}; 00043 static SigC::Signal1<void,const char*> gfx_added; 00044 00045 virtual GfxBase* Create() = 0; 00046 virtual GuiMenu* MakeMenu(MultiPage* mp) { return fMenu ? fMenu->MakeMenu(mp) : 0; } 00047 00048 static std::list<const char*> GetRegisteredNames() { return fNames; } 00049 }; 00050 00051 template<class T> 00052 class GfxProxy : public GfxProxyBase 00053 { 00054 std::list<T*> fInstances; 00055 void Remove(T *t) { fInstances.remove(t); } 00056 00057 public: 00058 00059 GfxProxy(const char* name, GfxMenu* menu = 0) : GfxProxyBase(name,menu) {} 00060 virtual ~GfxProxy() {} 00061 00062 T* Create() { 00063 T* t = new T(); 00064 fInstances.push_back(t); 00065 t->destroyed.connect(SigC::bind(SigC::slot_class(*this,&GfxProxy<T>::Remove),t)); 00066 return t; 00067 } 00068 std::list<T*> GetInstances() { return fInstances; }; 00069 00070 }; // end of class GfxProxy 00071 00072 #endif // GFXPROXY_H
1.3.9.1