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

EventDisplay/GfxProxy.h

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

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