# -*- 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: FormulairesMenuDossiers.py # Objet: Ce fichier regroupe les differentes classes de formulaire # concernant le menu Dossiers #---------------------------------------------------------------------------- #from wxPython.wx import * import wx import Controleurs.DGManager from Utile.constantesGUI import * from Utile.exceptionsDonnees import * #--------------------------------------------------------------------------------------------------# # Classe qui permet d'enregistrer un nouvel auteur dans la base class FormAuteur(wx.Frame): def __init__(self, parent, id): wx.Frame.__init__(self, parent, id,"Enregistrement d'un nouvel auteur",pos = wx.Point(200,200) ,size = (290,200), style=wx.DEFAULT_FRAME_STYLE|wx.NO_FULL_REPAINT_ON_RESIZE|wx.FRAME_FLOAT_ON_PARENT) self.fenetreMedite=parent panelAuteur=wx.Panel(self,-1) textNom=wx.StaticText(panelAuteur,-1,"Nom : ",wx.Point(15,12)) self.ctrlNom=wx.TextCtrl(panelAuteur,-1,"",wx.Point(140,10),size=(125,-1)) self.ctrlNom.SetInsertionPoint(0) textPrenom=wx.StaticText(panelAuteur,-1,u"Pr\xe9nom : ",wx.Point(15,42)) self.ctrlPrenom=wx.TextCtrl(panelAuteur,-1,"",wx.Point(140,40),size=(125,-1)) self.ctrlPrenom.SetInsertionPoint(0) textNaissance=wx.StaticText(panelAuteur,-1,"Date de Naissance : ",wx.Point(15,72)) self.ctrlNaissance=wx.TextCtrl(panelAuteur,-1,"",wx.Point(140,70),size=(125,-1)) self.ctrlNaissance.SetInsertionPoint(0) textDeces=wx.StaticText(panelAuteur,-1,u"Date de D\xe9c\xe8s : ",wx.Point(15,102)) self.ctrlDeces=wx.TextCtrl(panelAuteur,-1,"",wx.Point(140,100),size=(125,-1)) self.ctrlDeces.SetInsertionPoint(0) bValider = wx.Button(panelAuteur, ID_OK, "Valider", wx.Point(50, 140)) wx.EVT_BUTTON(self, ID_OK, self.onValider) bAnnuler = wx.Button(panelAuteur, ID_ANNULER, "Annuler", wx.Point(150, 140)) wx.EVT_BUTTON(self, ID_ANNULER, self.onAnnuler) def onValider(self,event): if self.ctrlNom.GetValue() =='': dlg=wx.MessageDialog(self, u'Vous devez remplir obigatoirement le champ "Nom" !',"Attention",wx.OK) dlg.ShowModal() dlg.Destroy() else : try: dgm = Controleurs.DGManager.DGManager() auteur = Controleurs.DGManager.Auteur(self.ctrlNom.GetValue(),self.ctrlPrenom.GetValue(),self.ctrlNaissance.GetValue(),self.ctrlDeces.GetValue()) dgm.addAuteur(auteur) #self.fenetreMedite.cdon.addAuteur(self.ctrlNom.GetValue(),self.ctrlPrenom.GetValue(),self.ctrlNaissance.GetValue(),self.ctrlDeces.GetValue()) except AuteurDejaExistant, eADE: #dlg=wx.MessageDialog(self,u"Cet auteur existe d\xe9jà \nVoulez-vous le modifier ?","Attention",wx.YES_NO) #if dlg.ShowModal()== wx.ID_YES: # formModifAuteur=FormModifierAuteur(self.fenetreMedite, eADE.getAuteur()) # formModifAuteur.Show(True) #dlg.Destroy() pass self.Close() def onAnnuler(self,event): self.Close() #Classe qui cree un formulaire de recupere le prenom, la date de naisasnce et deces #et appelle CDonnees pour le modifier dans donnees class FormModifierAuteur(wx.Frame): def __init__(self, parent, auteurOld): wx.Frame.__init__(self, parent, -1,"Modifier un auteur",pos = wx.Point(200,200), size = (290,200), style=wx.DEFAULT_FRAME_STYLE|wx.NO_FULL_REPAINT_ON_RESIZE|wx.FRAME_FLOAT_ON_PARENT) self.fenetreMedite=parent panelAuteur=wx.Panel(self,-1) textNom=wx.StaticText(panelAuteur,-1,"Nom : ",wx.Point(15,12)) self.textNomVal=wx.StaticText(panelAuteur,-1,auteurOld.getNom(),wx.Point(140,10)) textPrenom=wx.StaticText(panelAuteur,-1,u"Pr\xe9nom : ",wx.Point(15,42)) self.ctrlPrenom=wx.TextCtrl(panelAuteur,-1,"",wx.Point(140,40),size=(125,-1)) self.ctrlPrenom.SetInsertionPoint(0) self.ctrlPrenom.SetValue(auteurOld.getPrenom()) textNaissance=wx.StaticText(panelAuteur,-1,"Date de Naissance : ",wx.Point(15,72)) self.ctrlNaissance=wx.TextCtrl(panelAuteur,-1,"",wx.Point(140,70),size=(125,-1)) self.ctrlNaissance.SetInsertionPoint(0) self.ctrlNaissance.SetValue(auteurOld.getNaissance()) textDeces=wx.StaticText(panelAuteur,-1,u"Date de D\xe9c\xe8s : ",wx.Point(15,102)) self.ctrlDeces=wx.TextCtrl(panelAuteur,-1,"",wx.Point(140,100),size=(125,-1)) self.ctrlDeces.SetInsertionPoint(0) self.ctrlDeces.SetValue(auteurOld.getDeces()) bValider = wx.Button(panelAuteur, ID_OK, "Valider", wx.Point(50, 140)) wx.EVT_BUTTON(self, ID_OK, self.onValider) bAnnuler = wx.Button(panelAuteur, ID_ANNULER, "Annuler", wx.Point(150, 140)) wx.EVT_BUTTON(self, ID_ANNULER, self.onAnnuler) def onValider(self,event): try: self.fenetreMedite.cdon.updateAuteur(self.textNomVal.GetLabel(),self.ctrlPrenom.GetValue(),self.ctrlNaissance.GetValue(),self.ctrlDeces.GetValue()) except AuteurNonTrouve, eANT: dlg=wx.MessageDialog(self, u"L'auteur n'a pas \xe9t\xe9 trouv\xe9!","Attention",wx.OK) dlg.ShowModal() dlg.Destroy() self.Close() def onAnnuler(self,event): self.Close() # Classe qui gere la suprssion d'un auteur class FormSupprimerAuteur: def __init__(self, parent): self.fenetreMedite = parent dgm = Controleurs.DGManager.DGManager() #listeA = self.fenetreMedite.cdon.getListeNomsAuteurs() listeA = dgm.getListeAuteurs() msg = u'Selectionnez l\'auteur \xe0 supprimmer' titre = 'Supprimer un auteur' self.choixA = SelectionListe(self.fenetreMedite,msg,titre, listeA) if self.choixA.ShowModal() == wx.ID_OK: self.nomA= self.choixA.GetStringSelection() self.choixA.Destroy() msg = u'Vous voulez supprimer l\'auteur "'+self.nomA+u'"\nSi vous supprimez un auteur, vous supprimez tous les \xe9lements qui s\'y rattache.\nVoulez-vous continuez la suppression ?' dlg=wx.MessageDialog(self.fenetreMedite, msg,"Attention!",wx.YES_NO | wx.ICON_EXCLAMATION ) if dlg.ShowModal() == wx.ID_YES: miseAJAuteurSupprimer(self) #self.fenetreMedite.cdon.deleteAuteur(self.nomA) dgm.delAuteur(self.nomA) dlg.Destroy() # Classe qui gere l'enregistrement d'une oeuvre class FormEnregistrerOeuvre: def __init__(self, parent): self.fenetreMedite = parent dgm = Controleurs.DGManager.DGManager() #listeA = self.fenetreMedite.cdon.getListeNomsAuteurs() listeA = dgm.getListeAuteurs() msg = u'Selectionnez l\'auteur de l\'oeuvre' titre = u'Choix de l\'auteur' self.choixA = SelectionListe(self.fenetreMedite,msg,titre, listeA) if self.choixA.ShowModal() == wx.ID_OK: self.nomAuteur = self.choixA.GetStringSelection() self.choixA.Destroy() formOeuvre = FormSaisieDonneesOeuvre(self.fenetreMedite,self.nomAuteur) formOeuvre.Show(True) else : self.choixA.Destroy() # Classe qui cree un formulaire de saisie des informations d'une oeuvre # et appelle le controleur Cdonnees pour enregistrer ces informations class FormSaisieDonneesOeuvre(wx.Frame): def __init__(self,fenetreMedite, nomA): wx.Frame.__init__(self,fenetreMedite, -1,"Enregistrement d'un nouvelle oeuvre" ,pos = wx.Point(200,200),size = (290,210) ,style = wx.DEFAULT_FRAME_STYLE|wx.NO_FULL_REPAINT_ON_RESIZE|wx.FRAME_FLOAT_ON_PARENT ) self.fenetreMedite=fenetreMedite panelOeuvre=wx.Panel(self,-1) self.nomA = nomA textAuteur=wx.StaticText(panelOeuvre,-1,"Auteur : ",wx.Point(15,12)) textNomA=wx.StaticText(panelOeuvre,-1,self.nomA,wx.Point(130,12)) textTitre=wx.StaticText(panelOeuvre,-1,"Titre : ",wx.Point(15,42)) self.ctrlTitre=wx.TextCtrl(panelOeuvre,-1,"",wx.Point(130,40),size=(125,-1)) self.ctrlTitre.SetInsertionPoint(0) textEditeur=wx.StaticText(panelOeuvre,-1,"Editeur : ",wx.Point(15,72)) self.ctrlEditeur=wx.TextCtrl(panelOeuvre,-1,"",wx.Point(130,70),size=(125,-1)) self.ctrlEditeur.SetInsertionPoint(0) textPublication=wx.StaticText(panelOeuvre,-1,"Date de Publication : ",wx.Point(15,102)) self.ctrlPublication=wx.TextCtrl(panelOeuvre,-1,"",wx.Point(130,100),size=(125,-1)) self.ctrlPublication.SetInsertionPoint(0) bValider = wx.Button(panelOeuvre, ID_OK, "VALIDER", wx.Point(50,140)) wx.EVT_BUTTON(self, ID_OK, self.onValider) bAnnuler = wx.Button(panelOeuvre, ID_ANNULER, "ANNULER", wx.Point(150,140)) wx.EVT_BUTTON(self, ID_ANNULER, self.onAnnuler) def onValider(self,event): if (self.ctrlTitre.GetValue()!=""): try: #self.fenetreMedite.cdon.addOeuvre(self.nomA, # self.ctrlTitre.GetValue(), # self.ctrlEditeur.GetValue(), # self.ctrlPublication.GetValue()) dgm = Controleurs.DGManager.DGManager() oeuvre = Controleurs.DGManager.Oeuvre(self.ctrlTitre.GetValue(), self.ctrlEditeur.GetValue(), self.ctrlPublication.GetValue()) dgm.addOeuvre(self.nomA,oeuvre) except AuteurNonTrouve,eANT: dlg=wx.MessageDialog(self, u"L'auteur de cette oeuvre n'a pas \xe9t\xe9 trouv\xe9!","Attention",wx.OK) if dlg.ShowModal()==wx.ID_OK: dlg.Destroy() except OeuvreDejaExistante, eODE: #dlg=wx.MessageDialog(self, u"Cette oeuvre existe d\xe9jà !\nVoulez-vous la modifier?","Attention" ,wx.YES_NO) #if dlg.ShowModal()==wx.ID_YES: # formModifOeuvre=FormModifierOeuvre(self.fenetreMedite,self.nomA, # eODE.getOeuvre()) # formModifOeuvre.Show(True) #dlg.Destroy() pass self.Close() else: dlg=wx.MessageDialog(self, u'Vous devez obligatoirement remplir le champ "Titre" !',"Attention",wx.OK) dlg.ShowModal() dlg.Destroy() def onAnnuler(self,event): self.Close() class FormModifierOeuvre(wx.Frame): def __init__(self, parent, auteur,oeuvreOld): wx.Frame.__init__(self, parent, -1,"Modifier une oeuvre",pos = wx.Point(200,200), size = (290,210), style=wx.DEFAULT_FRAME_STYLE|wx.NO_FULL_REPAINT_ON_RESIZE|wx.FRAME_FLOAT_ON_PARENT) self.fenetreMedite=parent panel=wx.Panel(self,-1) textNom=wx.StaticText(panel,-1,"Auteur : ",wx.Point(15,12)) self.textNomVal=wx.StaticText(panel,-1,auteur,wx.Point(120,10)) textTitre=wx.StaticText(panel,-1,"Titre : ",wx.Point(15,42)) self.textTitreVal=wx.StaticText(panel,-1,oeuvreOld.getTitre(),wx.Point(120,40)) textEdition=wx.StaticText(panel,-1,"Edition : ",wx.Point(15,72)) self.ctrlEdition=wx.TextCtrl(panel,-1,"",wx.Point(120,70),size=(125,-1)) self.ctrlEdition.SetInsertionPoint(0) self.ctrlEdition.SetValue(oeuvreOld.getEdition()) textPublication=wx.StaticText(panel,-1,"Publication : ",wx.Point(15,102)) self.ctrlPublication=wx.TextCtrl(panel,-1,"",wx.Point(120,100),size=(125,-1)) self.ctrlPublication.SetInsertionPoint(0) self.ctrlPublication.SetValue(oeuvreOld.getPublication()) bValider = wx.Button(panel, ID_OK, "Valider", wx.Point(50, 140)) wx.EVT_BUTTON(self, ID_OK, self.onValider) bAnnuler = wx.Button(panel, ID_ANNULER, "Annuler", wx.Point(150, 140)) wx.EVT_BUTTON(self, ID_ANNULER, self.onAnnuler) def onValider(self,event): try: self.fenetreMedite.cdon.updateOeuvre(self.textNomVal.GetLabel(),self.textTitreVal.GetLabel(),self.ctrlEdition.GetValue(),self.ctrlPublication.GetValue()) except AuteurNonTrouve, eANT: dlg=wx.MessageDialog(self, u"L'auteur n'a pas \xe9t\xe9 trouv\xe9!","Attention",wx.OK) dlg.ShowModal() dlg.Destroy() except OeuvreNonTrouvee, eONT: dlg=wx.MessageDialog(self, u"L'oeuvre n'a pas \xe9t\xe9 trouv\xe9!","Attention",wx.OK) dlg.ShowModal() dlg.Destroy() self.Close() 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 et l'oeuvre selectionne et appelle # deleteOeuvre du controleur Cdonnees pour la supprimer #Traite l'exception eANT si l'auteur n'a pas ete trouve #Traite l'exception eONT si l'oeuvre n'a pas ete trouvee class FormSupprimerOeuvre(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent, -1,u"Supprimer une oeuvre d\'un auteur", pos = wx.Point(200,200) ,size = ( 320,150), 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(10,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(10,42)) #listeOeuvres=self.fenetreMedite.cdon.getListeTitresByAuteur(self.ctrlAuteur.GetValue()) listeOeuvres=self.dgm.getListeOeuvresAuteur(self.ctrlAuteur.GetValue()) self.ctrlOeuvre = wx.ComboBox(panel,-1, listeOeuvres[0],(75,40), (150, -1), listeOeuvres, wx.CB_DROPDOWN | wx.CB_READONLY) bValider = wx.Button(panel, ID_OK, "VALIDER", wx.Point(50, 80)) wx.EVT_BUTTON(self, ID_OK, self.onOk) bAnnuler = wx.Button(panel, ID_ANNULER, "ANNULER", wx.Point(180, 80)) wx.EVT_BUTTON(self, ID_ANNULER, self.onAnnuler) def EvtCtrlAuteur(self,event): if (self.ctrlAuteur.GetValue()!=""): #on recupere la liste des oeuvres de l'auteur selectionné #listeOeuvres=self.fenetreMedite.cdon.getListeTitresByAuteur(self.ctrlAuteur.GetValue()) listeOeuvres=self.dgm.getListeOeuvresAuteur(self.ctrlAuteur.GetValue()) self.ctrlOeuvre.Clear() self.ctrlOeuvre.AppendItems(listeOeuvres) self.ctrlOeuvre.Refresh() def onOk(self,event): self.nomA = self.ctrlAuteur.GetStringSelection() self.nomO = self.ctrlOeuvre.GetStringSelection() if self.nomO == '' : text=u"Vous devez remplir tous les champs sup\xe9rieurs" dlg = wx.MessageDialog(self, text, 'Attention !',wx.OK) dlg.ShowModal() dlg.Destroy() else : try: msg = u'Vous voulez supprimer l\'oeuvre "'+self.nomO+'" de "'+self.nomA+u'"\nSi vous supprimez une oeuvre, vous supprimez tous les \xe9lements qui s\'y rattache.\nVoulez-vous continuez?' dlg=wx.MessageDialog(self, msg,'Attention!',wx.YES_NO | wx.ICON_EXCLAMATION ) if dlg.ShowModal() ==wx.ID_YES: miseAJOeuvreSupprimer(self) #self.fenetreMedite.cdon.deleteOeuvre(self.nomA,self.nomO) dgm = Controleurs.DGManager.DGManager() dgm.delOeuvre(self.nomA,self.nomO) except OeuvreNonTrouvee, eONT: dlg=wx.MessageDialog(self, u"L'oeuvre n'a pas \xe9t\xe9 trouv\xe9!","Attention",wx.OK) dlg.ShowModal() dlg.Destroy() except AuteurNonTrouve, eANT : dlg=wx.MessageDialog(self, u"L'auteur n'a pas \xe9t\xe9 trouv\xe9!","Attention",wx.OK) dlg.ShowModal() dlg.Destroy() self.Close() def onAnnuler(self,event): self.Close() def miseAJOeuvreSupprimer(self): # Mise a jour ecran auteur = self.fenetreMedite.getPlanTravail().getAuteur() oeuvre = self.fenetreMedite.getPlanTravail().getOeuvre() if auteur == self.nomA and oeuvre == self.nomO : miseAZero(self) def miseAJAuteurSupprimer(self): # Mise a jour ecran auteur = self.fenetreMedite.getPlanTravail().getAuteur() if auteur == self.nomA : miseAZero(self) def miseAZero(self): ## mise a jour du plan de travail self.fenetreMedite.getPlanTravail().setAuteur('') self.fenetreMedite.getPlanTravail().setOeuvre('') self.fenetreMedite.getPlanTravail().setVersionSource('') self.fenetreMedite.getPlanTravail().setEtatSource('') self.fenetreMedite.getPlanTravail().setVersionCible('') self.fenetreMedite.getPlanTravail().setEtatCible('') ## mise a jour ecran self.fenetreMedite.getCompPanel().textInfoAuteur.SetLabel('') self.fenetreMedite.getCompPanel().textInfoOeuvre.SetLabel('') self.fenetreMedite.getCompPanel().textWindowLeft.SetValue(u"état source") self.fenetreMedite.getCompPanel().textWindowRight.SetValue(u"état cible") self.fenetreMedite.getCompPanel().textInfoVersionS.SetLabel("") self.fenetreMedite.getCompPanel().textInfoEtatS.SetLabel("") self.fenetreMedite.getCompPanel().textInfoVersionC.SetLabel("") self.fenetreMedite.getCompPanel().textInfoEtatC.SetLabel("") self.fenetreMedite.getCompPanel().transformations.SetValue("") ## Mise a jour Menu 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.smOuvrir.Enable(ID_SOURCE, True) self.fenetreMedite.smOuvrir.Enable(ID_CIBLE, True) ## Mise a jour barre outils self.fenetreMedite.tb.EnableTool(ID_EXECUTER, False) self.fenetreMedite.tb.EnableTool(ID_SOURCE, True) self.fenetreMedite.tb.EnableTool(ID_CIBLE, True)