|
From: Emilien K. <cur...@us...> - 2005-03-16 13:59:38
|
Update of /cvsroot/wxdevcenter/wxDevCenter/include/wxDevCenter In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22395/include/wxDevCenter Modified Files: Tag: manager-virtualization Manager.h Log Message: Création d'une classe RespectiveUniqueObjectTemplateManager en vue de la gestion des minidoc/minivues. Index: Manager.h =================================================================== RCS file: /cvsroot/wxdevcenter/wxDevCenter/include/wxDevCenter/Attic/Manager.h,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -C2 -d -r1.1.2.3 -r1.1.2.4 *** Manager.h 15 Mar 2005 21:27:31 -0000 1.1.2.3 --- Manager.h 16 Mar 2005 13:59:27 -0000 1.1.2.4 *************** *** 423,427 **** }; - /** Gestionnaire de patrons à instantiation multiple. * Gestionnaire de patrons dont plusieurs objets peuvent être instanciés. --- 423,426 ---- *************** *** 489,492 **** --- 488,575 ---- + /** Gestionnaire de patrons à instantition unique pour chaque patron. + * Gestionnaire de patrons dont chaque patron ne peut avoir qu'une seule instantiation. + * @ref Gestionnaires + */ + template<class ObjectType, class Template=ObjectTemplate<ObjectType> > + class WXDC_DLL_BASE RespectiveUniqueObjectTemplateManager : public TemplateManager<ObjectType, Template> + { + private: + /** Gestionnaire interne des objets créés depuis les patrons.*/ + InitializableObjectManager<ObjectType> m_ObjectManager; + public: + /** Constructeur.*/ + RespectiveUniqueObjectTemplateManager():TemplateManager<ObjectType, Template>(),m_ObjectManager(){} + + /** @name Fonctions d'acces aux objets. + * @{ */ + /** Teste si un patron a un objet d'instancié. + * @param nIndex Index du patron.*/ + bool HasObject(unsigned int nIndex)const + { + for(unsigned int n=0; n<m_ObjectManager.GetCount(); n++) + if(m_ObjectManager.Item(n).GetClassInfo()==&(GetTemplate(nIndex).GetClassInfo())) + return true; + return false; + } + /** Accesseur sur un objet. + * @param nIndex Index du patron de l'objet.*/ + ObjectType* GetObject(unsigned int nIndex) + { + for(unsigned int n=0; n<m_ObjectManager.GetCount(); n++) + if(m_ObjectManager.Item(n).GetClassInfo()==&(GetTemplate(nIndex).GetClassInfo())) + return &(m_ObjectManager.Item(n)); + return false; + } + /** Accesseur constant sur un objet. + * @param nIndex Index du patron de l'objet.*/ + const ObjectType* GetObject(unsigned int nIndex)const + { + for(unsigned int n=0; n<m_ObjectManager.GetCount(); n++) + if(m_ObjectManager.Item(n).GetClassInfo()==&(GetTemplate(nIndex).GetClassInfo())) + return &(m_ObjectManager.Item(n)); + return false; + } + /** Crée un objet. + * @param nIndex Index du patron de l'objet. + * @param bOverride Si vrai alors supprime l'éventuel objet préexistant pour le patron et si faux si un objet est déjà crée pour le patron demandé, retourne cet objet. + * @return Adresse de l'objet, NULL si erreur. */ + ObjectType* CreateObject(unsigned int nIndex, bool bOverride=false) + { + if(bOverride) + DestroyObject(nIndex); + ObjectType* pObj = GetObject(nIndex); + if(pObj==NULL) + { + pObj = TemplateManager<ObjectType, Template>::CreateObjectFromTemplate(Index); + m_ObjectManager.Register(pObject); + } + return pObj; + } + /** Supprime un objet. + * @param nIndex Index du patron de l'objet.*/ + void DestroyObject(unsigned int nIndex) + { + ObjectType* pObj = GetObject(nIndex); + if(pObj!=NULL) + { + m_ObjectManager.Unregister(pObj); + delete pObj; + } + } + /** @} */ + + /** @name Initialisation et finalisation. + * @{ */ + /** Initialise l'objet. + * Si l'initialisation rend faux alors l'objet ne sera pas enregistré. + * @return Status d'initialisation.*/ + virtual bool Initialize(){return TemplateManager<ObjectType, Template>::Initialize() && m_ObjectManager.Initialize();} + /** Finalise l'objet.*/ + virtual void Finalize(){m_ObjectManager.Finalize(); TemplateManager<ObjectType, Template>::Finalize();} + /** @} */ + }; + + } #endif |