# -*- coding: iso-8859-1 -*- # Copyright 20003 - 2008: Julien Bourdaillet (julien.bourdaillet@lip6.fr), Jean-Gabriel Ganascia (jean-gabriel.ganascia@lip6.fr) # This file is part of MEDITE. # # MEDITE is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # MEDITE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Foobar; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #---------------------------------------------------------------------------- # Nom: FormulairesMenuGenetique.py # Objet: Ce fichier regroupe les differentes classes de formulaire # concernant le menu Genetique #---------------------------------------------------------------------------- #from wxPython.wx import * import wx import os #from wxPython.lib.filebrowsebutton import FileBrowseButton,DirBrowseButton from wx.lib.filebrowsebutton import FileBrowseButton,DirBrowseButton from Utile.constantesGUI import * from Utile.exceptionsDonnees import * from GUI.MainPanel import MainPanel import Controleurs.DGManager from Donnees.planTravail import * #--------------------------------------------------------------------------------------------------# # Classe qui cree le formulaire permettant de charger les informations du dossier # genetique courant sur le plan de travail class FormChargerDG(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent, -1,u"Charger le dossier g\xe9n\xe9tique",pos = wx.Point(200,200), size = ( 320,150), style=wx.DEFAULT_FRAME_STYLE|wx.NO_FULL_REPAINT_ON_RESIZE|wx.FRAME_FLOAT_ON_PARENT) panelDG=wx.Panel(self,-1) self.fenetreMedite=parent textAuteur=wx.StaticText(panelDG,-1,"Auteur : ",wx.Point(10,12)) #listeAuteurs=self.fenetreMedite.cdon.getListeNomsAuteurs() self.dgm = Controleurs.DGManager.DGManager() listeAuteurs = self.dgm.getListeAuteurs() self.ctrlAuteur = wx.ComboBox(panelDG,-1, listeAuteurs[0],(75,10), (150, -1), listeAuteurs, wx.CB_DROPDOWN | wx.CB_READONLY) self.Bind(wx.EVT_TEXT, self.EvtCtrlAuteur, self.ctrlAuteur) textOeuvre=wx.StaticText(panelDG,-1,"Oeuvre : ",wx.Point(10,42)) #listeOeuvres=self.fenetreMedite.cdon.getListeTitresByAuteur(self.ctrlAuteur.GetStringSelection()) listeOeuvres=self.dgm.getListeOeuvresAuteur(self.ctrlAuteur.GetStringSelection()) self.ctrlOeuvre = wx.ComboBox(panelDG,-1, listeOeuvres[0],(75,40), (150, -1), listeOeuvres, wx.CB_DROPDOWN | wx.CB_READONLY) bValider = wx.Button(panelDG, ID_OK, "VALIDER", wx.Point(50, 80)) wx.EVT_BUTTON(self, ID_OK, self.onOk) bAnnuler = wx.Button(panelDG, ID_ANNULER, "ANNULER", wx.Point(180, 80)) wx.EVT_BUTTON(self, ID_ANNULER, self.onAnnuler) bValider.SetFocus() def EvtCtrlAuteur(self,event): if (self.ctrlAuteur.GetStringSelection()!=""): #on recupere la liste des oeuvres de l'auteur selectionné #listeOeuvres=self.fenetreMedite.cdon.getListeTitresByAuteur(self.ctrlAuteur.GetStringSelection()) listeOeuvres=self.dgm.getListeOeuvresAuteur(self.ctrlAuteur.GetStringSelection()) self.ctrlOeuvre.Clear() self.ctrlOeuvre.AppendItems(listeOeuvres) self.ctrlOeuvre.Refresh() def onOk(self,event): if (self.ctrlOeuvre.GetStringSelection()!=""): # on supprime les panels et on en recrée un nouveau self.fenetreMedite.nb.DeleteAllPages() self.fenetreMedite.listePlanTravail.flushListe() self.fenetreMedite.createTreePanel() # on crée une nouvelle liste dans laquelle on insère un plan self.fenetreMedite.listePlanTravail = ListePlanTravail() plan = PlanTravail("","","","","","",Parametres(0,0,0,0)) self.fenetreMedite.listePlanTravail.appendPlanTravail(plan) panel = MainPanel(self.fenetreMedite.nb,plan) panel.initialised = False self.fenetreMedite.nb.AddPage(panel,plan.getEtatSource()+"-"+plan.getEtatCible()) self.fenetreMedite.nb.SetSelection(self.fenetreMedite.nb.GetPageCount()-1) # self.fenetreMedite.getCompPanel().textInfoAuteur.SetLabel( self.ctrlAuteur.GetStringSelection()) self.fenetreMedite.getCompPanel().textInfoOeuvre.SetLabel( self.ctrlOeuvre.GetStringSelection()) ### Mise a jour du plan de travail self.fenetreMedite.getPlanTravail().setAuteur(self.ctrlAuteur.GetStringSelection()) self.fenetreMedite.getPlanTravail().setOeuvre(self.ctrlOeuvre.GetStringSelection()) self.fenetreMedite.getPlanTravail().setVersionSource('') self.fenetreMedite.getPlanTravail().setEtatSource('') self.fenetreMedite.getPlanTravail().setVersionCible('') self.fenetreMedite.getPlanTravail().setEtatCible('') ### self.fenetreMedite.disableDGCharge() self.fenetreMedite.enableMenuDGCharge() ### self.fenetreMedite.DGAuteur = self.ctrlAuteur.GetStringSelection() self.fenetreMedite.DGOeuvre = self.ctrlOeuvre.GetStringSelection() self.fenetreMedite.DGLoaded = True self.fenetreMedite.treePanel.reloadTree() self.fenetreMedite.reloadNavMenu() self.Close() else: text=u"Vous devez s\xe9lectionner une oeuvre" dlg = wx.MessageDialog(self, text, 'Attention !',wx.OK) dlg.ShowModal() dlg.Destroy() def onAnnuler(self,event): self.Close() # Fenetre de dialogue pour choisir un auteur class SelectionListe(wx.SingleChoiceDialog): def __init__(self, parent,pPhrase, pTitre, pListe): wx.SingleChoiceDialog.__init__(self, parent,pPhrase,pTitre,pListe, wx.OK|wx.CANCEL) #Classe qui cree un formulaire qui recupere l'auteur,l'oeuvre selectionnes et le nom du dossier # saisi. #Appelle la methode creerDossierVersion du controleur CDossierGenetique class FormCreerVersion(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent, -1,u"Cr\xe9er un dossier Version",pos = wx.Point(200,200), size = (320,185), style=wx.DEFAULT_FRAME_STYLE|wx.NO_FULL_REPAINT_ON_RESIZE|wx.FRAME_FLOAT_ON_PARENT) self.fenetreMedite=parent panel=wx.Panel(self,-1) textAuteur=wx.StaticText(panel,-1,"Auteur : ",wx.Point(15,12)) #listeAuteurs=self.fenetreMedite.cdon.getListeNomsAuteurs() self.dgm = Controleurs.DGManager.DGManager() listeAuteurs = self.dgm.getListeAuteurs() self.ctrlAuteur = wx.ComboBox(panel,-1, listeAuteurs[0],(75,10), (150, -1), listeAuteurs, wx.CB_DROPDOWN | wx.CB_READONLY) self.Bind(wx.EVT_TEXT, self.EvtCtrlAuteur, self.ctrlAuteur) textOeuvre=wx.StaticText(panel,-1,"Oeuvre : ",wx.Point(15,42)) #listeOeuvres=self.fenetreMedite.cdon.getListeTitresByAuteur(self.ctrlAuteur.GetStringSelection()) listeOeuvres=self.dgm.getListeOeuvresAuteur(self.ctrlAuteur.GetStringSelection()) self.ctrlOeuvre = wx.ComboBox(panel,-1, listeOeuvres[0],(75,40), (150, -1), listeOeuvres, wx.CB_DROPDOWN | wx.CB_READONLY) textVersion=wx.StaticText(panel,-1,"Version : ",wx.Point(15,72)) self.ctrlVersion=wx.TextCtrl(panel,-1,"",wx.Point(75,70),size=(125,-1)) self.ctrlVersion.SetInsertionPoint(0) bValider = wx.Button(panel, ID_OK, "VALIDER", wx.Point(50, 110)) wx.EVT_BUTTON(self, ID_OK, self.onValider) bAnnuler = wx.Button(panel, ID_ANNULER, "ANNULER", wx.Point(150, 110)) wx.EVT_BUTTON(self, ID_ANNULER, self.onAnnuler) def EvtCtrlAuteur(self,event): if (self.ctrlAuteur.GetStringSelection()!=""): #on recupere la liste des oeuvres de l'auteur selectionné #listeOeuvres=self.fenetreMedite.cdon.getListeTitresByAuteur(self.ctrlAuteur.GetStringSelection()) listeOeuvres=self.dgm.getListeOeuvresAuteur(self.ctrlAuteur.GetStringSelection()) self.ctrlOeuvre.Clear() self.ctrlOeuvre.AppendItems(listeOeuvres) self.ctrlOeuvre.Refresh() def onValider(self,event): nomA = self.ctrlAuteur.GetStringSelection() titreO = self.ctrlOeuvre.GetStringSelection() version = self.ctrlVersion.GetValue() if nomA == '' or titreO == '' or version =='': dlg=wx.MessageDialog(self, 'Vous devez remplir tous les champs !',"Attention",wx.OK) dlg.ShowModal() dlg.Destroy() else : try: #self.fenetreMedite.cdos.creerDossierVersion(nomA,titreO,version) #self.fenetreMedite.cinfos.enregistrerVersion(nomA,titreO,version) self.dgm.addVersion(nomA,titreO,version) self.fenetreMedite.treePanel.reloadTree() self.Close() except AuteurNonTrouve, eANT: dlg = wx.MessageDialog(self, u'Auteur Non Trouv\xe9', 'Attention !',wx.OK) dlg.ShowModal() dlg.Destroy() self.Close() except OeuvreNonTrouvee, eONT: dlg = wx.MessageDialog(self, u'Oeuvre Non Trouv\xe9e' , 'Attention !',wx.OK) dlg.ShowModal() dlg.Destroy() self.Close() except OSError : dlg = wx.MessageDialog(self, u'Ce nom de dossier \xe9xiste d\xe9j\xe0. Veillez \xe0 en entrer un autre.', 'Attention !',wx.OK) dlg.ShowModal() dlg.Destroy() def onAnnuler(self,event): self.Close() #Classe qui cree un formulaire de selection. #A partir de la selection de l'auteur, de l'oeuvre, du dossier version, et du fichier texte, #la classe appelle la methode creerEtat de cDossierGenetique class FormCreerEtat(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent, -1,u"Cr\xe9er un état",pos = wx.Point(200,200), size = ( 330,300), style=wx.DEFAULT_FRAME_STYLE|wx.NO_FULL_REPAINT_ON_RESIZE|wx.FRAME_FLOAT_ON_PARENT) self.fenetreMedite=parent panel=wx.Panel(self,-1) textAuteur=wx.StaticText(panel,-1,"Auteur ",wx.Point(15,12)) #listeAuteurs=self.fenetreMedite.cdon.getListeNomsAuteurs() self.dgm = Controleurs.DGManager.DGManager() listeAuteurs = self.dgm.getListeAuteurs() self.ctrlAuteur = wx.ComboBox(panel,-1, listeAuteurs[0],(75,10), (150, -1), listeAuteurs, wx.CB_DROPDOWN | wx.CB_READONLY) self.Bind(wx.EVT_TEXT, self.EvtCtrlAuteur, self.ctrlAuteur) self.Bind(wx.EVT_COMBOBOX, self.EvtCtrlAuteur, self.ctrlAuteur) textOeuvre=wx.StaticText(panel,-1,"Oeuvre ",wx.Point(15,52)) #listeOeuvres=self.fenetreMedite.cdon.getListeTitresByAuteur(self.ctrlAuteur.GetStringSelection()) listeOeuvres=self.dgm.getListeOeuvresAuteur(self.ctrlAuteur.GetStringSelection()) self.ctrlOeuvre = wx.ComboBox(panel,-1, listeOeuvres[0],(75,50), (150, -1), listeOeuvres, wx.CB_DROPDOWN | wx.CB_READONLY) self.Bind(wx.EVT_TEXT, self.EvtCtrlOeuvre, self.ctrlOeuvre) self.Bind(wx.EVT_COMBOBOX, self.EvtCtrlOeuvre, self.ctrlOeuvre) textVersion=wx.StaticText(panel,-1,"Version ",wx.Point(15,92)) #listeVersions=self.fenetreMedite.cdos.getListeDossiersVersions(self.ctrlAuteur.GetStringSelection(),self.ctrlOeuvre.GetStringSelection()) listeVersions=self.dgm.getListeVersionsDG(self.ctrlAuteur.GetStringSelection(),self.ctrlOeuvre.GetStringSelection()) self.ctrlVersion = wx.ComboBox(panel,-1, listeVersions[0],(75,90), (150, -1), listeVersions, wx.CB_DROPDOWN | wx.CB_READONLY) self.Bind(wx.EVT_TEXT, self.EvtCtrlVersion, self.ctrlVersion) self.Bind(wx.EVT_COMBOBOX, self.EvtCtrlVersion, self.ctrlVersion) ############ textEtatP=wx.StaticText(panel,-1,u"Etat Père ",wx.Point(15,132)) #listeEtatPs=self.fenetreMedite.cdos.getListeVersions(self.ctrlAuteur.GetStringSelection(),self.ctrlOeuvre.GetStringSelection(),self.ctrlVersion.GetStringSelection()) listeEtatPs=self.dgm.getListeEtatsVersion(self.ctrlAuteur.GetStringSelection(),self.ctrlOeuvre.GetStringSelection(),self.ctrlVersion.GetStringSelection()) #listeEtatPs.insert(0,"") self.ctrlEtatP = wx.ComboBox(panel,-1, listeEtatPs[0],(75,130), (150, -1), listeEtatPs, wx.CB_DROPDOWN | wx.CB_READONLY) ############## textFichier=wx.StaticText(panel,-1,"Fichier ",wx.Point(15,172)) self.ctrlFichier=wx.TextCtrl(panel,-1,"",wx.Point(77,170),size=(125,-1),style=wx.TE_READONLY) self.ctrlFichier.SetInsertionPoint(0) bFichier = wx.Button(panel, ID_PARCOURIR, "Parcourir",wx.Point(220,170)) wx.EVT_BUTTON(self, ID_PARCOURIR, self.onParcourir) bValider = wx.Button(panel, ID_OK, "VALIDER", wx.Point(50, 210)) wx.EVT_BUTTON(self, ID_OK, self.onValider) bAnnuler = wx.Button(panel, ID_ANNULER, "ANNULER", wx.Point(150, 210)) wx.EVT_BUTTON(self, ID_ANNULER, self.onAnnuler) def EvtCtrlAuteur(self,event): if (self.ctrlAuteur.GetStringSelection()!=""): #on recupere la liste des oeuvres de l'auteur selectionné #listeOeuvres=self.fenetreMedite.cdon.getListeTitresByAuteur(self.ctrlAuteur.GetStringSelection()) listeOeuvres=self.dgm.getListeOeuvresAuteur(self.ctrlAuteur.GetStringSelection()) self.ctrlOeuvre.Clear() self.ctrlOeuvre.AppendItems(listeOeuvres) self.ctrlOeuvre.SetSelection(0) self.EvtCtrlOeuvre(None) else: self.ctrlOeuvre.Clear() self.ctrlVersion.Clear() self.ctrlEtatP.Clear() self.EvtCtrlOeuvre(None) def EvtCtrlOeuvre(self,event): if (self.ctrlOeuvre.GetStringSelection()!=""): #listeVersions=self.fenetreMedite.cdos.getListeDossiersVersions(self.ctrlAuteur.GetStringSelection(),self.ctrlOeuvre.GetStringSelection()) listeVersions=self.dgm.getListeVersionsDG(self.ctrlAuteur.GetStringSelection(),self.ctrlOeuvre.GetStringSelection()) self.ctrlVersion.Clear() self.ctrlVersion.AppendItems(listeVersions) self.ctrlVersion.SetSelection(0) self.EvtCtrlVersion(None) self.ctrlEtatP.Refresh() else: self.ctrlVersion.Clear() self.ctrlEtatP.Clear() self.EvtCtrlVersion(None) def EvtCtrlVersion(self, event): if (self.ctrlOeuvre.GetStringSelection()!=""): #listeEtats=self.fenetreMedite.cdos.getListeVersions(self.ctrlAuteur.GetStringSelection(),self.ctrlOeuvre.GetStringSelection(),self.ctrlVersion.GetStringSelection()) listeEtatPs=self.dgm.getListeEtatsVersion(self.ctrlAuteur.GetStringSelection(),self.ctrlOeuvre.GetStringSelection(),self.ctrlVersion.GetStringSelection()) #listeEtats.insert(0,"") self.ctrlEtatP.Clear() self.ctrlEtatP.AppendItems(listeEtatPs) self.ctrlEtatP.SetSelection(0) self.ctrlEtatP.Refresh() else: self.ctrlEtatP.Clear() self.ctrlEtatP.Refresh() def onParcourir(self,event): wildcard = "Fichier Texte (*.txt)|*.txt|" \ "All files (*.*)|*.*" dlg = wx.FileDialog(self, "Choisir un fichier", "", "", wildcard, wx.OPEN|wx.MULTIPLE) if dlg.ShowModal() == wx.ID_OK: for path in dlg.GetPaths(): self.pathFichier= path self.ctrlFichier.SetValue(self.pathFichier) dlg.Destroy() def onValider(self,event): if ((self.ctrlVersion.GetStringSelection()!="") & (self.ctrlFichier.GetValue()!="")): try: (dir,base)=os.path.split(self.ctrlFichier.GetValue()) #(versionName,ext)=os.path.splitext(base) # self.fenetreMedite.cdos.creerEtat(self.ctrlAuteur.GetStringSelection(), # self.ctrlOeuvre.GetStringSelection(), # self.ctrlVersion.GetStringSelection(), # self.pathFichier) # self.fenetreMedite.cinfos.enregistrerEtat(self.ctrlAuteur.GetStringSelection(), # self.ctrlOeuvre.GetStringSelection(),base,self.ctrlVersion.GetStringSelection(),self.ctrlEtatP.GetStringSelection()) self.dgm.addEtat(self.ctrlAuteur.GetStringSelection(),self.ctrlOeuvre.GetStringSelection(),self.ctrlVersion.GetStringSelection(), self.pathFichier,self.ctrlEtatP.GetStringSelection()) self.fenetreMedite.treePanel.reloadTree() except AuteurNonTrouve, eANT: dlg = wx.MessageDialog(self, u'Auteur Non Trouv\xe9', 'Attention !',wx.OK) dlg.ShowModal() dlg.Destroy() except OeuvreNonTrouvee, eONT: dlg = wx.MessageDialog(self, u'Oeuvre Non Trouv\xe9e' , 'Attention !',wx.OK) dlg.ShowModal() dlg.Destroy() except FichierExistant, eFE: dlg = FormFicExistant(self, self.fenetreMedite, eFE) dlg.Show(True) self.Close() else: dlg = wx.MessageDialog(self, 'Vous devez remplir tous les champs' , 'Attention !',wx.OK) dlg.ShowModal() dlg.Destroy() def onAnnuler(self,event): self.Close() #Classe qui cree un formulaire qui recupere l'auteur,l'oeuvre et la version selectionnes #et la methode supprimerDossierVersion du controleur CDossierGenetique class FormSupprimerVersion(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent, -1,"Supprimer un dossier Version", pos = wx.Point(200,200) ,size = ( 310,200), style=wx.DEFAULT_FRAME_STYLE|wx.NO_FULL_REPAINT_ON_RESIZE|wx.FRAME_FLOAT_ON_PARENT) self.fenetreMedite=parent panel=wx.Panel(self,-1) textAuteur=wx.StaticText(panel,-1,"Auteur : ",wx.Point(15,12)) #listeAuteurs=self.fenetreMedite.cdon.getListeNomsAuteurs() self.dgm = Controleurs.DGManager.DGManager() listeAuteurs = self.dgm.getListeAuteurs() self.ctrlAuteur = wx.ComboBox(panel,-1, listeAuteurs[0],(75,10), (150, -1), listeAuteurs, wx.CB_DROPDOWN | wx.CB_READONLY) self.Bind(wx.EVT_TEXT, self.EvtCtrlAuteur, self.ctrlAuteur) textOeuvre=wx.StaticText(panel,-1,"Oeuvre : ",wx.Point(15,52)) #listeOeuvres=self.fenetreMedite.cdon.getListeTitresByAuteur(self.ctrlAuteur.GetStringSelection()) listeOeuvres=self.dgm.getListeOeuvresAuteur(self.ctrlAuteur.GetStringSelection()) self.ctrlOeuvre = wx.ComboBox(panel,-1, listeOeuvres[0],(75,50), (150, -1), listeOeuvres, wx.CB_DROPDOWN | wx.CB_READONLY) self.Bind(wx.EVT_TEXT, self.EvtCtrlOeuvre, self.ctrlOeuvre) textVersion=wx.StaticText(panel,-1,"Version : ",wx.Point(20,92)) #listeVersions=self.fenetreMedite.cdos.getListeDossiersVersions(self.ctrlAuteur.GetStringSelection(),self.ctrlOeuvre.GetStringSelection()) listeVersions=self.dgm.getListeVersionsDG(self.ctrlAuteur.GetStringSelection(),self.ctrlOeuvre.GetStringSelection()) self.ctrlVersion = wx.ComboBox(panel,-1, listeVersions[0],(75,90), (150, -1), listeVersions, wx.CB_DROPDOWN | wx.CB_READONLY) bValider = wx.Button(panel, ID_OK, "VALIDER", wx.Point(50, 130)) wx.EVT_BUTTON(self, ID_OK, self.onValider) bAnnuler = wx.Button(panel, ID_ANNULER, "ANNULER", wx.Point(150, 130)) wx.EVT_BUTTON(self, ID_ANNULER, self.onAnnuler) def EvtCtrlAuteur(self,event): if (self.ctrlAuteur.GetStringSelection()!=""): #on recupere la liste des oeuvres de l'auteur selectionné #listeOeuvres=self.fenetreMedite.cdon.getListeTitresByAuteur(self.ctrlAuteur.GetStringSelection()) listeOeuvres=self.dgm.getListeOeuvresAuteur(self.ctrlAuteur.GetStringSelection()) self.ctrlOeuvre.Clear() self.ctrlOeuvre.AppendItems(listeOeuvres) self.ctrlOeuvre.SetSelection(0) self.EvtCtrlOeuvre(None) else: self.ctrlOeuvre.Clear() self.ctrlVersion.Clear() self.ctrlEtatP.Clear() self.EvtCtrlOeuvre(None) def EvtCtrlOeuvre(self,event): if (self.ctrlOeuvre.GetStringSelection()!=""): #listeVersions=self.fenetreMedite.cdos.getListeDossiersVersions(self.ctrlAuteur.GetStringSelection(),self.ctrlOeuvre.GetStringSelection()) listeVersions=self.dgm.getListeVersionsDG(self.ctrlAuteur.GetStringSelection(),self.ctrlOeuvre.GetStringSelection()) self.ctrlVersion.Clear() self.ctrlVersion.AppendItems(listeVersions) self.ctrlVersion.SetSelection(0) else: self.ctrlVersion.Clear() def onValider(self,event): if (self.ctrlVersion.GetStringSelection()!=""): try: dlg=wx.MessageDialog(self, u"Si vous supprimez un dossier version, vous supprimez tous les \xe9l\xe9ments qui s'y rattache.\nVoulez-vous continuez?","Attention!",wx.YES_NO | wx.ICON_EXCLAMATION ) if dlg.ShowModal() ==wx.ID_YES: self.nom = self.ctrlAuteur.GetStringSelection() self.titre = self.ctrlOeuvre.GetStringSelection() self.version = self.ctrlVersion.GetStringSelection() #self.fenetreMedite.cdos.supprimerDossierVersion(self.nom,self.titre,self.version) #self.fenetreMedite.cinfos.supprimerVersion(self.nom,self.titre,self.version) self.dgm.delVersion(self.nom,self.titre,self.version) miseAJEcranVersionSupprimer(self) self.fenetreMedite.treePanel.reloadTree() except IOError, e: pass self.Close() else: dlg = wx.MessageDialog(self,"Vous devez remplir Tous les champs!", 'Attention !',wx.OK) dlg.ShowModal() dlg.Destroy() def onAnnuler(self,event): self.Close() #Classe qui cree un formulaire permettant de selectionner un auteur, une oeuvre, # une version et un état # et d'appeler la methode supprimerEtat du controleur CDossierGenetique class FormSupprimerEtat(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent, -1,u"Supprimer un état",pos = wx.Point(200,200), size = (330,240), style=wx.DEFAULT_FRAME_STYLE|wx.NO_FULL_REPAINT_ON_RESIZE|wx.FRAME_FLOAT_ON_PARENT) self.fenetreMedite=parent panel=wx.Panel(self,-1) textAuteur=wx.StaticText(panel,-1,"Auteur : ",wx.Point(15,12)) #listeAuteurs=self.fenetreMedite.cdon.getListeNomsAuteurs() self.dgm = Controleurs.DGManager.DGManager() listeAuteurs = self.dgm.getListeAuteurs() self.ctrlAuteur = wx.ComboBox(panel,-1, listeAuteurs[0],(75,10), (150, -1), listeAuteurs, wx.CB_DROPDOWN | wx.CB_READONLY) self.Bind(wx.EVT_TEXT, self.EvtCtrlAuteur, self.ctrlAuteur) textOeuvre=wx.StaticText(panel,-1,"Oeuvre : ",wx.Point(15,52)) #listeOeuvres=self.fenetreMedite.cdon.getListeTitresByAuteur(self.ctrlAuteur.GetStringSelection()) listeOeuvres=self.dgm.getListeOeuvresAuteur(self.ctrlAuteur.GetStringSelection()) self.ctrlOeuvre = wx.ComboBox(panel,-1, listeOeuvres[0],(75,50), (150, -1), listeOeuvres, wx.CB_DROPDOWN | wx.CB_READONLY) self.Bind(wx.EVT_TEXT, self.EvtCtrlOeuvre, self.ctrlOeuvre) textVersion=wx.StaticText(panel,-1,"Version : ",wx.Point(15,92)) #listeVersions=self.fenetreMedite.cdos.getListeDossiersVersions(self.ctrlAuteur.GetStringSelection(),self.ctrlOeuvre.GetStringSelection()) listeVersions=self.dgm.getListeVersionsDG(self.ctrlAuteur.GetStringSelection(),self.ctrlOeuvre.GetStringSelection()) self.ctrlVersion = wx.ComboBox(panel,-1, listeVersions[0],(75,90), (150, -1), listeVersions, wx.CB_DROPDOWN | wx.CB_READONLY) self.Bind(wx.EVT_TEXT, self.EvtCtrlVersion, self.ctrlVersion) textEtat=wx.StaticText(panel,-1,"Etat : ",wx.Point(15,132)) #listeEtats=self.fenetreMedite.cdos.getListeVersions(self.ctrlAuteur.GetStringSelection(),self.ctrlOeuvre.GetStringSelection(),self.ctrlVersion.GetStringSelection()) listeEtats=self.dgm.getListeEtatsVersion(self.ctrlAuteur.GetStringSelection(),self.ctrlOeuvre.GetStringSelection(),self.ctrlVersion.GetStringSelection()) #listeEtats.insert(0,"") self.ctrlEtat = wx.ComboBox(panel,-1, listeEtats[0],(75,130), (150, -1), listeEtats, wx.CB_DROPDOWN | wx.CB_READONLY) bValider = wx.Button(panel, ID_OK, "VALIDER", wx.Point(50, 170)) wx.EVT_BUTTON(self, ID_OK, self.onValider) bAnnuler = wx.Button(panel, ID_ANNULER, "ANNULER", wx.Point(150, 170)) wx.EVT_BUTTON(self, ID_ANNULER, self.onAnnuler) def EvtCtrlAuteur(self,event): if (self.ctrlAuteur.GetStringSelection()!=""): #on recupere la liste des oeuvres de l'auteur selectionné #listeOeuvres=self.fenetreMedite.cdon.getListeTitresByAuteur(self.ctrlAuteur.GetStringSelection()) listeOeuvres=self.dgm.getListeOeuvresAuteur(self.ctrlAuteur.GetStringSelection()) self.ctrlOeuvre.Clear() self.ctrlOeuvre.AppendItems(listeOeuvres) self.ctrlOeuvre.SetSelection(0) self.EvtCtrlOeuvre(None) #self.EvtCtrlVersion(NULL) else: self.ctrlOeuvre.Clear() self.ctrlVersion.Clear() self.ctrlEtat.Clear() self.EvtCtrlOeuvre(None) #self.EvtCtrlVersion(NULL) def EvtCtrlOeuvre(self,event): if (self.ctrlOeuvre.GetStringSelection()!=""): #listeVersions=self.fenetreMedite.cdos.getListeDossiersVersions(self.ctrlAuteur.GetStringSelection(),self.ctrlOeuvre.GetStringSelection()) listeVersions=self.dgm.getListeVersionsDG(self.ctrlAuteur.GetStringSelection(),self.ctrlOeuvre.GetStringSelection()) self.ctrlVersion.Clear() self.ctrlVersion.AppendItems(listeVersions) self.ctrlVersion.SetSelection(0) self.EvtCtrlVersion(None) self.ctrlEtat.Refresh() else: self.ctrlVersion.Clear() self.ctrlEtat.Clear() self.EvtCtrlVersion(None) def EvtCtrlVersion(self, event): if (self.ctrlOeuvre.GetStringSelection()!=""): #listeEtats=self.fenetreMedite.cdos.getListeVersions(self.ctrlAuteur.GetStringSelection(),self.ctrlOeuvre.GetStringSelection(),self.ctrlVersion.GetStringSelection()) listeEtats=self.dgm.getListeEtatsVersion(self.ctrlAuteur.GetStringSelection(),self.ctrlOeuvre.GetStringSelection(),self.ctrlVersion.GetStringSelection()) #listeEtats.insert(0,"") self.ctrlEtat.Clear() self.ctrlEtat.AppendItems(listeEtats) self.ctrlEtat.SetSelection(0) self.ctrlEtat.Refresh() else: self.ctrlEtat.Clear() self.ctrlEtat.Refresh() def onValider(self,event): if ((self.ctrlEtat.GetStringSelection()!="")): try: dlg=wx.MessageDialog(self, u"Si vous supprimez un état, vous supprimez tous les \xe9l\xe9ments qui s'y rattache.\nVoulez-vous continuez?","Attention!",wx.YES_NO | wx.ICON_EXCLAMATION ) if dlg.ShowModal() ==wx.ID_YES: self.nom = self.ctrlAuteur.GetStringSelection() self.titre = self.ctrlOeuvre.GetStringSelection() self.version = self.ctrlVersion.GetStringSelection() self.etat = self.ctrlEtat.GetStringSelection() #self.fenetreMedite.cdos.supprimerEtat(self.nom,self.titre,self.version,self.etat) #self.fenetreMedite.cinfos.supprimerEtat(self.nom,self.titre,self.version,self.etat) self.dgm.delEtat(self.nom,self.titre,self.version,self.etat) miseAJEcranEtatSupprimer(self) self.fenetreMedite.treePanel.reloadTree() except IOError, eIO: pass self.Close() else: dlg = wx.MessageDialog(self, "Vous devez remplir tous les champs", 'Attention !',wx.OK) dlg.ShowModal() dlg.Destroy() def onAnnuler(self,event): self.Close() def miseAJEcranEtatSupprimer(self): ## print 'Mise a jour ecran qd supression etat' auteur = self.fenetreMedite.getPlanTravail().getAuteur() oeuvre = self.fenetreMedite.getPlanTravail().getOeuvre() versionS = self.fenetreMedite.getPlanTravail().getVersionSource() etatS = self.fenetreMedite.getPlanTravail().getEtatSource() versionC = self.fenetreMedite.getPlanTravail().getVersionCible() etatC = self.fenetreMedite.getPlanTravail().getEtatCible() fontDefault=wx.Font(10,wx.DEFAULT,wx.NORMAL,wx.NORMAL,encoding=wx.FONTENCODING_ISO8859_1) if auteur==self.nom and oeuvre==self.titre : if (versionS==self.version and etatS==self.etat): miseAJMenu(self) miseAJCoteS(self) if (versionC==self.version and etatC==self.etat): miseAJMenu(self) miseAJCoteC(self) def miseAJEcranVersionSupprimer(self): ## print 'Mise a jour ecran qd supression version' auteur = self.fenetreMedite.getPlanTravail().getAuteur() oeuvre = self.fenetreMedite.getPlanTravail().getOeuvre() versionS = self.fenetreMedite.getPlanTravail().getVersionSource() etatS = self.fenetreMedite.getPlanTravail().getEtatSource() versionC = self.fenetreMedite.getPlanTravail().getVersionCible() etatC = self.fenetreMedite.getPlanTravail().getEtatCible() if versionS==self.version: miseAJMenu(self) miseAJCoteS(self) if versionC==self.version: miseAJMenu(self) miseAJCoteC(self) def miseAJMenu(self): self.fenetreMedite.mInformations.Enable(ID_CHARGER_INFOS,False) self.fenetreMedite.smEnregistrer.Enable(ID_ADD_TRANSFOS, False) self.fenetreMedite.smEnregistrer.Enable(ID_ADD_COMMENT, False) self.fenetreMedite.smEnregistrer.Enable(ID_ADD_TRANSFOS_COMMENT, False) self.fenetreMedite.mMedite.Enable(ID_EXECUTER, False) self.fenetreMedite.tb.EnableTool(ID_EXECUTER, False) def miseAJCoteS(self): fontDefault=wx.Font(10,wx.DEFAULT,wx.NORMAL,wx.NORMAL,encoding=wx.FONTENCODING_ISO8859_1) self.fenetreMedite.getCompPanel().textInfoVersionS.SetLabel("") self.fenetreMedite.getCompPanel().textInfoEtatS.SetLabel("") self.fenetreMedite.getCompPanel().textWindowLeft.SetValue("état source") ### Mise a  zero des onglets transformations et commentaire self.fenetreMedite.getCompPanel().transformations.SetValue('') self.fenetreMedite.getCompPanel().commentaire.SetValue('') ### Suppression des couleurs pour le second état texte = self.fenetreMedite.getCompPanel().textWindowRight.GetValue() self.fenetreMedite.getCompPanel().textWindowRight.SetValue('') self.fenetreMedite.getCompPanel().textWindowRight.SetStyle(0,40,wx.TextAttr(wx.NullColour, wx.NullColour, fontDefault)) self.fenetreMedite.getCompPanel().textWindowRight.SetValue(texte) ### Mise a jour du plan de travail self.fenetreMedite.getPlanTravail().setVersionSource('') self.fenetreMedite.getPlanTravail().setEtatSource('') ### def miseAJCoteC(self): self.fenetreMedite.getCompPanel().textInfoVersionC.SetLabel("") self.fenetreMedite.getCompPanel().textInfoEtatC.SetLabel("") self.fenetreMedite.getCompPanel().textWindowRight.SetValue("état cible") ### Mise a  zero des onglets transformations et commentaire self.fenetreMedite.getCompPanel().transformations.SetValue('') self.fenetreMedite.getCompPanel().commentaire.SetValue('') ### Suppression des couleurs pour le second état fontDefault=wx.Font(10,wx.DEFAULT,wx.NORMAL,wx.NORMAL,encoding=wx.FONTENCODING_ISO8859_1) texte = self.fenetreMedite.getCompPanel().textWindowLeft.GetValue() self.fenetreMedite.getCompPanel().textWindowLeft.SetValue('') self.fenetreMedite.getCompPanel().textWindowLeft.SetStyle(0,40,wx.TextAttr(wx.NullColour, wx.NullColour, fontDefault)) self.fenetreMedite.getCompPanel().textWindowLeft.SetValue(texte) ### Mise a jour du plan de travail self.fenetreMedite.getPlanTravail().setVersionCible('') self.fenetreMedite.getPlanTravail().setEtatCible('') ### # Classe qui cree un formulaire qui recupere l'auteur,l'oeuvre selectionnes et # le nom du repertoire de texte à importer dans le dossier genetique. # Appelle la methode creerDossierVersion du controleur CDossierGenetique class FormImporterRepertoire(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent, -1,u"Importer un r\xe9pertoire de textes", pos = wx.Point(150,200),size = (320,205), style=wx.DEFAULT_FRAME_STYLE|wx.NO_FULL_REPAINT_ON_RESIZE|wx.FRAME_FLOAT_ON_PARENT) self.fenetreMedite=parent panel=wx.Panel(self,-1) textAuteur=wx.StaticText(panel,-1,"Auteur : ",wx.Point(15,12)) #listeAuteurs=self.fenetreMedite.cdon.getListeNomsAuteurs() self.dgm = Controleurs.DGManager.DGManager() listeAuteurs = self.dgm.getListeAuteurs() self.ctrlAuteur = wx.ComboBox(panel,-1, listeAuteurs[0],(75,10), (150, -1), listeAuteurs, wx.CB_DROPDOWN | wx.CB_READONLY) self.Bind(wx.EVT_TEXT, self.EvtCtrlAuteur, self.ctrlAuteur) textOeuvre=wx.StaticText(panel,-1,"Oeuvre : ",wx.Point(15,42)) #listeOeuvres=self.fenetreMedite.cdon.getListeTitresByAuteur(self.ctrlAuteur.GetStringSelection()) listeOeuvres=self.dgm.getListeOeuvresAuteur(self.ctrlAuteur.GetStringSelection()) self.ctrlOeuvre = wx.ComboBox(panel,-1, listeOeuvres[0],(75,50), (150, -1), listeOeuvres, wx.CB_DROPDOWN | wx.CB_READONLY) self.Bind(wx.EVT_TEXT, self.EvtCtrlOeuvre, self.ctrlOeuvre) textRep=wx.StaticText(panel,-1,u"R\xe9pertoire : ",wx.Point(15,92)) self.ctrlRep=wx.TextCtrl(panel,-1,"",wx.Point(75,90),size=(125,-1)) self.ctrlRep.SetInsertionPoint(0) bRep = wx.Button(panel, ID_SELECT_REP, u"S\xe9lection",wx.Point(220,90)) wx.EVT_BUTTON(self, ID_SELECT_REP, self.onSelectRepertoire) bValider = wx.Button(panel, ID_OK, "VALIDER", wx.Point(50, 130)) wx.EVT_BUTTON(self, ID_OK, self.onValider) bAnnuler = wx.Button(panel, ID_ANNULER, "ANNULER", wx.Point(150, 130)) wx.EVT_BUTTON(self, ID_ANNULER, self.onAnnuler) def EvtCtrlAuteur(self,event): if (self.ctrlAuteur.GetStringSelection()!=""): #on recupere la liste des oeuvres de l'auteur selectionné #listeOeuvres=self.fenetreMedite.cdon.getListeTitresByAuteur(self.ctrlAuteur.GetStringSelection()) listeOeuvres=self.dgm.getListeOeuvresAuteur(self.ctrlAuteur.GetStringSelection()) self.ctrlOeuvre.Clear() self.ctrlOeuvre.AppendItems(listeOeuvres) self.ctrlOeuvre.Refresh() def EvtCtrlOeuvre(self,event): if (self.ctrlOeuvre.GetStringSelection()!=""): #listeVersions=self.fenetreMedite.cdos.getListeDossiersVersions(self.ctrlAuteur.GetStringSelection(),self.ctrlOeuvre.GetStringSelection()) listeVersions=self.dgm.getListeVersionsDG(self.ctrlAuteur.GetStringSelection(),self.ctrlOeuvre.GetStringSelection()) def onSelectRepertoire(self,event): dlg = wx.DirDialog(self, u"Choisir un r\xe9pertoire",pos = wx.Point(300,250)) if dlg.ShowModal() == wx.ID_OK: self.pathRep= dlg.GetPath() self.ctrlRep.SetValue(self.pathRep) dlg.Destroy() def onValider(self,event): nomA = self.ctrlAuteur.GetStringSelection() titreO = self.ctrlOeuvre.GetStringSelection() repertoire = self.ctrlRep.GetValue() if nomA == '' or titreO == '' or repertoire =='': dlg=wx.MessageDialog(self, 'Vous devez remplir tous les champs !',"Attention",wx.OK) dlg.ShowModal() dlg.Destroy() else : try: #self.fenetreMedite.cdos.importerRepertoire(nomA,titreO,repertoire,self.fenetreMedite) self.dgm.importTextFolder(nomA,titreO,repertoire) self.fenetreMedite.treePanel.reloadTree() self.Close() except AuteurNonTrouve, eANT: dlg = wx.MessageDialog(self, u'Auteur Non Trouv\xe9', 'Attention !',wx.OK) dlg.ShowModal() dlg.Destroy() self.Close() except OeuvreNonTrouvee, eONT: dlg = wx.MessageDialog(self, u'Oeuvre Non Trouv\xe9e' , 'Attention !',wx.OK) dlg.ShowModal() dlg.Destroy() self.Close() except OSError : dlg = wx.MessageDialog(self, u'Ce nom de dossier \xe9xiste d\xe9j\xe0. Veillez \xe0 en entrer un autre.', 'Attention !',wx.OK) dlg.ShowModal() dlg.Destroy() except FichierExistant, eFE: dlg = FormFicExistant(self, self.fenetreMedite, eFE) dlg.Show(True) self.Close() def onAnnuler(self,event): self.Close() ## formulaire pour choisir si on ecrase un fichier texte deja existant dans un DG class FormFicExistant(wx.Frame): def __init__(self, parent, pFenetreMedite, pException): wx.Frame.__init__(self, pFenetreMedite, -1, u"Le fichier existe d\xe9j\xe0", pos = wx.Point(200,200) ,size = (250,150), style=wx.DEFAULT_FRAME_STYLE|wx.NO_FULL_REPAINT_ON_RESIZE|wx.FRAME_FLOAT_ON_PARENT) self.fenetreMedite=pFenetreMedite self.exception = pException panel=wx.Panel(self,-1) fichier = pException.getFicDest() (filepathV, nomEtat) = os.path.split(fichier) (filepathDG, nomVersion) = os.path.split(filepathV) (filepathA, nomDG) = os.path.split(filepathDG) msg = u'L\'état "'+nomEtat +u'" existe d\xe9j\xe0 \ndans le dossier "'+nomVersion+u'" \ndu dossier g\xe9n\xe9tique "'+nomDG+'"' wx.StaticText(panel,-1,msg,wx.Point(15,10)) wx.StaticText(panel,-1,u'Voulez-vous \xe9cras\xe9 ce fichier texte ?',wx.Point(15,70)) bValider = wx.Button(panel, ID_OK, "OUI", wx.Point(40, 90)) wx.EVT_BUTTON(self, ID_OK, self.onValider) bAnnuler = wx.Button(panel, ID_ANNULER, "NON", wx.Point(120, 90)) wx.EVT_BUTTON(self, ID_ANNULER, self.onAnnuler) def onValider(self,event): self.fenetreMedite.cdos.ecraserFichier(self.exception.getFicSource(), self.exception.getFicDest()) self.Close() def onAnnuler(self,event): self.Close()