|
From: Emilien K. <cur...@us...> - 2005-03-15 21:27:51
|
Update of /cvsroot/wxdevcenter/wxDevCenter/include/wxDevCenter In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29768/include/wxDevCenter Modified Files: Tag: manager-virtualization Application.h DocView.h FileSystem.h FileSystemStandard.h Frame.h MDIFrame.h Manager.h Project.h Removed Files: Tag: manager-virtualization DocManager.h Log Message: Passage du DocManager et consorts à la nouvelle architecture des gestionnaires. Diverses modifs de l'archi des gestionnaires. Index: Project.h =================================================================== RCS file: /cvsroot/wxdevcenter/wxDevCenter/include/wxDevCenter/Project.h,v retrieving revision 1.4.2.1 retrieving revision 1.4.2.2 diff -C2 -d -r1.4.2.1 -r1.4.2.2 *** Project.h 8 Mar 2005 17:26:27 -0000 1.4.2.1 --- Project.h 15 Mar 2005 21:27:31 -0000 1.4.2.2 *************** *** 191,196 **** ~ProjectManager(); - /** Initialisation du gestionnaire.*/ - void Initialize(); /** Finalisation du gestionnaire.*/ void Finalize(); --- 191,194 ---- Index: DocView.h =================================================================== RCS file: /cvsroot/wxdevcenter/wxDevCenter/include/wxDevCenter/DocView.h,v retrieving revision 1.7 retrieving revision 1.7.2.1 diff -C2 -d -r1.7 -r1.7.2.1 *** DocView.h 7 Mar 2005 15:23:02 -0000 1.7 --- DocView.h 15 Mar 2005 21:27:31 -0000 1.7.2.1 *************** *** 3,7 **** * @author Cursor * ! * @brief Déclaration des classes de manipulations des documents et des vues. * * Déclaration des classes de --- 3,7 ---- * @author Cursor * ! * @brief Déclaration des classes relatives aux documents et aux vues vues. * * Déclaration des classes de *************** *** 12,15 **** --- 12,18 ---- * . * - Vues (wxDevCenter::View) + * - Patron de documents (wxDevCenter::DocTempate). + * - Gestionnaire de types de documents (wxDevCenter::DocManager) + * - Déclaration de type de document (wxDevCenter::DocType) * - Type de document. * - Mini-Documents (wxDevCenter::MiniDoc) *************** *** 35,51 **** // 02111-1307, USA. #ifndef __WXDEVCENTER_DOCVIEW #define __WXDEVCENTER_DOCVIEW #include <wxDevCenter/Frame.h> namespace wxDevCenter { - // Déclaration des classes utilisées. class Application; class DocManager; class DocTemplate; class Archive; class ViewFrame; --- 38,93 ---- // 02111-1307, USA. + /** @page DocManagerDoc Architecture du gestionnaire de documents. + * Le gestionnaire de document englobe la gestion des patrons et des objets de documents et de vues. + * Il s'occupe aussi des minidocs et minivues. + * + * Il est basé sur l'architecture des gestionnaires. + * @see Gestionnaires + * + * @section + * + */ + + #ifndef __WXDEVCENTER_DOCVIEW #define __WXDEVCENTER_DOCVIEW + #include <wx/imaglist.h> + #include <wx/hashmap.h> + #include <wx/dynarray.h> + + #include <wxDevCenter/Manager.h> + #include <wxDevCenter/FileTools.h> #include <wxDevCenter/Frame.h> + #define WXDC_DOCMANAGER_TYPE_NONE 0 + #define WXDC_DOCMANAGER_TYPE_UNKNOW 1 + #define WXDC_DOCMANAGER_TYPE_DIRECTORY 2 + #define WXDC_DOCMANAGER_TYPE_DESKTOP 3 + #define WXDC_DOCMANAGER_TYPE_HOME 4 + #define WXDC_DOCMANAGER_TYPE_DOCUMENTS 5 + #define WXDC_DOCMANAGER_TYPE_COMPUTER 6 + + #define WXDC_DOCMANAGER_TYPE_FLOPPY 7 + #define WXDC_DOCMANAGER_TYPE_HARDDRIVE 8 + #define WXDC_DOCMANAGER_TYPE_CDROM 9 + #define WXDC_DOCMANAGER_TYPE_RAMDISK 10 + #define WXDC_DOCMANAGER_TYPE_REMOTE 11 + + + #define WXDC_DOCMANAGER_TYPE_SYSCOUNT 12 + #define WXDC_DOCMANAGER_TYPE_CUSTOMFIRST 12 + #define WXDC_DOCMANAGER_TYPE_DIRFIRST 2 + + + namespace wxDevCenter { // Déclaration des classes utilisées. class Application; class DocManager; class DocTemplate; + class ViewTemplate; class Archive; class ViewFrame; *************** *** 54,58 **** // Prédéclaration des classes du fichier entete. class WXDC_DLL_BASE View; - class ViewArray; class WXDC_DLL_BASE Document; class WXDC_DLL_BASE Action; --- 96,99 ---- *************** *** 61,64 **** --- 102,109 ---- class WXDC_DLL_BASE MiniView; class WXDC_DLL_BASE MiniDoc; + + class DocManager; + class DocTemplate; + class DocTypeArray; *************** *** 80,87 **** #define IDM_EDIT_SELECTALL wxID_SELECTALL ! /** Interface "Vue". ! * Classe interface de vue pour la représentation visuelle des données des documents. ! */ ! class WXDC_DLL_BASE View : public wxPanel { friend class Application; --- 125,133 ---- #define IDM_EDIT_SELECTALL wxID_SELECTALL ! /* ! * Interface "Vue". ! * Classe interface de vue pour la représentation visuelle des données des documents. ! */ ! class WXDC_DLL_BASE View : public wxPanel, public InitializableInterface { friend class Application; *************** *** 104,110 **** MenuArray m_aMenu; ! /** Pointeur vers la structure d'association du type de vue. ! * @see ViewAssociation.*/ ! ViewAssociation *m_pViewAssociation; /** Interception des évènements menus. --- 150,155 ---- MenuArray m_aMenu; ! /** Adresse du patron de vue.*/ ! ViewTemplate *m_pViewTemplate; /** Interception des évènements menus. *************** *** 143,148 **** /** Retourne le documment auquel est attachée la vue.*/ Document* GetDocument(){return m_pDocument;} ! /** Retourne le descripteur du type de vue.*/ ! ViewAssociation* GetViewAssociation(){return m_pViewAssociation;} /** Processus post-création. --- 188,193 ---- /** Retourne le documment auquel est attachée la vue.*/ Document* GetDocument(){return m_pDocument;} ! /** Retourne le patron de la vue.*/ ! ViewTemplate* GetViewTemplate(){return m_pViewTemplate;} /** Processus post-création. *************** *** 171,184 **** ! /** Définition du type vecteur de pointeurs de vues. ! */ ! WX_DEFINE_USER_EXPORTED_ARRAY(View*, ViewArray, class WXDC_DLL_BASE); ! ! ! ! /** Interface "document" (classe de base). * Classe Interface de document à dériver pour créer des documents spécifiques. */ ! class WXDC_DLL_BASE Document : public wxObject { friend class DocManager; --- 216,224 ---- ! /** ! * Interface "document" (classe de base). * Classe Interface de document à dériver pour créer des documents spécifiques. */ ! class WXDC_DLL_BASE Document : public wxObject, public InitializableInterface { friend class DocManager; *************** *** 189,203 **** protected: /** Pointeur vers le gestionnaire de document.*/ ! DocManager *m_pDocumentManager; /** Pointeur vers le patron de document correspondant au type de ce document.*/ ! DocTemplate *m_pDocumentTemplate; /** Liste dynamique des vues attachées à ce document.*/ ! ViewArray m_ViewArray; /** Le document a-t-il été modifié ?*/ ! bool m_bIsDocumentModified; /** Nom du document.*/ ! wxString m_strName; /** Chemin du document.*/ ! FilePath m_strPath; public: Document(void); --- 229,243 ---- protected: /** Pointeur vers le gestionnaire de document.*/ ! DocManager* m_pDocumentManager; /** Pointeur vers le patron de document correspondant au type de ce document.*/ ! DocTemplate* m_pDocumentTemplate; /** Liste dynamique des vues attachées à ce document.*/ ! ObjectManager<View> m_ViewArray; /** Le document a-t-il été modifié ?*/ ! bool m_bIsDocumentModified; /** Nom du document.*/ ! wxString m_strName; /** Chemin du document.*/ ! FilePath m_strPath; public: Document(void); *************** *** 231,238 **** /** Détache une vue du document.*/ void DetachView(View *pView); - /** Détache puis détruit une vue attachée au document.*/ - void DeleteView(View *pView); - /** Détache et détruit toutes les vues attachées au document.*/ - void DeleteAllViews(); protected: --- 271,274 ---- *************** *** 284,287 **** --- 320,608 ---- }; + + + /** + * Structure d'association de vue. Structure qui stoque les informations relatives à une vue attachée. + */ + class WXDC_DLL_BASE ViewTemplate : public ObjectTemplate<View> + { + public: + /** Icones.*/ + wxString strIcons; + + /** Constructeur.*/ + ViewTemplate(wxClassInfo* pInfo, wxString strName, wxString strDescript, wxString strIcon): + ObjectTemplate<View>(pInfo, strName, strDescript), strIcons(strIcon){} + }; + + + + ////////////////////////////////////////////////////////////////////// + // DocTempate : + + /** Patron de document (document template). + * Référence un type de document avec l'ensemble de ces vues. + * A un type de document correspond : + * - un nom. + * - une description détaillée. + * - une info RTTI de la classe de document. + * - une liste d'extensions par lesquelles les fichiers serons reconnus. Les extensions sont case-insensitives. + * - une liste de vues associées. Chaque vue ayant : + * - un nom. + * - une description. + * - une info RTTI de la classe de vue. + * - une liste d'icones (éventuellement vide). + * - une info RTTI de minidoc. + * @see DocManager + * @see Document + * @see View + */ + class WXDC_DLL_BASE DocTemplate : public ObjectTemplate<Document> + { + friend class Application; + friend class DocManager; + private: + /** Gestionnaire de patron de vues.*/ + TemplateManager<View, ViewTemplate> m_ViewTemplateManager; + protected: + /** Tableau des extensions de fichiers.*/ + wxArrayString m_strExt; + /** Information RTTI du mini-document.*/ + wxClassInfo *m_pMiniDocClassInfo; + public: + /** Constructeur. + * @param strName Nom du type de document. + * @param pDocClassInfo RTTI de la classe document. + * @param strExt Première extension de fichier liée au document. Cette extension est celle par défaut. + * @param strDescription Description détaillée du document (éventuellement vide). + */ + DocTemplate(wxString strName, wxClassInfo *pDocClassInfo, wxString strExt, wxString strDescription=""); + ~DocTemplate(); + + /** @name Gestion des patrons de vues. + * @{ */ + unsigned int GetViewTemplateCount()const{return m_ViewTemplateManager.GetTemplateCount();} + int FindViewTemplate(const ViewTemplate* pTemplate)const{return m_ViewTemplateManager.FindTemplate(pTemplate);} + ViewTemplate& GetViewTemplate(unsigned int nIndex){return m_ViewTemplateManager.GetTemplate(nIndex);} + const ViewTemplate& GetViewTemplate(unsigned int nIndex)const{return m_ViewTemplateManager.GetTemplate(nIndex);} + bool RegisterViewTemplate(ViewTemplate* pTemplate){return m_ViewTemplateManager.RegisterTemplate(pTemplate);} + bool RegisterViewTemplate(ViewTemplate& Templ){return m_ViewTemplateManager.RegisterTemplate(Templ);} + bool UnregisterViewTemplate(ViewTemplate* pTempl){return m_ViewTemplateManager.UnregisterTemplate(pTempl);} + void UnregisterViewTemplate(unsigned int Index){m_ViewTemplateManager.UnregisterTemplate(Index);} + virtual View* CreateView(unsigned int Index){return m_ViewTemplateManager.CreateObjectFromTemplate(Index);} + /** @} */ + + /** @name Données complémentaires du patron de document. + * @{ */ + /** Ajout d'une extension de fichier au type de document. + * @param strExt Nouvelle extension. + * @return Vrai si l'extension est correctement ajoutée. + */ + bool AddExtension(wxString strExt); + /** Extension du document. + * @param nIndex Indice de l'extension dans le tableau des extensions.*/ + wxString GetExtension(unsigned int nIndex=0)const{return m_strExt[nIndex];} + /** Nombre d'extensions enregistrées dans le tableau des extensions.*/ + unsigned int GetExtensionCount()const{return m_strExt.Count();} + /** Wilcard du document. Sélecteur de fichiers généré à partir des extensions de fichiers associées au type de document. + * @param bShowStarDotStar ...*/ + wxString GetDocWildcard(bool bShowStarDotStar=false)const; + /** @}*/ + + + ///** @name Manipulation du Mini-document. + // * @{*/ + ///** RTTI du mini-doc.*/ + //wxClassInfo* GetMiniDocClassInfo()const{return m_pMiniDocClassInfo;} + ///** Fixe les informations RTTI du Mini-document attaché.*/ + //void SetMiniDocClassInfo(wxClassInfo *pMiniDocClassInfo){m_pMiniDocClassInfo=pMiniDocClassInfo;} + ///** @}*/ + }; + + + + + + + ////////////////////////////////////////////////////////////////////// + // DocManager + + /** Gestionnaire de documents. + * Référence les différents types de documents. + * Référence aussi tous les documents ouverts et toutes les vues ouvertes. + * Produit une liste d'icones à partir des icones de toutes les vues. + * @see DocTemplate + * @see Document + * @see View + */ + class WXDC_DLL_BASE DocManager : public MultiObjectTemplateManager<Document, DocTemplate> + { + friend class Application; + private: + /** Gestionnaire des vues.*/ + InitializableObjectManager<View> m_ViewManager; + protected: + /** Fenêtre conteneur par défaut des vues.*/ + wxWindow *m_pDefaultViewContainer; + + /** @name Manipulation des documents. + * @{*/ + public: + /** Nombre de documents.*/ + unsigned int GetDocumentCount()const{return MultiObjectTemplateManager<Document, DocTemplate>::GetObjectCount();} + /** Document par l'indice dans le tableau de référencement.*/ + const Document* GetDocument(unsigned int nIndex)const{return &(MultiObjectTemplateManager<Document, DocTemplate>::GetObject(nIndex));} + Document* GetDocument(unsigned int nIndex){return &(MultiObjectTemplateManager<Document, DocTemplate>::GetObject(nIndex));} + /** Document par son chemin.*/ + const Document* GetDocument(FilePath &strDocPath)const; + Document* GetDocument(FilePath &strDocPath); + /** Crée un document. + * Crée un document à partir de l'identifiant de son patron puis l'enregistre dans la liste des documents. + * @param nIndex Index du patron de document. + */ + Document* CreateDocument(unsigned int nIndex); + /** Ferme le document spécifié. + * Ferme un document et toutes ses vues attachées. + * Si le document a été modifié, une demande d'enregistrement est posée à l'utilisateur et le document est enregistré le cas échéant. + * @return Retourne false si l'utilisateur annule l'action.*/ + bool CloseDocument(Document *pDoc); + /** Ferme tous les documents ouverts. + * Ferme tous les documents ouverts et toutes les vues attachées. + * Si des documents sont modifiés, des demandes d'enregistrements sont posées. + * @return Retourne false si l'utilisateur annule l'action (repond "annuler" à une demande de sauvegarde).*/ + bool CloseAllDocuments(); + /** Sauvegarde les données modifiées du documents.*/ + bool SaveDocument(Document *pDoc); + protected: + /** Supprime le document spécifié. + * Le document est supposé libre de vue et sauevgardé si besoin est. + * Aucune vérification ne sera effectuée.*/ + void DeleteDocument(Document* pDocument); + /** @}*/ + + + /** @name Manipulation des patrons de documents. + * @{*/ + public: + /** Nombre de patrons de documents.*/ + unsigned int GetDocTemplateCount()const{return MultiObjectTemplateManager<Document, DocTemplate>::GetTemplateCount();} + /** Patron de document par son indice dans le tableau de référencement. + * @param nIndex Indice du type de document.*/ + const DocTemplate& GetDocTemplate(unsigned int nIndex)const{return MultiObjectTemplateManager<Document, DocTemplate>::GetTemplate(nIndex);} + DocTemplate& GetDocTemplate(unsigned int nIndex){return MultiObjectTemplateManager<Document, DocTemplate>::GetTemplate(nIndex);} + /** Retrouve l'identifiant du patron depuis son adresse.*/ + int FindDocTemplate(const DocTemplate* pTemplate)const{return MultiObjectTemplateManager<Document, DocTemplate>::FindTemplate(pTemplate);} + /** Patron de document correspondant à un nom de patron. + * @param strDocName Nom du patron de document.*/ + int GetDocTemplateFromName(wxString strDocName)const; + /** Patron de document correspondant à une extension de fichier. + * @param strExt Extension de fichier.*/ + int GetDocTemplateFromExt(wxString strExt)const; + /** Demande à l'utilisateur un type de document. + * Affiche une boite de dialogue qui permet de sélectionner un type de document. + * @return Renvoie l'identifiant du type de document sinon renvoie -1.*/ + int ChooseDocTemplate(void) const; + /** Demande à l'utilisateur un type de vue. + * Affiche une boite de dialogue qui permet de sélectionner le type de vue vis-à-vis du type de document spécifié. + * @param nDocTemplateIndex Identifiant du patron de document. + * @return Renvoie l'identifiant de la vue sinon renvoie -1.*/ + int ChooseViewType(unsigned int nDocTemplateIndex) const; + /** Enregistre les types de documents déclarés. + * Enregistres les types de documents déclarés mais pas encore enregistrés. + */ + void RegisterDocTypes(); + /** Ajoute un patron de document à la liste des patrons. + * @param Adresse du patron de document à ajouter. + * @return Indice du nouveau patron ou -1 si erreur. + */ + int RegisterDocTemplate(DocTemplate* pTemplate); + /** @}*/ + + + /** @name Manipulation des vues. + * @{*/ + /** Nombre de vues. + * @return Nombre de vues. */ + unsigned int GetViewCount()const{return m_ViewManager.GetCount();} + /** Vue par son indice du tableau des référencement. + * @return Vue demandée. */ + const View& GetView(unsigned int nIndex)const{return m_ViewManager.Item(nIndex);} + View& GetView(unsigned int nIndex){return m_ViewManager.Item(nIndex);} + /** Crée une vue. + * Crée une vue correspondant à l'indetifiant de vue spécifié et l'attache au document précisé. + * @param pDoc Document auquel attacher la vue. + * @param nViewIndex Indice de la vue correspondant au patron du type de document. + * @return Adresse de la nouvelle vue, -1 si erreur. + */ + View* CreateView(Document *pDoc, unsigned int nViewIndex); + /** Crée une vue. + * Crée une vue correspondant au patron de vue spécifié et l'attache au document précisé. + * @param pDoc Document auquel attacher la vue. + * @param pViewTemp Indice de la vue correspondant au patron du type de document. + * @return Adresse de la nouvelle vue, -1 si erreur. + */ + View* CreateView(Document *pDoc, ViewTemplate* pViewTemp); + /** Ferme la vue spécifiée. + * Si c'est la dernière vue du document attaché, demande d'enregistrer les modifications le cas échéant. + * @return Retourne false si l'utilisateur annule l'action.*/ + bool CloseView(View *pView); + /** Supprime une vue. Supprime une vue sans aucun test d'attachement aux documents. + * Enlève la vue des différentes listes et la détruit. + * Ne doit être appelée que de CloseDocument ou CloseView (ou associé).*/ + void DeleteView(View *pView); + /** @}*/ + + + + /** @name Manipulation des minidocuments et des minivues. + * @{*/ + /** Crée une MiniVue. + * @param strSourcePath Chemin vers le fichier source. + * @param pParent Adresse de la fenetre parent dans laquelle inclure la mini-vue. + * @param id Identifiant de filiation. + * @return Retourne la nouvelle mini-vue ou NULL si échoué. + */ + MiniView* CreateMiniView(FilePath strSourcePath, wxWindow* pParent, wxWindowID id=-1); + /** Retourne le mini-doc si celui si existe. + * @param strDocPath Chemin du document. + * @return Retourne l'adresse du minidoc ou NULL si aucun minidoc n'est créé pour ce fichier. + */ + MiniDoc* GetMiniDoc(FilePath strDocPath); + /** @}*/ + + + DocManager(void); + virtual ~DocManager(void); + + /** Retourne le filtrage de fichier global. + * Retourne le filtrage de tous les documents enregistrés. + * @param bShowStarDotStar Affiche l'option "Tous les fichiers (*.*)" si vrai. + * @param bShowAllRegisteredExt Affiche l'option "Tous les documents" c'est à dire tous les types de documents enregistrés si vrai. + * @return Retourne le numéro du type de document correspondant à l'extension spécifiée sinon renvoie -1.*/ + wxString GetAllWildcard(bool bShowStarDotStar=true, bool bShowAllRegisteredExt=true)const; + + + /** @name Manipulation des icones de types de documents. + * @{*/ + /** Retourne la liste d'icones du gestionnaire de document correspondant à une taille donnée. + * Chaque image est forcément carrée. + * @param iSize Taille de chaque image. + * @return Adresse de la liste d'image.*/ + wxImageList* GetImageList(int iSize); + /** Retourne le bundle d'icones associé à un identifiant de type de document. + * @param nDocType Index du type de document. + * @param nViewType Index du type de vue. + * @return Adresse du bundle et NULL si aucun. + */ + wxIconBundle* GetIconBundle(unsigned int nDocType, unsigned int nViewType); + /** @}*/ + }; + + + + + + + /** Interface de description d'une action utilisateur. * Classe interface decrivant une action utilisateur pouvant être annulée par une commande "Undo" *************** *** 352,355 **** --- 673,679 ---- class WXDC_DLL_BASE DocType : public DocTemplate { + protected: + /** Unique vue attachée.*/ + ViewTemplate m_ViewTemplate; public: /** Constructeur par défaut. Index: Manager.h =================================================================== RCS file: /cvsroot/wxdevcenter/wxDevCenter/include/wxDevCenter/Attic/Manager.h,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -C2 -d -r1.1.2.2 -r1.1.2.3 *** Manager.h 8 Mar 2005 18:46:24 -0000 1.1.2.2 --- Manager.h 15 Mar 2005 21:27:31 -0000 1.1.2.3 *************** *** 70,78 **** #define __WXDEVCENTER_MANAGER - #include <vector> - namespace wxDevCenter { /** Classe de base de gestionnaire d'objets. * Gestion d'objets enregistrés. --- 70,145 ---- #define __WXDEVCENTER_MANAGER namespace wxDevCenter { + template<class ItemType> + class WXDC_DLL_BASE Vector : public wxObject + { + private: + /** Tableau des données.*/ + ItemType* m_pItemArray; + /** Nombre d'éléments dans le tableau.*/ + unsigned long m_lNbItem; + + /** Interroge la place mémoire allouée. + * @return le nombre d'élément stockable.*/ + unsigned long GetAlloc()const{return sizeof(m_pItemArray)/sizeof(ItemType);} + /** Réalloue le tableau pour agrandissement.*/ + void Realloc(unsigned long size) + { + if(size>GetAlloc()) + { + size = (size*5) / 4; + if(size<20) + size=20; + } + + ItemType* pNew = new ItemType[size]; + if(m_pItemArray!=NULL) + { + for(register unsigned long l=0; l<m_lNbItem; l++) + pNew[l] = m_pItemArray[l]; + delete [] m_pItemArray; + } + m_pItemArray = pNew; + } + + public: + /** Constructeur.*/ + Vector():wxObject(),m_pItemArray(NULL), m_lNbItem(0){} + /** Destructeur.*/ + virtual ~Vector(){if(m_pItemArray!=NULL)delete [] m_pItemArray;} + + /** Ajout d'un elément. + * @param item Elément à ajouter. */ + void Add(const ItemType& item) + { + Realloc(m_lNbItem+1); + m_pItemArray[m_lNbItem++] = item; + } + /** Supprime des éléments. + * @param index Index du premier élément à supprimer. + * @param number Nombre d'éléments à supprimer.*/ + void Remove(unsigned long index, unsigned long number=1) + { + unsigned long after; + for(after=index+number; after<m_lNbItem; after++, index++) + m_pItemArray[index] = m_pItemArray[after]; + m_lNbItem -= number; + } + /** Acces sur un élément.*/ + ItemType& Item(unsigned long index){return m_pItemArray[index];} + /** Acces constant sur un élément.*/ + const ItemType& Item(unsigned long index)const{return m_pItemArray[index];} + /** Acces sur un élément.*/ + ItemType& operator[](unsigned long index){return m_pItemArray[index];} + /** Acces constant sur un élément.*/ + const ItemType& operator[](unsigned long index)const{return m_pItemArray[index];} + /** Nombre d'élément.*/ + unsigned long GetCount()const{return m_lNbItem;} + }; + + + /** Classe de base de gestionnaire d'objets. * Gestion d'objets enregistrés. *************** *** 80,87 **** */ template<class ItemType> ! class WXDC_DLL_BASE ObjectManager : public wxObject, protected std::vector<ItemType*> { public: ! ObjectManager(void):wxObject(),std::vector<ItemType*>(){} virtual ~ObjectManager(void){} --- 147,154 ---- */ template<class ItemType> ! class WXDC_DLL_BASE ObjectManager : protected Vector<ItemType*> { public: ! ObjectManager(void):Vector<ItemType*>(){} virtual ~ObjectManager(void){} *************** *** 90,114 **** /** Retourne le nombre d'objets enregistrés. * @return Nombre d'objets enregistrés.*/ ! unsigned int GetCount()const{return size();} /** Recherche un objet. * @param pObj Adresse de l'objet à rechercher. * @return Index de l'objet ou -1 si non trouvé.*/ ! int Find(const ItemType* pObj)const{for(unsigned int n=0; n<size(); n++)if(pObj==at(n))return (int)n; return -1;} /** Accès à un objet. * @param nIndex Index de l'objet. * @return Référence de l'objet.*/ ! ItemType& Item(unsigned int nIndex){return *at(nIndex);} /** Accès constant à un objet. * @param nIndex Index de l'objet. * @return Référence de l'objet.*/ ! const ItemType& Item(unsigned int nIndex)const{return *at(nIndex);} /** Enregistrement d'un objet. * @param pObj Adresse de l'objet. * @return Vrai si correctement enregistré.*/ ! bool Register(ItemType* pObj){if(Find(pObj)!=-1)return false;push_back(pObj);return true;} /** Enregistrement d'un objet. * @param Obj Objet à enregistrer. * @return Vrai si correctement enregistré.*/ ! bool Register(ItemType& Obj){if(Find(&Obj)!=-1)return false;push_back(&Obj);return true;} /** Désenregistrement d'un objet. * @param pObj Adresse de l'objet. --- 157,189 ---- /** Retourne le nombre d'objets enregistrés. * @return Nombre d'objets enregistrés.*/ ! unsigned int GetCount()const{return Vector<ItemType*>::GetCount();} /** Recherche un objet. * @param pObj Adresse de l'objet à rechercher. * @return Index de l'objet ou -1 si non trouvé.*/ ! int Find(const ItemType* pObj)const{for(unsigned int n=0; n<GetCount(); n++)if(pObj==&Item(n))return (int)n; return -1;} /** Accès à un objet. * @param nIndex Index de l'objet. * @return Référence de l'objet.*/ ! ItemType& Item(unsigned int nIndex){return *(Vector<ItemType*>::Item(nIndex));} /** Accès constant à un objet. * @param nIndex Index de l'objet. * @return Référence de l'objet.*/ ! const ItemType& Item(unsigned int nIndex)const{return *(Vector<ItemType*>::Item(nIndex));} ! /** Opérateur d'accès à un objet. ! * @param nIndex Index de l'objet. ! * @return Référence de l'objet.*/ ! ItemType& operator[](unsigned int nIndex){return *(Vector<ItemType*>::Item(nIndex));} ! /** Opérateur d'accès constant à un objet. ! * @param nIndex Index de l'objet. ! * @return Référence de l'objet.*/ ! const ItemType& operator[](unsigned int nIndex)const{return *(Vector<ItemType*>::Item(nIndex));} /** Enregistrement d'un objet. * @param pObj Adresse de l'objet. * @return Vrai si correctement enregistré.*/ ! bool Register(ItemType* pObj){if(Find(pObj)!=-1)return false;Add(pObj);return true;} /** Enregistrement d'un objet. * @param Obj Objet à enregistrer. * @return Vrai si correctement enregistré.*/ ! bool Register(ItemType& Obj){if(Find(&Obj)!=-1)return false;Add(&Obj);return true;} /** Désenregistrement d'un objet. * @param pObj Adresse de l'objet. *************** *** 119,123 **** if(pos!=-1) { ! erase(begin()+pos); return true; } --- 194,198 ---- if(pos!=-1) { ! Remove(pos); return true; } *************** *** 126,130 **** /** Désenregistrement d'un objet. * @param Index Index de l'objet à supprimer.*/ ! void Unregister(unsigned int Index){erase(begin()+Index);} /** @} */ }; --- 201,205 ---- /** Désenregistrement d'un objet. * @param Index Index de l'objet à supprimer.*/ ! void Unregister(unsigned int Index){Remove(Index);} /** @} */ }; *************** *** 150,154 **** */ template<class ItemType> ! class WXDC_DLL_BASE InitializableObjectManager : public ObjectManager<ItemType> { public: --- 225,229 ---- */ template<class ItemType> ! class WXDC_DLL_BASE InitializableObjectManager : public ObjectManager<ItemType>, public InitializableInterface { public: *************** *** 180,184 **** /** Désenregistrement d'un objet. * @param Index Index de l'objet à supprimer.*/ ! void Unregister(unsigned int Index){Item(Index).Finalize();ObjectManager<ItemType>::Unregister(pObj);} /** @} */ }; --- 255,259 ---- /** Désenregistrement d'un objet. * @param Index Index de l'objet à supprimer.*/ ! void Unregister(unsigned int Index){Item(Index).Finalize();ObjectManager<ItemType>::Unregister(Index);} /** @} */ }; *************** *** 241,244 **** --- 316,329 ---- return pObj; } + + /** Accesseur sur le nom. + * @return Nom du patron.*/ + wxString GetName()const{return m_strName;} + /** Accesseur sur la description. + * @return Desription du patron.*/ + wxString GetDescript()const{return m_strDescript;} + /** Accesseur sur les infos RTTI. + * @return wxClassInfo du type de l'objet.*/ + wxClassInfo& GetClassInfo(){return *m_pClassInfo;} }; *************** *** 258,262 **** * @param pTemplate Adresse du patron à rechercher. * @return Index du patron ou -1 si non trouvé.*/ ! int FindTemplate(const Template* pTemplate)const{return InitializableObjectManager<Template>::Find(pTempl);} /** Accès à un patron. * @param nIndex Index du patron. --- 343,347 ---- * @param pTemplate Adresse du patron à rechercher. * @return Index du patron ou -1 si non trouvé.*/ ! int FindTemplate(const Template* pTemplate)const{return InitializableObjectManager<Template>::Find(pTemplate);} /** Accès à un patron. * @param nIndex Index du patron. *************** *** 290,296 **** * @param Index Index du patron. * @return adresse de l'objet ainsi créé. NULL si erreur.*/ ! virtual ObjectType* CreateObject(unsigned int Index){return GetTemplate(Index).CreateObject();} /** @} */ }; --- 375,390 ---- * @param Index Index du patron. * @return adresse de l'objet ainsi créé. NULL si erreur.*/ ! virtual ObjectType* CreateObjectFromTemplate(unsigned int Index){return GetTemplate(Index).CreateObject();} /** @} */ + /** @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 InitializableObjectManager<Template>::Initialize();} + /** Finalise l'objet.*/ + virtual void Finalize(){InitializableObjectManager<Template>::Finalize();} + /** @} */ }; *************** *** 316,320 **** * @param Index Index du patron. * @return adresse de l'objet ainsi créé. NULL si erreur.*/ ! virtual ObjectType* CreateObject(unsigned int Index){m_pCurrentObject = TemplateManager<ObjectType, Template>::CreateObject(Index); return m_pCurrentObject;} public: --- 410,414 ---- * @param Index Index du patron. * @return adresse de l'objet ainsi créé. NULL si erreur.*/ ! virtual ObjectType* CreateObject(unsigned int Index){m_pCurrentObject = TemplateManager<ObjectType, Template>::CreateObjectFromTemplate(Index); return m_pCurrentObject;} public: *************** *** 335,340 **** */ template<class ObjectType, class Template=ObjectTemplate<ObjectType> > ! class WXDC_DLL_BASE MultiObjectTemplateManager : public TemplateManager<ObjectType, Template>, public InitializableObjectManager<ObjectType> { }; --- 429,489 ---- */ template<class ObjectType, class Template=ObjectTemplate<ObjectType> > ! class WXDC_DLL_BASE MultiObjectTemplateManager : public TemplateManager<ObjectType, Template> { + private: + /** Gestionnaire interne des objets créés depuis les patrons.*/ + InitializableObjectManager<ObjectType> m_ObjectManager; + protected: + /** Création d'un objet depuis un patron enregistré. + * Le nouvel objet est initialisé puis enregistré dans la liste des objets. + * @warning Aucune suppression de l'objet courant n'est effectuée. + * @param Index Index du patron. + * @return adresse de l'objet ainsi créé. NULL si erreur.*/ + virtual ObjectType* CreateObject(unsigned int Index){ObjectType* pObject = TemplateManager<ObjectType, Template>::CreateObjectFromTemplate(Index); m_ObjectManager.Register(pObject); return pObject;} + + /** Détruit un objet enregistré. + * L'objet est finalisé puis désenregistré. + * @param pObject Objet à détruire.*/ + virtual void DestroyObject(ObjectType* pObject) + { + if(m_ObjectManager.Find(pObject)!=-1) + { + m_ObjectManager.Unregister(pObject); + delete pObject; + } + } + + public: + /** Constructeur.*/ + MultiObjectTemplateManager():TemplateManager<ObjectType, Template>(),m_ObjectManager(){} + + /** @name Fonctions d'accès aux objets. + * @{ */ + /** Retourne le nombre d'objets enregistrés. + * @return Nombre d'objets enregistrés.*/ + unsigned int GetObjectCount()const{return m_ObjectManager.GetCount();} + /** Recherche d'un objet. + * @param pObj Adresse de l'objet à rechercher. + * @return Index de l'objet ou -1 si non trouvé.*/ + int FindObject(const ObjectType* pObj)const{return m_ObjectManager.Find(pObj);} + /** Accès à un objet. + * @param nIndex Index de l'objet. + * @return Référence de l'objet.*/ + ObjectType& GetObject(unsigned int nIndex){return m_ObjectManager.Item(nIndex);} + /** Accès constant à un objet. + * @param nIndex Index de l'objet. + * @return Référence de l'objet.*/ + const ObjectType& GetObject(unsigned int nIndex)const{return m_ObjectManager.Item(nIndex);} + /** @} */ + + /** @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();} + /** @} */ }; Index: FileSystemStandard.h =================================================================== RCS file: /cvsroot/wxdevcenter/wxDevCenter/include/wxDevCenter/FileSystemStandard.h,v retrieving revision 1.9.2.1 retrieving revision 1.9.2.2 diff -C2 -d -r1.9.2.1 -r1.9.2.2 *** FileSystemStandard.h 8 Mar 2005 18:46:24 -0000 1.9.2.1 --- FileSystemStandard.h 15 Mar 2005 21:27:31 -0000 1.9.2.2 *************** *** 36,39 **** --- 36,53 ---- { + #define WXDC_FS_DIRTYPE_NORMAL 0x0002 // WXDC_DOCMANAGER_TYPE_DIRECTORY + #define WXDC_FS_DIRTYPE_DESKTOP 0x0003 // WXDC_DOCMANAGER_TYPE_DESKTOP + #define WXDC_FS_DIRTYPE_HOME 0x0004 // WXDC_DOCMANAGER_TYPE_HOME + #define WXDC_FS_DIRTYPE_DOC 0x0005 // WXDC_DOCMANAGER_TYPE_DOCUMENTS + #define WXDC_FS_DIRTYPE_MOUNT 0x0006 // WXDC_DOCMANAGER_TYPE_COMPUTER + + #define WXDC_FS_DIRTYPE_FLOPPY 0x0007 // WXDC_DOCMANAGER_TYPE_FLOPPY + #define WXDC_FS_DIRTYPE_HARDDRIVE 0x0008 // WXDC_DOCMANAGER_TYPE_HARDDRIVE + #define WXDC_FS_DIRTYPE_CDROM 0x0009 // WXDC_DOCMANAGER_TYPE_CDROM + #define WXDC_FS_DIRTYPE_RAMDISK 0x0010 // WXDC_DOCMANAGER_TYPE_RAMDISK + #define WXDC_FS_DIRTYPE_REMOTE 0x0011 // WXDC_DOCMANAGER_TYPE_REMOTE + + #define WXDC_FS_DIRTYPE_NB 0x0012 // Nombre de type de répertoires. + /** Classe de base pour les systèmes de fichiers directs. * Implémentation partielle commune aux systèmes de fichiers réels (physiques) comme ceux de Windows ou Unix. *************** *** 52,55 **** --- 66,75 ---- virtual wxImageList* GetImageList(int width); virtual int GetFileType(const FilePath& strPath); + + protected: + /** Retourne le type de répertoire. + * @param strPath Chemin à tester. + * @return Type de répertoire si celui-ci est un répertoire système, 0 sinon.*/ + virtual int GetDirectorySystemType(FilePath strPath)=0; }; Index: Application.h =================================================================== RCS file: /cvsroot/wxdevcenter/wxDevCenter/include/wxDevCenter/Application.h,v retrieving revision 1.8.2.1 retrieving revision 1.8.2.2 diff -C2 -d -r1.8.2.1 -r1.8.2.2 *** Application.h 8 Mar 2005 17:26:27 -0000 1.8.2.1 --- Application.h 15 Mar 2005 21:27:31 -0000 1.8.2.2 *************** *** 28,32 **** #include <wxDevCenter/Plugin.h> #include <wxDevCenter/Project.h> ! #include <wxDevCenter/DocManager.h> #include <wxDevCenter/FileSystem.h> #include <wxDevCenter/Config.h> --- 28,32 ---- #include <wxDevCenter/Plugin.h> #include <wxDevCenter/Project.h> ! #include <wxDevCenter/DocView.h> #include <wxDevCenter/FileSystem.h> #include <wxDevCenter/Config.h> Index: Frame.h =================================================================== RCS file: /cvsroot/wxdevcenter/wxDevCenter/include/wxDevCenter/Frame.h,v retrieving revision 1.4 retrieving revision 1.4.2.1 diff -C2 -d -r1.4 -r1.4.2.1 *** Frame.h 7 Mar 2005 15:23:02 -0000 1.4 --- Frame.h 15 Mar 2005 21:27:31 -0000 1.4.2.1 *************** *** 171,175 **** virtual void OnViewChanging(View *pOldView=NULL, View *pNewView=NULL); virtual void OnViewChanged(View *pNewView=NULL, View *pOldView=NULL); ! virtual void DeleteView(View *pView)=0; public: virtual void ScrollToView(View *pView)=0; --- 171,175 ---- virtual void OnViewChanging(View *pOldView=NULL, View *pNewView=NULL); virtual void OnViewChanged(View *pNewView=NULL, View *pOldView=NULL); ! virtual void RemoveView(View *pView)=0; public: virtual void ScrollToView(View *pView)=0; Index: MDIFrame.h =================================================================== RCS file: /cvsroot/wxdevcenter/wxDevCenter/include/wxDevCenter/MDIFrame.h,v retrieving revision 1.3 retrieving revision 1.3.2.1 diff -C2 -d -r1.3 -r1.3.2.1 *** MDIFrame.h 7 Mar 2005 15:23:02 -0000 1.3 --- MDIFrame.h 15 Mar 2005 21:27:31 -0000 1.3.2.1 *************** *** 48,52 **** // Fonctions virtuelles ! void DeleteView(View *pView); public: MDIFrame(wxWindow *pParent, TopFrame *pTopFrame, wxWindowID id); --- 48,52 ---- // Fonctions virtuelles ! void RemoveView(View *pView); public: MDIFrame(wxWindow *pParent, TopFrame *pTopFrame, wxWindowID id); --- DocManager.h DELETED --- Index: FileSystem.h =================================================================== RCS file: /cvsroot/wxdevcenter/wxDevCenter/include/wxDevCenter/FileSystem.h,v retrieving revision 1.3.2.1 retrieving revision 1.3.2.2 diff -C2 -d -r1.3.2.1 -r1.3.2.2 *** FileSystem.h 8 Mar 2005 18:46:24 -0000 1.3.2.1 --- FileSystem.h 15 Mar 2005 21:27:31 -0000 1.3.2.2 *************** *** 101,118 **** - - #define WXDC_FS_DIRTYPE_NORMAL 0x0002 // WXDC_DOCMANAGER_TYPE_DIRECTORY - #define WXDC_FS_DIRTYPE_DESKTOP 0x0003 // WXDC_DOCMANAGER_TYPE_DESKTOP - #define WXDC_FS_DIRTYPE_HOME 0x0004 // WXDC_DOCMANAGER_TYPE_HOME - #define WXDC_FS_DIRTYPE_DOC 0x0005 // WXDC_DOCMANAGER_TYPE_DOCUMENTS - #define WXDC_FS_DIRTYPE_MOUNT 0x0006 // WXDC_DOCMANAGER_TYPE_COMPUTER - - #define WXDC_FS_DIRTYPE_FLOPPY 0x0007 // WXDC_DOCMANAGER_TYPE_FLOPPY - #define WXDC_FS_DIRTYPE_HARDDRIVE 0x0008 // WXDC_DOCMANAGER_TYPE_HARDDRIVE - #define WXDC_FS_DIRTYPE_CDROM 0x0009 // WXDC_DOCMANAGER_TYPE_CDROM - #define WXDC_FS_DIRTYPE_RAMDISK 0x0010 // WXDC_DOCMANAGER_TYPE_RAMDISK - #define WXDC_FS_DIRTYPE_REMOTE 0x0011 // WXDC_DOCMANAGER_TYPE_REMOTE - - /** Classe abstraite représentant un système de fichier. * Elle autorise la manipulation de fichier et leur ennumération. --- 101,104 ---- *************** *** 165,172 **** * @return Retourne vrai si c'est un répertoire.*/ virtual bool IsDirectory(FilePath strPath)=0; - /** Retourne le type interne de répertoire système. - * @param strPath Chemin à tester. - * @return Type de répertoire si celui-ci est un répertoire système, 0 sinon.*/ - virtual int GetDirectorySystemType(FilePath strPath)=0; /** Retourne le répertoire parent. * @param strPath Chemin dont le parent doit être retourné. --- 151,154 ---- |