Update of /cvsroot/wxdevcenter/wxDevCenter/include/wxDevCenter In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29232/include/wxDevCenter Modified Files: Application.h DocView.h FileSystem.h FileSystemStandard.h Frame.h MDIFrame.h Project.h Added Files: Manager.h Removed Files: DocManager.h Log Message: Merge de la branche "manager_virtualization". Index: Project.h =================================================================== RCS file: /cvsroot/wxdevcenter/wxDevCenter/include/wxDevCenter/Project.h,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** Project.h 7 Mar 2005 15:23:02 -0000 1.4 --- Project.h 16 Mar 2005 14:27:36 -0000 1.5 *************** *** 30,33 **** --- 30,34 ---- #define __WXDEVCENTER_PROJECT + #include <wxDevCenter/Manager.h> #include <wxDevCenter/FileTools.h> #include <wxDevCenter/FileSystem.h> *************** *** 45,49 **** * @warning Les classes de projets doivent impérativement être RTTI-dynamiques et leurs constructeurs ne peuvent prendre aucun paramètre. */ ! class WXDC_DLL_BASE Project : public wxObject { DECLARE_DYNAMIC_CLASS(Project); --- 46,50 ---- * @warning Les classes de projets doivent impérativement être RTTI-dynamiques et leurs constructeurs ne peuvent prendre aucun paramètre. */ ! class WXDC_DLL_BASE Project : public ManagedObject { DECLARE_DYNAMIC_CLASS(Project); *************** *** 102,105 **** --- 103,107 ---- + /** Classe de patron de projet. * Utilisé pour enregistrer les différents types de projets. *************** *** 110,128 **** * - Les infos RTTI de la classe du projet. */ ! class WXDC_DLL_BASE ProjectTemplate : public wxObject { protected: - /** Nom du type de projet.*/ - wxString m_strName; - /** Description du type de projet.*/ - wxString m_strDescript; /** Chemin relatif de son icone.*/ wxString m_strIcon; - /** Extensions des fichiers du type de projet.*/ wxArrayString m_strExtArray; - - /** Informations RTTI.*/ - wxClassInfo *m_pProjectClassInfo; public: /** Constructeur par défaut. --- 112,122 ---- * - Les infos RTTI de la classe du projet. */ ! class WXDC_DLL_BASE ProjectTemplate : public ObjectTemplate<Project> { protected: /** Chemin relatif de son icone.*/ wxString m_strIcon; /** Extensions des fichiers du type de projet.*/ wxArrayString m_strExtArray; public: /** Constructeur par défaut. *************** *** 164,168 **** /** Crée un objet projet. * Ne fait que allouer la mémoire et appeler le constructeur par défaut.*/ ! Project* CreateProject(); }; --- 158,162 ---- /** Crée un objet projet. * Ne fait que allouer la mémoire et appeler le constructeur par défaut.*/ ! Project* CreateProject(){return CreateObject();} }; *************** *** 186,204 **** - - /** Définition du type tableau dynamique de patrons de projets. - */ - WX_DEFINE_USER_EXPORTED_ARRAY(ProjectTemplate*, ProjectTemplateArray, class WXDC_DLL_BASE); - - /** Gestionnaire de projets. * Enregistre les différents types de projets et gère le projet actuellement ouvert. */ ! class WXDC_DLL_BASE ProjectManager : protected ProjectTemplateArray { - protected: - /** Projet actuellement ouvert. NULL si aucun.*/ - Project* m_pCurrentProject; - public: /** Constructeur par défaut.*/ --- 180,188 ---- /** Gestionnaire de projets. * Enregistre les différents types de projets et gère le projet actuellement ouvert. */ ! class WXDC_DLL_BASE ProjectManager : public SingleObjectTemplateManager<Project, ProjectTemplate> { public: /** Constructeur par défaut.*/ *************** *** 207,212 **** ~ProjectManager(); - /** Initialisation du gestionnaire.*/ - void Initialize(); /** Finalisation du gestionnaire.*/ void Finalize(); --- 191,194 ---- *************** *** 216,224 **** * @{ */ /** Test si un projet est actuellement ouvert.*/ ! bool HasProject()const{return m_pCurrentProject!=NULL;} /** Retourne l'adresse du projet courant.*/ ! Project* GetProject(){return m_pCurrentProject;} /** Retourne l'adresse du projet courant.*/ ! const Project* GetProject()const{return m_pCurrentProject;} /** Ferme le projet en cours. * @param bForce Vrai si le projet doit être fermé impérativement. --- 198,206 ---- * @{ */ /** Test si un projet est actuellement ouvert.*/ ! bool HasProject()const{return HasObject();} /** Retourne l'adresse du projet courant.*/ ! Project& GetProject(){return GetCurrentObject();} /** Retourne l'adresse du projet courant.*/ ! const Project& GetProject()const{return GetCurrentObject();} /** Ferme le projet en cours. * @param bForce Vrai si le projet doit être fermé impérativement. *************** *** 243,255 **** /** @name Gestion des types de projets. * @{ */ - /** Nombre de type de projets.*/ - unsigned int GetProjectTemplateCount()const{return GetCount();} - /** Accès à un type de projet par son index.*/ - ProjectTemplate* GetProjectTemplate(int index){return Item(index);} - const ProjectTemplate* GetProjectTemplate(int index)const{return Item(index);} - /** Accès à l'index d'un type de projet.*/ - int GetProjectTemplateIndex(const ProjectTemplate* pTemplate); - /** Enregistre un type de projet.*/ - bool RegisterProjectType(ProjectTemplate* pTemplate); /** Retourne le wildcard de tous les types de projets. * @param bShowStarDotStar Si vrai, ajoute le wildcard "*.*". --- 225,228 ---- Index: DocView.h =================================================================== RCS file: /cvsroot/wxdevcenter/wxDevCenter/include/wxDevCenter/DocView.h,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** DocView.h 7 Mar 2005 15:23:02 -0000 1.7 --- DocView.h 16 Mar 2005 14:27:36 -0000 1.8 *************** *** 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,41 **** --- 38,62 ---- // 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> *************** *** 43,51 **** { - // Déclaration des classes utilisées. class Application; class DocManager; class DocTemplate; class Archive; class ViewFrame; --- 64,72 ---- { // 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; --- 75,78 ---- *************** *** 61,64 **** --- 81,88 ---- 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; --- 104,112 ---- #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. --- 129,134 ---- 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. --- 167,172 ---- /** 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; --- 195,203 ---- ! /** ! * 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); --- 208,222 ---- 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: --- 250,253 ---- *************** *** 284,386 **** }; - /** Interface de description d'une action utilisateur. - * Classe interface decrivant une action utilisateur pouvant être annulée par une commande "Undo" - * et fournissant toutes les données pour permettre au document de revenir à l'état d'avant l'action. - */ - class WXDC_DLL_BASE Action : public wxObject - { - protected: - /** Code de référence du type d'action.*/ - unsigned int m_nCode; - public: - Action(unsigned int nCode); - /** Retourne le code de l'action.*/ - inline unsigned int GetCode()const{return m_nCode;} - /** Fixe le code de l'action.*/ - inline void SetCode(unsigned int nCode){m_nCode=nCode;} - }; - - - /** Interface "document" implémentant des actions. - * Interfaces pour les documents implémentants des actions et une pile d'actions pour le retour arrière "Undo". - */ - class WXDC_DLL_BASE ActionDocument : public Document - { - /** Déclaration de classe dynamique. Déclare la classe comme pouvant être crée dynamiquement depuis ses infos RTTI de caractère.*/ - DECLARE_DYNAMIC_CLASS(wxDevCenter::ActionDocument); - protected: - /** Définit le type tableau dynamique d'actions ActionArray.*/ - WX_DEFINE_USER_EXPORTED_ARRAY(Action*, ActionArray, class WXDC_DLL_BASE); - /** Tableau dynamique des actions.*/ - ActionArray m_ActionArray; - /** Taille maximale pour le tableau dynamique des fonctions.*/ - int m_iActionArrayMaxSize; - public: - ActionDocument(); - virtual ~ActionDocument(); - - /** Fixe le nombre maximum d'annulation d'action possible. - * Fixe la taille du tableau des dernières actions effectuées.*/ - void SetUndoListSize(int iSize); - /** Retourne le nombre maximum d'annulation d'action possible. - * Retourne la taille du tableau des dernières actions effectuées.*/ - int GetUndoListSize()const{return m_iActionArrayMaxSize;} - /** Retourne le nombre d'annulations d'actions possibles. - * Retourne le nombre d'actions contenues dans le tableau des dernières actions effectuées.*/ - int GetUndoActionCount()const{return m_ActionArray.GetCount();} - /** Annule la dernière action effectuée. - * Restore l'état du document d'avant la dernière action. - * La fonction de base supprime l'action de la liste mais ne rafraichit pas les vues attachées.*/ - virtual void Undo(); - protected: - /** Retourne la dernière action effectuée si il y en a une.*/ - Action* GetUndoAction(){return m_ActionArray.GetCount()==0?NULL:m_ActionArray[m_ActionArray.GetCount()-1];}// Retourne la dernière action. - /** Ajoute une action. - * Ajoute une action à la liste des dernières actions. - * La fonction de base ne fait qu'ajouter l'action à la liste mais n'exécute pas cette action ni ne rafraichis les vues attachées.*/ - void AddAction(Action *pAction); - }; - - - - - - /** Classe de base de déclaration de types de documents. - * Cette classe (et surtout son constructeur) devrait être suffisante. - * Vous pouvez dériver cette classe pour ajouter des traitements spécifiques (ajouts d'autres vues ...) mais il faudra absolumant appeler les fonctions de base. - */ - class WXDC_DLL_BASE DocType : public DocTemplate - { - public: - /** Constructeur par défaut. - * Les paramètres de ce constructeur devraient être suffisants dans la majorité des cas. - * @param strDocName Nom du document associé. - * @param pDocClassInfo RTTI de la classe du document. - * @param strDocDescripton Description du document. - * @param strExt Liste des extensions (sans point ni étoile) séparés par des points-virgules ';' (exemple : "txt;log" ou "bmp;png;gif;jpg;jpeg"). - * @param strViewName Nom de la vue associée. - * @param pViewClassInfo RTTI de la classe de la vue. - * @param strViewDescripton Description de la vue. - * @param strIconBundleName Nom du jeu d'icones système à utiliser. - * @param pMiniDocClassInfo RTTI de la classe de mini-document. - */ - DocType(wxString strDocName, wxClassInfo *pDocClassInfo, wxString strDocDescripton, wxString strExt, - wxString strViewName, wxClassInfo *pViewClassInfo, wxString strViewDescripton, wxString strIconBundleName, wxClassInfo *pMiniDocClassInfo = NULL); - /** Destructeur.*/ - virtual ~DocType(void); - - /** Initialisation. - * Permet d'initialiser des données spécifiques aux types de documents comme des données globales/statiques. - * Appelé avant toute création d'un document de ce type. - * @return Si faux le type de documents ne sera pas utilisé. - */ - virtual bool Initialize(); - - /** Nettoyage. - * Appelé pendant le désenregistrement du type de document (fin de l'appli ...). - * Permet de nettoyer des données spécifiques aux types de documents comme des données globales/statiques. - */ - virtual void Free(); - }; --- 299,302 ---- *************** *** 502,505 **** --- 418,784 ---- + + /** + * Patron de vue. + */ + 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; + 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; + /** @}*/ + }; + + + + + + + ////////////////////////////////////////////////////////////////////// + // 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); + /** @}*/ + + + 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" + * et fournissant toutes les données pour permettre au document de revenir à l'état d'avant l'action. + */ + class WXDC_DLL_BASE Action : public wxObject + { + protected: + /** Code de référence du type d'action.*/ + unsigned int m_nCode; + public: + Action(unsigned int nCode); + /** Retourne le code de l'action.*/ + inline unsigned int GetCode()const{return m_nCode;} + /** Fixe le code de l'action.*/ + inline void SetCode(unsigned int nCode){m_nCode=nCode;} + }; + + + /** Interface "document" implémentant des actions. + * Interfaces pour les documents implémentants des actions et une pile d'actions pour le retour arrière "Undo". + */ + class WXDC_DLL_BASE ActionDocument : public Document + { + /** Déclaration de classe dynamique. Déclare la classe comme pouvant être crée dynamiquement depuis ses infos RTTI de caractère.*/ + DECLARE_DYNAMIC_CLASS(wxDevCenter::ActionDocument); + protected: + /** Définit le type tableau dynamique d'actions ActionArray.*/ + WX_DEFINE_USER_EXPORTED_ARRAY(Action*, ActionArray, class WXDC_DLL_BASE); + /** Tableau dynamique des actions.*/ + ActionArray m_ActionArray; + /** Taille maximale pour le tableau dynamique des fonctions.*/ + int m_iActionArrayMaxSize; + public: + ActionDocument(); + virtual ~ActionDocument(); + + /** Fixe le nombre maximum d'annulation d'action possible. + * Fixe la taille du tableau des dernières actions effectuées.*/ + void SetUndoListSize(int iSize); + /** Retourne le nombre maximum d'annulation d'action possible. + * Retourne la taille du tableau des dernières actions effectuées.*/ + int GetUndoListSize()const{return m_iActionArrayMaxSize;} + /** Retourne le nombre d'annulations d'actions possibles. + * Retourne le nombre d'actions contenues dans le tableau des dernières actions effectuées.*/ + int GetUndoActionCount()const{return m_ActionArray.GetCount();} + /** Annule la dernière action effectuée. + * Restore l'état du document d'avant la dernière action. + * La fonction de base supprime l'action de la liste mais ne rafraichit pas les vues attachées.*/ + virtual void Undo(); + protected: + /** Retourne la dernière action effectuée si il y en a une.*/ + Action* GetUndoAction(){return m_ActionArray.GetCount()==0?NULL:m_ActionArray[m_ActionArray.GetCount()-1];}// Retourne la dernière action. + /** Ajoute une action. + * Ajoute une action à la liste des dernières actions. + * La fonction de base ne fait qu'ajouter l'action à la liste mais n'exécute pas cette action ni ne rafraichis les vues attachées.*/ + void AddAction(Action *pAction); + }; + + + + + + /** Classe de base de déclaration de types de documents. + * Cette classe (et surtout son constructeur) devrait être suffisante. + * Vous pouvez dériver cette classe pour ajouter des traitements spécifiques (ajouts d'autres vues ...) mais il faudra absolumant appeler les fonctions de base. + */ + class WXDC_DLL_BASE DocType : public DocTemplate + { + protected: + /** Unique vue attachée.*/ + ViewTemplate m_ViewTemplate; + public: + /** Constructeur par défaut. + * Les paramètres de ce constructeur devraient être suffisants dans la majorité des cas. + * @param strDocName Nom du document associé. + * @param pDocClassInfo RTTI de la classe du document. + * @param strDocDescripton Description du document. + * @param strExt Liste des extensions (sans point ni étoile) séparés par des points-virgules ';' (exemple : "txt;log" ou "bmp;png;gif;jpg;jpeg"). + * @param strViewName Nom de la vue associée. + * @param pViewClassInfo RTTI de la classe de la vue. + * @param strViewDescripton Description de la vue. + * @param strIconBundleName Nom du jeu d'icones système à utiliser. + * @param pMiniDocClassInfo RTTI de la classe de mini-document. + */ + DocType(wxString strDocName, wxClassInfo *pDocClassInfo, wxString strDocDescripton, wxString strExt, + wxString strViewName, wxClassInfo *pViewClassInfo, wxString strViewDescripton, wxString strIconBundleName, wxClassInfo *pMiniDocClassInfo = NULL); + /** Destructeur.*/ + virtual ~DocType(void); + + /** Initialisation. + * Permet d'initialiser des données spécifiques aux types de documents comme des données globales/statiques. + * Appelé avant toute création d'un document de ce type. + * @return Si faux le type de documents ne sera pas utilisé. + */ + virtual bool Initialize(); + + /** Nettoyage. + * Appelé pendant le désenregistrement du type de document (fin de l'appli ...). + * Permet de nettoyer des données spécifiques aux types de documents comme des données globales/statiques. + */ + virtual void Free(); + }; + + + + + + /** Evenement déclenchée par les minivues.*/ class WXDC_DLL_BASE MiniViewEvent : public wxNotifyEvent --- NEW FILE: Manager.h --- (This appears to be a binary file; contents omitted.) Index: FileSystemStandard.h =================================================================== RCS file: /cvsroot/wxdevcenter/wxDevCenter/include/wxDevCenter/FileSystemStandard.h,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** FileSystemStandard.h 7 Mar 2005 15:23:02 -0000 1.9 --- FileSystemStandard.h 16 Mar 2005 14:27:36 -0000 1.10 *************** *** 36,39 **** --- 36,57 ---- { + #define WXDC_STDFS_NONE 0x0000 + #define WXDC_STDFS_UNKNOW 0x0001 + + #define WXDC_STDFS_DIRTYPE_NORMAL 0x0002 // WXDC_DOCMANAGER_TYPE_DIRECTORY + #define WXDC_STDFS_DIRTYPE_DESKTOP 0x0003 // WXDC_DOCMANAGER_TYPE_DESKTOP + #define WXDC_STDFS_DIRTYPE_HOME 0x0004 // WXDC_DOCMANAGER_TYPE_HOME + #define WXDC_STDFS_DIRTYPE_DOC 0x0005 // WXDC_DOCMANAGER_TYPE_DOCUMENTS + #define WXDC_STDFS_DIRTYPE_MOUNT 0x0006 // WXDC_DOCMANAGER_TYPE_COMPUTER + + #define WXDC_STDFS_DIRTYPE_FLOPPY 0x0007 // WXDC_DOCMANAGER_TYPE_FLOPPY + #define WXDC_STDFS_DIRTYPE_HARDDRIVE 0x0008 // WXDC_DOCMANAGER_TYPE_HARDDRIVE + #define WXDC_STDFS_DIRTYPE_CDROM 0x0009 // WXDC_DOCMANAGER_TYPE_CDROM + #define WXDC_STDFS_DIRTYPE_RAMDISK 0x000A // WXDC_DOCMANAGER_TYPE_RAMDISK + #define WXDC_STDFS_DIRTYPE_REMOTE 0x000B // WXDC_DOCMANAGER_TYPE_REMOTE + + #define WXDC_STDFS_FILETYPES 0x000C // Premier type de fichier + + /** 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. *************** *** 42,45 **** --- 60,66 ---- { public: + virtual wxString GetFileSystemName()const{return WXDC_SYSTEM_STDFS_NAME;} + virtual wxIconBundle GetIconBundle()const{return wxGetApp().LoadAppIconBundle("desktop");} + wxString GetProtocoleName()const{return "file";} bool CreateDirectory(FilePath strDir); *************** *** 49,52 **** --- 70,79 ---- 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 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** Application.h 7 Mar 2005 15:23:02 -0000 1.8 --- Application.h 16 Mar 2005 14:27:36 -0000 1.9 *************** *** 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> *************** *** 160,165 **** ProjectManager& GetProjectManager(){return m_ProjectManager;} /** Projet.*/ ! Project* GetProject(){return m_ProjectManager.GetProject();} ! const Project* GetProject()const{return m_ProjectManager.GetProject();} /** @}*/ --- 160,165 ---- ProjectManager& GetProjectManager(){return m_ProjectManager;} /** Projet.*/ ! Project& GetProject(){return m_ProjectManager.GetProject();} ! const Project& GetProject()const{return m_ProjectManager.GetProject();} /** @}*/ Index: Frame.h =================================================================== RCS file: /cvsroot/wxdevcenter/wxDevCenter/include/wxDevCenter/Frame.h,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** Frame.h 7 Mar 2005 15:23:02 -0000 1.4 --- Frame.h 16 Mar 2005 14:27:36 -0000 1.5 *************** *** 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.4 diff -C2 -d -r1.3 -r1.4 *** MDIFrame.h 7 Mar 2005 15:23:02 -0000 1.3 --- MDIFrame.h 16 Mar 2005 14:27:36 -0000 1.4 *************** *** 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 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** FileSystem.h 25 Feb 2005 20:45:55 -0000 1.3 --- FileSystem.h 16 Mar 2005 14:27:36 -0000 1.4 *************** *** 33,36 **** --- 33,37 ---- #define __WXDEVCENTER_FILESYSTEM + #include <wxDevCenter/Manager.h> #include <wxDevCenter/FileTools.h> *************** *** 100,117 **** - - #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 ---- *************** *** 121,127 **** * @see UnixStandardFileSystem */ ! class WXDC_DLL_BASE FileSystem : public wxObject { public: /** @name Enumération du contenu. * @{ */ --- 108,123 ---- * @see UnixStandardFileSystem */ ! class WXDC_DLL_BASE FileSystem : public wxObject, public InitializableInterface { public: + /** @name Propriétés générales. + * @{ */ + /** Retourne le nom du système de fichier. + * Le nom n'est qu'une donnée de présentation est en aucun cas une clef unique.*/ + virtual wxString GetFileSystemName()const{return wxT("");} + /** Retourne le bundle d'icones du système de fichier.*/ + virtual wxIconBundle GetIconBundle()const{return wxIconBundle();} + /** @} */ + /** @name Enumération du contenu. * @{ */ *************** *** 155,162 **** * @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 ---- *************** *** 212,278 **** * Fait le lien entre les noms de fichiers, les systèmes de fichiers et les archives. */ ! class WXDC_DLL_BASE FileSystemManager : public wxObject { public: - /** Structure d'association des systèmes de fichiers avec d'autres infos.*/ - struct WXDC_DLL_BASE FileSystemManagerAssoc - { - /** Adresse de l'instance du système de fichier.*/ - FileSystem* pFileSystem; - /** Nom du système de fichier.*/ - wxString strName; - /** Bundle d'icone associé.*/ - wxIconBundle Icones; - }; - protected: - WX_DEFINE_USER_EXPORTED_ARRAY(FileSystemManagerAssoc*, FileSystemManagerAssocArray, class WXDC_DLL_BASE); - - /** Tableau des systèmes de fichiers enregistrés.*/ - FileSystemManagerAssocArray m_arFileSystems; - public: FileSystemManager(); virtual ~FileSystemManager(); - /** Enregistre un nouveau système de fichier. - * @param pFileSystem Système de fichier à enregistrer. - * @param strName Nom de présentation du système. - * @param Icones Bundle d'icone pour la représentation graphique. - */ - void RegisterFileSystem(FileSystem* pFileSystem, const wxString& strName, const wxIconBundle& Icones); - - /** Désinscrit le système de fichier. - * Le système de fichier est désinscrit mais pas détruit. - * @param pFileSystem Système de fichier à désinscrire. - */ - void RemoveFileSystem(FileSystem* pFileSystem); - - /** Supprime le système de fichier. - * Le système de fichier est désinscrit puis détruit. - * @param pFileSystem Système de fichier à supprimer. - */ - void DeleteFileSystem(FileSystem* pFileSystem); - - /** Retourne le nombre de systèmes de fichiers enregistrés. - * @return Nombre de systèmes enregistrés. - */ - unsigned int GetCount(); - - /** Cherche si un système de fichier est attaché. - * @param pFileSystem Système de fichier à supprimer. - * @return Index du système de fichier et -1 si non attaché.*/ - int Find(FileSystem* pFileSystem); - - /** Retourne une référence vers la description demandée. - * @param nIndex Indice du système de fichier. - * @return Référence de l'association du système de fichier. - */ - FileSystemManagerAssoc& GetFileSystem(int nIndex){return *m_arFileSystems[nIndex];} - - /** Retourne une référence vers la description demandée. - * @param pFileSystem Systeme de fichier demandé. - * @return Référence de l'association du système de fichier. - */ - FileSystemManagerAssoc& GetFileSystem(FileSystem* pFileSystem){return *m_arFileSystems[Find(pFileSystem)];} - /** Retourne le système de fichier correspondant à un chemin de fichier. * @param strPath Chemin du fichier. --- 204,213 ---- * Fait le lien entre les noms de fichiers, les systèmes de fichiers et les archives. */ ! class WXDC_DLL_BASE FileSystemManager : public InitializableObjectManager<FileSystem> { public: FileSystemManager(); virtual ~FileSystemManager(); /** Retourne le système de fichier correspondant à un chemin de fichier. * @param strPath Chemin du fichier. |