Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

Midad/MultiPage/GfxProxy.h

Go to the documentation of this file.
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

Generated on Mon Feb 15 11:06:46 2010 for loon by  doxygen 1.3.9.1