Package medite :: Package GUI :: Module Medite
[hide private]
[frames] | no frames]

Source Code for Module medite.GUI.Medite

   1  # -*- coding: iso-8859-1 -*- 
   2  # Copyright 20003 - 2008: Julien Bourdaillet (julien.bourdaillet@lip6.fr), Jean-Gabriel Ganascia (jean-gabriel.ganascia@lip6.fr) 
   3  # This file is part of MEDITE. 
   4  # 
   5  #    MEDITE is free software; you can redistribute it and/or modify 
   6  #    it under the terms of the GNU General Public License as published by 
   7  #    the Free Software Foundation; either version 2 of the License, or 
   8  #    (at your option) any later version. 
   9  # 
  10  #    MEDITE is distributed in the hope that it will be useful, 
  11  #    but WITHOUT ANY WARRANTY; without even the implied warranty of 
  12  #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
  13  #    GNU General Public License for more details. 
  14  # 
  15  #    You should have received a copy of the GNU General Public License 
  16  #    along with Foobar; if not, write to the Free Software 
  17  #    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA 
  18  #---------------------------------------------------------------------------- 
  19  # Nom:          Medite.py 
  20  # Objet:        Classe correspondant à l'interface medite du logiciel 
  21  #---------------------------------------------------------------------------- 
  22  import sys,wx  
  23   
  24  #from wxPython.wx import * 
  25  #import Utile 
  26  from Utile.constantesDonnees import * 
  27  from Utile.constantesGUI  import * 
  28  from Utile.exceptionsDonnees import * 
  29  from Utile.decodage import * 
  30   
  31  from GUI.FormulairesMenuDossiers import * 
  32  from GUI.FormulairesMenuGenetique import * 
  33  from GUI.FormulairesMenuMedite import * 
  34  from GUI.FormulairesMenuInformations import * 
  35  from GUI.MainPanel import MainPanel 
  36  from GUI.TreePanel import TreePanel 
  37  from GUI.MainToolBar import MainToolBar 
  38   
  39  from Donnees.planTravail import * 
  40   
  41  import  constantes 
  42  import MediteAppli.synthetic 
  43  from Controleurs.cMedite import * 
  44   
  45  from Controleurs.cInformations import * 
  46  from Controleurs.cTravail import * 
  47  import Controleurs.FInfoManager 
  48  import Controleurs.DGManager 
  49  import profile 
  50   
  51  import MediteAppli.synthetic 
  52   
  53  #--------------------------------------------------------------------------- 
  54  #Classe principale pour la creation de l'interface 
55 -class MediteFrame(wx.Frame):
56 - def __init__(self, parent, ID, title):
57 wx.Frame.__init__(self, parent, ID, title, 58 wx.DefaultPosition,wx.Size(900, 700),style=wx.DEFAULT_FRAME_STYLE|wx.FULL_REPAINT_ON_RESIZE) 59 60 self.CreateStatusBar() 61 self.SetStatusText(u'Bienvenue sur Medite') 62 63 #Menu Dossier 64 mDossier = wx.Menu() 65 smNouveauDossier=wx.Menu() 66 smNouveauDossier.Append(ID_ADD_AUTEUR, 'Auteur',u'Cr\xe9er un nouvel auteur.') 67 smNouveauDossier.Append(ID_ADD_OEUVRE, 'Oeuvre',u'Cr\xe9er une nouvelle oeuvre.') 68 mDossier.AppendMenu(ID_NOUVEAU_DOSSIER, 'Nouveau', smNouveauDossier) 69 mDossier.AppendSeparator() 70 smSupprimerDossier=wx.Menu() 71 smSupprimerDossier.Append(ID_SUPP_AUTEUR, 'Auteur','Supprimer un auteur.') 72 smSupprimerDossier.Append(ID_SUPP_OEUVRE, 'Oeuvre','Supprimer une oeuvre.') 73 mDossier.AppendMenu(ID_SUPPRIMER_DOSSIER, 'Supprimer', smSupprimerDossier) 74 mDossier.AppendSeparator() 75 mDossier.Append(ID_QUITTER, 'Quitter','Quitter MEDITE.') 76 77 78 #Menu Genetique 79 mGenetique = wx.Menu() 80 mGenetique.Append(ID_CHARGER_DG, u'Charger Dossier G\xe9n\xe9tique', u'Charger le dossier g\xe9n\xe9tique sur lequel vous voulez travailler') 81 mGenetique.AppendSeparator() 82 smCreerGenetique=wx.Menu() 83 smCreerGenetique.Append(ID_CREER_VERSION, u'Version',u'Cr\xe9er un nouveau dossier version.') 84 smCreerGenetique.Append(ID_CREER_ETAT, u'Etat',u'Cr\xe9er un nouvel état.') 85 mGenetique.AppendMenu(ID_CREER_GENE, u'Cr\xe9er', smCreerGenetique) 86 mGenetique.Append(ID_IMPORTER_TEXTES, u'Importer r\xe9pertoire de textes', u'Importer un r\xe9pertoire de textes dans un dossier g\xe9n\xe9tique') 87 mGenetique.AppendSeparator() 88 smSupprimerGenetique=wx.Menu() 89 smSupprimerGenetique.Append(ID_SUPP_VERSION, 'Version','Supprimer un dossier version.') 90 smSupprimerGenetique.Append(ID_SUPP_ETAT, 'Etat',u'Supprimer un état.') 91 mGenetique.AppendMenu(ID_SUPPRIMER_GENE, u'Supprimer', smSupprimerGenetique) 92 93 #Menu Informations 94 self.mInformations = wx.Menu() 95 self.mInformations.Append(ID_CHARGER_INFOS, 'Charger Informations', u'Charger les informations concernant deux états') 96 self.mInformations.Enable(ID_CHARGER_INFOS,False) 97 # self.smInformations=wx.Menu() 98 # self.smInformations.Append(ID_INFOS_DG, u'Dossier G\xe9n\xe9tique',u'Informe des tansformations enregistr\xe9es pour le dossier g\xe9n\xe9tique charg\xe9.') 99 # self.smInformations.Append(ID_INFOS_CPLE, 'Etats',u'Informe des transformations enregistr\xe9es pour le couple d\'états charg\xe9s.') 100 # self.mInformations.AppendMenu(ID_INFOS, 'Informations', self.smInformations) 101 self.mInformations.AppendSeparator() 102 self.smEnregistrer=wx.Menu() 103 self.smEnregistrer.Append(ID_ADD_TRANSFOS, 'Transformations',u'Enregistrer les transformations de deux états.') 104 self.smEnregistrer.Enable(ID_ADD_TRANSFOS,False) 105 self.smEnregistrer.Append(ID_ADD_COMMENT, 'Commentaire',u'Enregistrer le commentaire de deux états.') 106 self.smEnregistrer.Enable(ID_ADD_COMMENT,False) 107 self.smEnregistrer.Append(ID_ADD_TRANSFOS_COMMENT, 'Transformations et Commentaire',u'Enregistrer les transformations et le commentaire de deux états.') 108 self.smEnregistrer.Enable(ID_ADD_TRANSFOS_COMMENT,False) 109 self.smEnregistrer.AppendSeparator() 110 self.smEnregistrer.Append(ID_ADD_ALL_TRANSFOS, 'Toutes les Transformations et Commentaires', u'Enregistrer les transformations et commentaires de toutes les comparaisons') 111 self.mInformations.AppendMenu(ID_ENREGISTRER, 'Enregistrer', self.smEnregistrer) 112 self.mInformations.AppendSeparator() 113 self.smSupprimerInformations=wx.Menu() 114 self.smSupprimerInformations.Append(ID_SUPP_TRANSFOS_COMMENT, 'Informations',u"Supprimer les transformations et le commentaire d\'un couple d\'états") 115 self.smSupprimerInformations.Append(ID_SUPP_COMMENT, 'Commentaire','Supprimer un commentaire.') 116 self.smSupprimerInformations.AppendSeparator() 117 self.smSupprimerInformations.Append(ID_SUPP_ALL_TRANSFOS, 'Supprimer toutes les transformations et commentaires',u'Supprimer les transformations et commentaires de toutes les comparaisons') 118 self.mInformations.AppendMenu(ID_SUPPRIMER_INFOS, 'Supprimer', self.smSupprimerInformations) 119 self.mInformations.AppendSeparator() 120 self.smChargerInformations=wx.Menu() 121 self.smChargerInformations.Append(ID_LOAD_ALL_TRANSFOS_COMMENT, 'Informations',u'Charger les transformations et commentaires de toutes les comparaisons enregistrées') 122 self.mInformations.AppendMenu(ID_LOAD_INFOS, 'Charger', self.smChargerInformations) 123 124 #Menu Medite 125 self.mMedite = wx.Menu() 126 self.smOuvrir=wx.Menu() 127 self.smOuvrir.Append(ID_SOURCE, 'Etat Source',u'Ouvrir un état source.') 128 self.smOuvrir.Enable(ID_SOURCE, False) 129 self.smOuvrir.Append(ID_CIBLE, 'Etat Cible',u'Ouvrir un état cible.') 130 self.smOuvrir.Enable(ID_CIBLE, False) 131 self.mMedite.AppendMenu(ID_OUVRIR, 'Ouvrir', self.smOuvrir) 132 self.mMedite.AppendSeparator() 133 self.mMedite.Append(ID_EXECUTER, u'Ex\xe9cuter Medite', u'Appliquer Medite sur les deux états charg\xe9s') 134 self.mMedite.Enable(ID_EXECUTER, False) 135 self.mMedite.AppendSeparator() 136 self.mMedite.Append(ID_EXECUTERALL, u'Ex\xe9cuter toutes les Comparaisons', u"Exécute toutes les comparaisons entre les états de l\'arbre des versions.") 137 self.mMedite.Enable(ID_EXECUTERALL, False) 138 self.mMedite.AppendSeparator() 139 self.mMedite.Append(ID_LAUNCH_STAT, u'Etiquetage', u"Lancer l'étiquetage morpho-syntaxique.") 140 self.mMedite.Enable(ID_LAUNCH_STAT, True) 141 142 # Menu Comparaison 143 self.mComparaison = wx.Menu() 144 self.mComparaison.Append(ID_NEWCOMP,"Nouvelle Comparaison","Ouvre un nouvel onglet de comparaison") 145 # self.mComparaison.AppendSeparator() 146 # self.mComparaison.Append(ID_CLOSECOMP,"Ferme Comparaison",u"Ferme l'onglet de la comparaison courante mais ne supprime pas les éventuelles informations enregistrées") 147 # self.mComparaison.Append(ID_CLOSEALLCOMP,"Ferme toutes les Comparaison",u"Ferme les onglets de toutes comparaisons mais ne supprime pas les éventuelles informations enregistrées") 148 self.mComparaison.AppendSeparator() 149 self.mComparaison.Append(ID_DELCOMP,"Supprime Comparaison",u"Supprime la comparaison courante et ses éventuelles informations enregistrées") 150 self.mComparaison.Append(ID_DELALLCOMP,"Supprime toutes les Comparaisons",u"Supprime toutes les comparaisons et leurs éventuelles informations enregistrées") 151 152 # menu navigation 153 self.mNavigation = wx.Menu() 154 155 #Menu Aide 156 mAide = wx.Menu() 157 if wx.Platform == '__WXMSW__': 158 mAide.Append(ID_AIDE, 'Aide', 'Aide') 159 mAide.Append(ID_APROPOS, 'A Propos de ...', 'A propos de ...') 160 161 162 # Creation d'une barre de menu 163 self.menu_bar = wx.MenuBar() 164 # 165 self.menu_bar.Append(mDossier, 'Dossier ') 166 self.menu_bar.Append(mGenetique, u'G\xe9n\xe9tique') 167 self.menu_bar.Append(self.mInformations, 'Informations') 168 self.menu_bar.Append(self.mMedite, 'Medite') 169 self.menu_bar.Append(self.mComparaison, 'Comparaison') 170 self.menu_bar.Append(self.mNavigation, 'Navigation') 171 self.menu_bar.Append(mAide, 'Aide') 172 173 # set the menu bar (dit au systeme que c'est fait) 174 self.SetMenuBar(self.menu_bar) 175 176 #Creation de toolbar 177 self.tb = MainToolBar(self) 178 self.SetToolBar(self.tb) 179 180 #Creation des instances des controleurs 181 #self.cdon = CDonnees() 182 #self.cdos = CDossierGenetique() 183 self.cmed = CMedite() 184 self.cinfos = CInformations() 185 self.ctravail = CTravail() 186 self.dgm = Controleurs.DGManager.DGManager() 187 188 #Evenements sur Menu 189 wx.EVT_MENU(self, ID_ADD_AUTEUR, self.enregistrerAuteur) 190 wx.EVT_MENU(self, ID_ADD_OEUVRE, self.enregistrerOeuvre) 191 wx.EVT_MENU(self, ID_SUPP_AUTEUR, self.supprimerAuteur) 192 wx.EVT_MENU(self, ID_SUPP_OEUVRE, self.supprimerOeuvre) 193 wx.EVT_MENU(self, ID_QUITTER, self.quitter) 194 wx.EVT_CLOSE(self, self.OnCloseWindow) 195 196 197 wx.EVT_MENU(self, ID_CHARGER_DG, self.chargerDG) 198 wx.EVT_MENU(self, ID_CREER_VERSION, self.creerDossierVersion) 199 wx.EVT_MENU(self, ID_CREER_ETAT, self.creerEtat) 200 wx.EVT_MENU(self, ID_SUPP_VERSION, self.supprimerDossierVersion) 201 wx.EVT_MENU(self, ID_SUPP_ETAT, self.supprimerEtat) 202 wx.EVT_MENU(self, ID_IMPORTER_TEXTES, self.importerRepertoire) 203 204 wx.EVT_MENU(self, ID_CHARGER_INFOS, self.chargerInformations) 205 # wx.EVT_MENU(self, ID_INFOS_DG, self.chargerInfosDG) 206 # wx.EVT_MENU(self, ID_INFOS_CPLE, self.chargerInfosCple) 207 wx.EVT_MENU(self, ID_ADD_TRANSFOS, self.enregistrerTransformations) 208 wx.EVT_MENU(self, ID_ADD_COMMENT, self.enregistrerCommentaire) 209 wx.EVT_MENU(self, ID_ADD_TRANSFOS_COMMENT, self.enregistrerInformations) 210 wx.EVT_MENU(self, ID_ADD_ALL_TRANSFOS, self.enregistrerToutesInformations) 211 wx.EVT_MENU(self, ID_SUPP_TRANSFOS_COMMENT, self.supprimerInformations) 212 wx.EVT_MENU(self, ID_SUPP_COMMENT, self.supprimerCommentaire) 213 wx.EVT_MENU(self, ID_SUPP_ALL_TRANSFOS, self.supprimerToutesInformations) 214 wx.EVT_MENU(self, ID_LOAD_ALL_TRANSFOS_COMMENT, self.chargerInfosEtats) 215 216 wx.EVT_MENU(self, ID_EXECUTER, self.executerMedite) 217 wx.EVT_MENU(self, ID_EXECUTERALL, self.executerAll) 218 wx.EVT_MENU(self, ID_SOURCE, self.ouvrirFicSource) 219 wx.EVT_MENU(self, ID_CIBLE, self.ouvrirFicCible) 220 wx.EVT_MENU(self, ID_LAUNCH_STAT, self.launchTagger) 221 222 wx.EVT_MENU(self, ID_NEWCOMP, self.nouvelleComparaison) 223 # wx.EVT_MENU(self, ID_CLOSECOMP, self.fermeComparaison) 224 # wx.EVT_MENU(self, ID_CLOSEALLCOMP, self.fermeToutesComparaisons) 225 wx.EVT_MENU(self, ID_DELCOMP, self.supprimeComparaison) 226 wx.EVT_MENU(self, ID_DELALLCOMP, self.supprimeToutesComparaisons) 227 228 wx.EVT_MENU(self, ID_AIDE, self.aide) 229 wx.EVT_MENU(self, ID_APROPOS, self.aPropos) 230 231 ## Mise en place du plan de travail et des parametres (lissage, couleurs) 232 ## self.parDefaut() 233 #self.miseEnPlacePlanTravailTOTAL() 234 self.miseEnPlaceParametres() 235 236 # Facade Panel principal 237 self.nb = wx.Notebook(self) 238 #self.nb.SetSize(size=wx.Size(900, 700)) 239 self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnNBPageChanged, self.nb) 240 #win = wx.Window(self.nb) 241 self.createTreePanel()
242 # ok 243 # panelAnonyme=MainPanel(self.nb) 244 # p2=MainPanel(self.nb) 245 # self.nb.AddPage(panelAnonyme,"Comparaison") 246 # self.nb.AddPage(p2,"Comparaison2") 247 248 #self.panelMain = win.panelMain 249 250 #self.sizer = wx.FlexGridSizer()#(wx.VERTICAL) 251 #self.sizer.Add(self.nb) 252 #self.SetSizer(self.sizer) 253 #self.SetAutoLayout(True) 254 #self.Bind(wx.EVT_SIZE, self.OnSize) 255 256 # recharge le menu de Navigation
257 - def reloadNavMenu(self):
258 if self.mNavigation.GetMenuItemCount(): 259 lItems = self.mNavigation.GetMenuItems() 260 for item in lItems: 261 self.mNavigation.Delete(item.GetId()) 262 # i = 1 263 # while i<self.mNavigation.GetMenuItemCount(): 264 # sys.stderr.write("i = "+str(i)+"\n") 265 # sys.stderr.flush() 266 # self.mNavigation.Remove(i) 267 # i+=1 268 #self.mNavigation.Destroy() 269 #self.mNavigation = wx.Menu() 270 #navMenu = wx.Menu() 271 i = 0 272 while i<self.nb.GetPageCount(): 273 self.mNavigation.Append(ID_NAVMENU+i, str(self.nb.GetPage(i).getTitre()),'') 274 #sys.stderr.write('x'+self.nb.GetPage(i).getTitre()+'x\n') 275 wx.EVT_MENU(self, ID_NAVMENU+i, self.selectPage) 276 i+=1
277 #self.mNavigation.AppendMenu(ID_NAVMENU, 'Ouvrir', self.smOuvrir) 278
279 - def selectPage(self,event):
280 self.nb.SetSelection(event.GetId()-ID_NAVMENU)
281
282 - def getMainPanel(self):
283 """ Pointe sur le MainPanel associé à l'onglet courant du notebook """ 284 return self.nb.GetPage(self.nb.GetSelection())
285
286 - def getCompPanel(self):
287 """ Pointe sur le ComparaisonPanel associé à l'onglet courant du notebook """ 288 return self.getMainPanel().getComparaisonPanel()
289
290 - def getPlanTravail(self):
291 """ Pointe sur le plan de travail associé à l'onglet courant """ 292 return self.getMainPanel().planTravail
293
294 - def OnNBPageChanged(self,event):
295 """ Changement de pane, gestion des menus """ 296 if self.getMainPanel().isTreePanel(): 297 self.disableMenuDGCharge() 298 self.disableMenuArbre() 299 elif self.getPlanTravail().getAuteur() != '' and self.getPlanTravail().getOeuvre() != '': 300 self.enableMenuDGCharge() 301 self.enableMenuArbre() 302 else: 303 self.disableMenuDGCharge() 304 self.enableMenuArbre()
305
306 - def OnSize(self, event):
307 wx.Frame.OnSize(self,event) 308 wx.LayoutAlgorithm().LayoutFrame(self)
309 310
311 - def enableMenuArbre(self):
312 """ Autorise les menus interdits lorque l'on quitte le treePanel """ 313 #self.mComparaison.Enable(ID_NEWCOMP,True) 314 self.mComparaison.Enable(ID_DELCOMP,True) 315 self.mComparaison.Enable(ID_DELALLCOMP,True) 316 #self.mComparaison.Enable(ID_CLOSECOMP,True) 317 #self.mComparaison.Enable(ID_CLOSEALLCOMP,True) 318 self.menu_bar.EnableTop(2, True) 319 self.menu_bar.EnableTop(3, True)
320
321 - def disableMenuArbre(self):
322 """ Interdit certains menus lorsque l'on est sur le treepanel """ 323 #self.mComparaison.Enable(ID_NEWCOMP,False) 324 self.mComparaison.Enable(ID_DELCOMP,False) 325 self.mComparaison.Enable(ID_DELALLCOMP,False) 326 #self.mComparaison.Enable(ID_CLOSECOMP,False) 327 #self.mComparaison.Enable(ID_CLOSEALLCOMP,False) 328 self.menu_bar.EnableTop(2, False) 329 self.menu_bar.EnableTop(3, False)
330
331 - def nouvelleComparaison(self,event):
332 """ Crée une nouvelle de comparaison """ 333 newplan = PlanTravail("","","","","","",Parametres()) 334 self.listePlanTravail.appendPlanTravail(newplan) 335 newpanel=MainPanel(self.nb,newplan) 336 newpanel.initialised = False 337 # chargement du dossier génétique comme dans FormulaireMenuGenetique 338 if self.DGLoaded: 339 newpanel.getComparaisonPanel().textInfoAuteur.SetLabel(self.DGAuteur) 340 newpanel.getComparaisonPanel().textInfoOeuvre.SetLabel(self.DGOeuvre) 341 ### Mise a jour du plan de travail 342 newpanel.getComparaisonPanel().planTravail.setAuteur(self.DGAuteur) 343 newpanel.getComparaisonPanel().planTravail.setOeuvre(self.DGOeuvre) 344 newpanel.getComparaisonPanel().planTravail.setVersionSource('') 345 newpanel.getComparaisonPanel().planTravail.setEtatSource('') 346 newpanel.getComparaisonPanel().planTravail.setVersionCible('') 347 newpanel.getComparaisonPanel().planTravail.setEtatCible('') 348 self.disableMenuDGCharge() 349 self.enableMenuDGCharge() 350 # ajout de la page 351 self.nb.AddPage(newpanel,newplan.getEtatSource()+"-"+newplan.getEtatCible()) 352 self.nb.SetSelection(self.nb.GetPageCount()-1) 353 self.reloadNavMenu()
354 355 # supprime le panel courant
356 - def supprimeComparaison(self,event):
357 plan = self.getPlanTravail() 358 # demande de suppression des infos enregistrées dans informations.xml 359 # if ((self.getCompPanel().initialised) and 360 # self.cinfos.existeInformations(self.getPlanTravail()): 361 # phrase = u"Voulez-vous supprimer les informations enregistrées associées à cette comparaison ?" 362 # dlg = wx.MessageDialog(self,phrase,"Suppression",wx.YES|wx.CANCEL) 363 # res = dlg.ShowModal() 364 # dlg.Destroy() 365 # if res == wx.ID_CANCEL: 366 # return 367 # elif res == wx.ID_YES: 368 # self.cinfos.supprimerInformations(self.getPlanTravail()) 369 370 if ((self.getCompPanel().initialised) and self.cinfos.existeInformations(self.getPlanTravail())): 371 self.cinfos.supprimerInformations(self.getPlanTravail()) 372 # suppression de l'onglet et de son plan de travail associé 373 self.nb.DeletePage(self.nb.GetSelection()) 374 self.listePlanTravail.deletePlanTravail(plan) 375 self.reloadNavMenu()
376 377 # supprime tous les panels de comparaison
378 - def supprimeToutesComparaisons(self,event):
379 while self.nb.GetPageCount() != 1: 380 self.nb.SetSelection(self.nb.GetPageCount()-1) 381 self.supprimeComparaison(None) 382 self.nouvelleComparaison(None)
383 384 # supprime le panel courant 385 # def fermeComparaison(self,event): 386 # plan = self.getPlanTravail() 387 # # suppression de l'onglet et de son plan de travail associé 388 # self.nb.DeletePage(self.nb.GetSelection()) 389 # self.listePlanTravail.deletePlanTravail(plan) 390 # self.reloadNavMenu() 391 # 392 # # supprime tous les panels de comparaison 393 # def fermeToutesComparaisons(self,event): 394 # while self.nb.GetPageCount() != 1: 395 # self.nb.SetSelection(self.nb.GetPageCount()-1) 396 # self.fermeComparaison(NULL) 397 # self.nouvelleComparaison(NULL) 398
399 - def createTreePanel(self):
400 self.treePanel = TreePanel(self.nb, self) 401 self.nb.InsertPage(0,self.treePanel,"Arbre")
402
403 - def quitter(self, event):
404 self.Close(True)
405
406 - def OnCloseWindow(self, event):
407 text='Voulez vous vraiment quitter MEDITE ?' 408 dlg = wx.MessageDialog(self, text, 'Quitter',wx.YES_NO) 409 if dlg.ShowModal() == wx.ID_YES: 410 dlg.Destroy() 411 self.enregistrerPlanTravailTOTAL() 412 self.enregistrerToutesInformations(None) 413 self.Destroy() 414 else : 415 dlg.Destroy()
416
417 - def enregistrerPlanTravailTOTAL(self):
418 """ Enregistrement de tout le plan de travail (plan, parametres, couleurs) """ 419 try: 420 self.ctravail.enregistrerListePlans(self.listePlanTravail) 421 self.ctravail.enregistrerCouleurs(self.couleursTransfo) 422 self.ctravail.enregistrerParametres(self.parametres) 423 except Exception,e: 424 sys.stderr.write(str(e)) 425 traceback.print_exc() 426 sys.stderr.flush()
427
428 - def launchTagger(self, evt):
429 """ Etiquetage """ 430 self.SetCursor(wx.HOURGLASS_CURSOR) 431 if self.getCompPanel().initialised == True: 432 try: 433 tagger = MediteAppli.synthetic.TaggerExtension(self.getCompPanel().resultatTransfo) 434 frequencyMatrix = tagger.run() 435 textMatrix = MediteAppli.synthetic.TextFrequencyMatrix(self.getCompPanel().resultatTransfo) 436 self.getMainPanel().addStatPanel(frequencyMatrix,textMatrix) 437 except Exception,e1: 438 traceback.print_exc() 439 sys.stderr.flush() 440 dlg=wx.MessageDialog(self,str(e1),"Erreur",wx.OK) 441 dlg.ShowModal() 442 dlg.Destroy() 443 self.SetCursor(wx.STANDARD_CURSOR)
444 445 # Mise en place du plan de travail et des parametres (lissage, couleurs) 446 #def miseEnPlacePlanTravailTOTAL(self):
447 - def miseEnPlaceParametres(self):
448 # chargement plan de travail 449 # try : 450 # self.planTravail = self.ctravail.chargerPlan() 451 # if self.planTravail.getAuteur() != '' and self.planTravail.getOeuvre() != '': 452 # self.enableMenuDGCharge() 453 # except FichierNonTrouve, eFNT : 454 # self.planTravail = PlanTravail("","","","","","") #auteur,oeuvre,versSource,etatS,verCible,etatC 455 # chargement couleurs 456 try : 457 self.couleursTransfo = self.ctravail.chargerCouleurs() 458 except FichierNonTrouve, eFNT : 459 self.couleursTransfo = self.ctravail.chargerCouleursDefaut() 460 # chargement parametres 461 try : 462 self.parametres = self.ctravail.chargerParametres() 463 #sys.stderr.write("param = "+self.parametres.toString()) 464 except FichierNonTrouve, eFNT: 465 self.parametres = self.ctravail.chargerParametresDefaut()
466 467 468 # Mise en place du plan de travail, des couleurs et des parametres par defaut 469 # def parDefaut(self): 470 # #Variables concernant le dossier genetique courant 471 # self.planTravail = PlanTravail("","","","","","") #auteur,oeuvre,versSource,etatS,verCible,etatC 472 # #couleurs des transformations 473 # self.couleursTransfo = self.ctravail.chargerCouleursDefaut() 474 # #parametres de lissage 475 # self.parametres = self.ctravail.chargerParametresDefaut() 476 477 # Methode qui ouvre une fenetre A propos
478 - def aPropos(self, evt):
479 text=u" MEDITE - Machine EDITE\n\n Etude Diachronomique et \n Interpr\xe9tative des Textes d'Ecrivains\n\n Application imagin\xe9e et r\xe9alis\xe9e par\n\n Jean-Gabriel Ganascia et Julien Bourdaillet\n\nJean-Gabriel@Ganascia.name - Julien.Bourdaillet@lip6.fr \n\n Version 3.7" 480 dlg = wx.MessageDialog(self, text, 'A propos...',wx.OK | wx.ICON_INFORMATION) 481 dlg.ShowModal() 482 dlg.Destroy()
483 484 # Methode qui ouvre une fenetre d'aide
485 - def aide(self,evt):
486 if 'win' in sys.platform: 487 import wx.lib.iewin 488 self.newFenetre = wx.Frame(None, -6, 'aide') 489 self.newFenetre.html = wx.lib.iewin.IEHtmlWindow(self.newFenetre, -1, style=wx.NO_FULL_REPAINT_ON_RESIZE) 490 self.newFenetre.html.Navigate(os.path.join(constantes.REPMEDITE,'aide.html')) 491 self.newFenetre.Show()
492 493 # Methode qui appelle le formulaire de saisie pour enregistrer un auteur
494 - def enregistrerAuteur(self,evt):
495 formulaire=FormAuteur(self,-1) 496 formulaire.Show(True)
497 498 # Methode qui appelle le formulaire de saisie pour enregitrer une oeuvre
499 - def enregistrerOeuvre(self,evt):
500 feo = FormEnregistrerOeuvre(self)
501 502 # Methode qui appelle le formulaire de saisie pour supprimer un auteur
503 - def supprimerAuteur(self,evt):
504 fsa = FormSupprimerAuteur(self)
505 506 # Methode qui appelle le formulaire de saisie pour supprimer une oeuvre
507 - def supprimerOeuvre(self,evt):
508 formulaire=FormSupprimerOeuvre(self) 509 formulaire.Show(1)
510 511 # Methode qui rend actifs les menus et les boutons permettant d'ouvrir les fichiers source 512 # et cible
513 - def enableMenuDGCharge(self):
514 self.smOuvrir.Enable(ID_SOURCE, True) 515 self.tb.EnableTool(ID_SOURCE, True) 516 self.smOuvrir.Enable(ID_CIBLE, True) 517 self.tb.EnableTool(ID_CIBLE, True) 518 self.mMedite.Enable(ID_EXECUTER,True) 519 self.tb.EnableTool(ID_EXECUTER,True) 520 self.mMedite.Enable(ID_EXECUTERALL,True)
521
522 - def disableMenuDGCharge(self):
523 self.smOuvrir.Enable(ID_SOURCE, False) 524 self.tb.EnableTool(ID_SOURCE, False) 525 self.smOuvrir.Enable(ID_CIBLE, False) 526 self.tb.EnableTool(ID_CIBLE, False) 527 self.mMedite.Enable(ID_EXECUTER,False) 528 self.tb.EnableTool(ID_EXECUTER,False) 529 self.mMedite.Enable(ID_EXECUTERALL,False)
530 531 # Methode qui rend inactifs les menus et les boutons permettant de charger ou d'enregistrer 532 # les informations, d'executer medite et reinitialise les variables du dossier genetique 533 # courant ainsi que les fenêtres de visualisation
534 - def disableDGCharge(self):
535 self.getPlanTravail().setVersionSource('') 536 self.getPlanTravail().setEtatSource('') 537 self.getPlanTravail().setVersionCible('') 538 self.getPlanTravail().setEtatCible('') 539 540 self.mInformations.Enable(ID_CHARGER_INFOS,False) 541 self.smEnregistrer.Enable(ID_ADD_TRANSFOS, False) 542 self.smEnregistrer.Enable(ID_ADD_COMMENT, False) 543 self.smEnregistrer.Enable(ID_ADD_TRANSFOS_COMMENT, False) 544 self.mMedite.Enable(ID_EXECUTER, False) 545 self.tb.EnableTool(ID_EXECUTER, False) 546 547 self.getCompPanel().textWindowLeft.SetValue(u"état source") 548 self.getCompPanel().textWindowRight.SetValue(u"état cible") 549 self.getCompPanel().textInfoVersionS.SetLabel("") 550 self.getCompPanel().textInfoEtatS.SetLabel("") 551 self.getCompPanel().textInfoVersionC.SetLabel("") 552 self.getCompPanel().textInfoEtatC.SetLabel("") 553 self.getCompPanel().transformations.SetValue("")
554 555 # Methode qui appelle le formulaire de saisie pour charger DG
556 - def chargerDG(self,evt):
557 formulaire=FormChargerDG(self) 558 formulaire.Show(True)
559 560 # Methode qui appelle le formulaire de saisie pour creer un dossier version
561 - def creerDossierVersion(self,evt):
562 formulaire=FormCreerVersion(self) 563 formulaire.Show(True)
564 565 # Methode qui appelle le formulaire de saisie pour creer un etat
566 - def creerEtat(self,evt):
567 formulaire=FormCreerEtat(self) 568 formulaire.Show(True)
569 570 # Methode qui appelle le formulaire de saisie pour supprimer un dossier version
571 - def supprimerDossierVersion(self,evt):
572 formulaire=FormSupprimerVersion(self) 573 formulaire.Show(True)
574 575 # Methode qui appelle le formulaire de saisie pour supprimer un état
576 - def supprimerEtat(self,evt):
577 formulaire=FormSupprimerEtat(self) 578 formulaire.Show(True)
579
580 - def importerRepertoire(self,evt):
581 formulaire=FormImporterRepertoire(self) 582 formulaire.Show(True)
583 584 585 # Methode qui va charger les informations d'une comparaison des deux états ouverts 586 # et va rendre inactifs les boutons et menus enregistrer les informations
587 - def chargerInformations(self,evt):
588 try: 589 self.__chargement(None) 590 except InformationsNonTrouvees, eINT: 591 dlg=wx.MessageDialog(self, u"Les informations n'ont pas \xe9t\xe9 trouv\xe9es !!","Attention",wx.OK) 592 dlg.ShowModal() 593 dlg.Destroy()
594 595 # Methode qui va enregistrer les transformations, resultats de la comparaison des deux 596 # états ouverts
597 - def enregistrerTransformations(self,evt):
598 self.cinfos.enregistrerTransformations(self.getPlanTravail(),self.getCompPanel().resultatTransfo)
599 600 # Methode qui enregistre le commentaire sur un couple d'états, edite par l'utilisateur 601 # Le commentaire n'est pas enregistre si il est vide 602 # Si un commentaire existe deja pour ce couple d'états, la methode appele le formulaire 603 # de choix qui lui permet de choisir soit d'ecraser l'ancien commentaire par le nouveau 604 # soit d'ajouter le nouveau a l'ancien commentaire 605 # Si l'application n'a pas ete execute sur le couple d'états, 606 # le commentaire n'est pas enregistre
607 - def enregistrerCommentaire(self,evt):
608 if (self.getCompPanel().commentaire.GetValue()!=""): 609 try: 610 self.cinfos.enregistrerCommentaire(self.getPlanTravail(),self.getCompPanel().commentaire.GetValue()) 611 except CommentaireDejaExistant, eCDE: 612 formulaire=FormEnregistrerCommentaire(self,eCDE.getCommentaire().getCommentaire(), 613 self.parametres) 614 formulaire.Show(True) 615 except InformationsNonTrouvees, eINT: 616 self.__choixParametres() 617 ## msg = "Les transformations concernant les deux états n'ont pas \xe9t\xe9 enregistr\xe9" 618 ## msg += '\nPour enregistrer le commentaire vous devez cliquer, dans la barre de menu "Informations", sur "Enregistrer" puis sur " Transformations et Commentaire"' 619 ## dlg=wx.MessageDialog(self, msg,"Attention",wx.OK) 620 ## dlg.ShowModal() 621 ## dlg.Destroy() 622 else: 623 dlg=wx.MessageDialog(self, "Le commentaire est vide","Attention",wx.OK) 624 dlg.ShowModal() 625 dlg.Destroy()
626 627 # Methode qui appelle le formulaire de saisie pour supprimer les informations d'un 628 # couple d'états
629 - def supprimerInformations(self,evt):
630 formulaire=FormSupprimerInformations(self, "Supprimer les informations") 631 formulaire.Show(True)
632
633 - def supprimerToutesInformations(self,evt):
634 page = self.nb.GetSelection() 635 self.SetCursor(wx.HOURGLASS_CURSOR) 636 max = self.nb.GetPageCount() 637 i = 1 638 while i < self.nb.GetPageCount() : 639 self.nb.SetSelection(i) 640 if self.getCompPanel().initialised == False: 641 i+=1 642 continue 643 #try: 644 self.cinfos.supprimerInformations(self.getPlanTravail()) 645 #finally: 646 i+=1 647 self.nb.SetSelection(page) 648 self.SetCursor(wx.STANDARD_CURSOR)
649 650 # Methode qui appelle le formulaire de saisie pour supprimer le commentaire d'un 651 # couple de états
652 - def supprimerCommentaire(self,evt):
653 formulaire=FormSupprimerCommentaire(self, "Supprimer Commentaire") 654 formulaire.Show(True)
655 656 # Methode qui permet d'enregistrer les transformations et le commentaire d'un 657 # couple de états
658 - def enregistrerInformations(self,evt):
659 if self.getCompPanel().initialised == False: 660 #sys.stderr.write("panel not init\n") 661 sys.stderr.flush() 662 return 663 664 self.cinfos.enregistrerTransformations(self.getPlanTravail(),self.getCompPanel().resultatTransfo) 665 if self.getCompPanel().commentaire.GetValue() !='' : 666 try: 667 self.cinfos.enregistrerCommentaire(self.getPlanTravail(),self.getCompPanel().commentaire.GetValue()) 668 except AuteurNonTrouve, eANT: 669 dlg=wx.MessageDialog(self, u"L'auteur n'a pas \xe9t\xe9 trouv\xe9!!","Attention",wx.OK) 670 dlg.ShowModal() 671 dlg.Destroy() 672 except OeuvreNonTrouvee, eONT: 673 dlg=wx.MessageDialog(self, u"L'oeuvre n'a pas \xe9t\xe9 trouv\xe9e!!","Attention",wx.OK) 674 dlg.ShowModal() 675 dlg.Destroy() 676 except CommentaireDejaExistant, eCDE: 677 if evt!=None: 678 formulaire=FormEnregistrerCommentaire(self,eCDE.getCommentaire().getCommentaire(), 679 self.parametres) 680 formulaire.Show(True)
681
682 - def enregistrerToutesInformations(self,evt):
683 page = self.nb.GetSelection() 684 self.SetCursor(wx.HOURGLASS_CURSOR) 685 686 i = 1 687 while i < self.nb.GetPageCount(): 688 self.nb.SetSelection(i) 689 self.enregistrerInformations(None) 690 i+=1 691 self.nb.SetSelection(page) 692 self.SetCursor(wx.STANDARD_CURSOR)
693 694 # Methode qui rend actifs les boutons et menus Charger les informations, 695 # enregistrer commentaire et executer medite apres l'ouverture d'un couple de états
696 - def enableMenuEtatsOuverts(self):
697 if ((self.getPlanTravail().getEtatSource() !="") & (self.getPlanTravail().getEtatCible() !="")): 698 self.mInformations.Enable(ID_CHARGER_INFOS,True) 699 self.smEnregistrer.Enable(ID_ADD_COMMENT, True) 700 self.mMedite.Enable(ID_EXECUTER, True) 701 self.tb.EnableTool(ID_EXECUTER, True)
702 703 # Methode qui appelle le formulaire de saisie pour ouvrir un état Source
704 - def ouvrirFicSource(self,evt):
705 #Mise en forme du texte 706 formulaire=FormOuvrirFichier(self,u"Ouvrir un état Source","Source") 707 formulaire.Show(1)
708 709 # Methode qui appelle le formulaire de saisie pour ouvrir un état Cible
710 - def ouvrirFicCible(self,evt):
711 #Mise en forme du texte 712 formulaire=FormOuvrirFichier(self,u"Ouvrir un état Cible","Cible") 713 formulaire.Show(1)
714
715 - def executerAll(self,evt):
716 if not self.DGLoaded: 717 return 718 719 self.SetCursor(wx.HOURGLASS_CURSOR) 720 fim = Controleurs.FInfoManager.FInfoManager.FInfoManager(Controleurs.DGManager.Auteur(self.DGAuteur),Controleurs.DGManager.Oeuvre(self.DGOeuvre)) 721 lEtats = fim.getArbre().getListePlateEtats() 722 while not lEtats == []: 723 (etatS,versionS) = lEtats.pop(0) 724 for (etatC, versionC) in lEtats: 725 # création PlanTravail et Panel 726 plan = PlanTravail(self.DGAuteur, self.DGOeuvre, versionS.getNom(), etatS.getNom(), versionC.getNom(), etatC.getNom(),self.parametres) 727 self.listePlanTravail.appendPlanTravail(plan) 728 panel=MainPanel(self.nb,plan) 729 self.nb.AddPage(panel,plan.getEtatSource()+"-"+plan.getEtatCible()) 730 self.nb.SetSelection(self.nb.GetPageCount()-1) 731 fontDefault=wx.Font(10,wx.DEFAULT,wx.NORMAL,wx.NORMAL,encoding=wx.FONTENCODING_ISO8859_1) 732 # chargement état Source 733 cheminS=self.dgm.getEtatPath(self.DGAuteur, self.DGOeuvre, versionS.getNom(), etatS.getNom()) 734 self.getCompPanel().textWindowLeft.SetStyle(0,0,wx.TextAttr(wx.BLACK,wx.WHITE,fontDefault)) 735 self.getCompPanel().textWindowLeft.SetValue(loadFile(cheminS)) 736 # chargement état cible 737 cheminC=self.dgm.getEtatPath(self.DGAuteur, self.DGOeuvre, versionC.getNom(), etatC.getNom()) 738 self.getCompPanel().textWindowRight.SetStyle(0,0,wx.TextAttr(wx.BLACK,wx.WHITE,fontDefault)) 739 self.getCompPanel().textWindowRight.SetValue(loadFile(cheminC)) 740 self.getCompPanel().initialised = True 741 self.executerMedite(None) 742 self.reloadNavMenu() 743 self.SetCursor(wx.STANDARD_CURSOR)
744 745 # Methode qui appelle la méthode comparerEtats du controleur Medite afin de comparer 746 # les deux états ouverts
747 - def executerMedite(self,evt):
748 logging.info('lancement comparaison') 749 self.noirSurBlanc() 750 try : 751 max = 20 752 self.prog = wx.ProgressDialog('Attendre','Excecution de la comparaison',max,self, 753 style = wx.PD_AUTO_HIDE | wx.PD_APP_MODAL ) # | wxPD_ESTIMATED_TIME ) 754 755 count = 0 756 while count < (max-4)/2: 757 count = count + 2 758 #wxSleep(1) 759 self.prog.Update(count) 760 761 #sys.stderr.write( 'pParametres = '+self.parametres.toString()) 762 self.getPlanTravail().setParam(self.parametres) 763 self.getCompPanel().resultatTransfo = self.cmed.comparerEtats(self.getPlanTravail()) 764 self.getCompPanel().initialised = True 765 766 self.prog.Update(10,"Affichage des transformations") 767 while count < max-2: 768 count = count + 2 769 #wxSleep(1) 770 self.prog.Update(count) 771 self.affichageComparaison() 772 773 sys.stderr.flush() 774 self.prog.Update(max) 775 776 except Exception, e: 777 #print e 778 self.prog.Update(max) 779 # dlg=wx.MessageDialog(self,str(e),wx.OK) 780 # dlg.ShowModal() 781 # dlg.Destroy() 782 sys.stderr.write( str(e)) 783 traceback.print_exc() 784 sys.stderr.flush()
785
786 - def reverseString(self, chaine):
787 if isinstance(chaine,unicode): 788 uni = [c for c in chaine] 789 uni.reverse() 790 return ''.join(uni) 791 else: # str 792 uni = unicode(chaine, 'utf-8') 793 uni = [c for c in uni] 794 uni.reverse() 795 uni = ''.join(uni) 796 return uni.encode('utf-8')
797 798 # Methode qui permet d'afficher les resultats de la comparaison dans la fenetre Transformations
799 - def affichageTransformations(self, reverse=False):
800 texteAffichage= [] 801 textConca = self.getCompPanel().resultatTransfo.getTextesConcatenes() 802 #print "recharger affichageTransformations type(texte) ",type(textConca)#,unicode(textConca,'utf-8') 803 ## liste des sequences de caracteres inseres 804 texteAffichage.append(" Insertions : \n") 805 for X in self.getCompPanel().resultatTransfo.getListeInsertions() : 806 chaine = [ ' - ', textConca[X[0]:X[1]], '\n'] 807 #if reverse: 808 # chaine = self.reverseString(chaine) 809 texteAffichage.extend(chaine) 810 ## liste des sequences de caracteres supprimes 811 texteAffichage+="\n Suppressions :\n" 812 for X in self.getCompPanel().resultatTransfo.getListeSuppressions(): 813 chaine = [' - ', textConca[X[0]:X[1]], '\n'] 814 #print chaine 815 #if reverse: 816 # chaine = self.reverseString(chaine) 817 texteAffichage.extend(chaine) 818 ## liste des sequences de caracteres deplaces 819 texteAffichage+="\n Deplacements : \n" 820 ldRes = self.getCompPanel().resultatTransfo.getListeDeplacements() 821 lg = len(ldRes)/2 822 for X in ldRes[0:lg]: 823 chaine = [' - ',textConca[X[0]:X[1]],'\n'] 824 #if reverse: 825 # chaine = self.reverseString(chaine) 826 texteAffichage.extend(chaine) 827 ## liste des sequences de caracteres remplaces 828 texteAffichage.append("\n Remplacements : \n") 829 lrRes = self.getCompPanel().resultatTransfo.getListeRemplacements() 830 longueur = len(lrRes)/2 831 i = 0 832 for X in lrRes[0:longueur]: 833 #if reverse: 834 # chaine = self.reverseString(textConca[lrRes[i+longueur][0]:lrRes[i+longueur][1]]) + \ 835 # " <---- "+self.reverseString(" - "+textConca[lrRes[i][0]:lrRes[i][1]])+'\n' 836 #else: 837 chaine = [" - ",textConca[lrRes[i][0]:lrRes[i][1]], " ----> ",textConca[lrRes[i+longueur][0]:lrRes[i+longueur][1]],'\n'] 838 texteAffichage.extend(chaine) 839 i+=1 840 #print "recharger affichageTransformations type(texteAffichage) ",type(texteAffichage) 841 return ''.join(texteAffichage)
842
843 - def affichageCouleur(self):
844 """ Methode qui permet d'afficher les resultats de la comparaison sur le texte Source 845 et Cible a l'aide couleur et de font 846 Les insertions seront reperees par du texte Bleu sur le texte cible 847 Les suppressions seront reperees par du texte Rouge sur le texte source 848 Les deplacements seront reperes par du texte en gras et souligne dans les deux textes 849 Les remplacements seront reperes par du texte en violine-rose dans les deux textes """ 850 try: 851 lgSource = self.getCompPanel().resultatTransfo.getLgSource() 852 except AttributeError: 853 return # resultatTransfo n'existe pas donc pas de couleur à afficher 854 855 #texte = self.getCompPanel().textWindowLeft.GetValue() + self.getCompPanel().textWindowRight.GetValue() 856 texte = self.getCompPanel().resultatTransfo.getTextesConcatenes() 857 #print "affichageCouleur type(texte) ",type(texte) 858 chaine,y,enc = decode_string_heuristically(texte) 859 #if isinstance(texte, unicode): 860 if enc == 'utf-8': 861 #print texte.encode('utf-8'),len(texte),len(texte.encode('utf-8')) 862 backup = self.getCompPanel().resultatTransfo 863 #print backup,backup.getTextesConcatenes() 864 mapper = Utile.decodage.mapperUnicodeUtf(chaine, 'utf-8')#backup.getTextesConcatenes()) 865 res = mapper.utfToUniResultat(backup) 866 self.getCompPanel().resultatTransfo = res 867 self.getCompPanel().resultatTransfoAffichageOnly = res 868 self.affichageCouleur_() 869 self.getCompPanel().resultatTransfo = backup 870 else: 871 self.getCompPanel().resultatTransfoAffichageOnly = self.getCompPanel().resultatTransfo 872 self.affichageCouleur_()
873
874 - def affichageCouleur_(self):
875 # Resultats de la comparaison sur les textes avec les couleurs 876 lgSource = self.getCompPanel().resultatTransfo.getLgSource() 877 self.getCompPanel().textWindowRight.Freeze() 878 self.getCompPanel().textWindowLeft.Freeze() 879 #print "affichageCouleur type(self.getCompPanel().resultatTransfo.getTextesConcatenes()) ",type(self.getCompPanel().resultatTransfo.getTextesConcatenes()) 880 #print "affichageCouleur type(self.getCompPanel().textWindowLeft ",type(self.getCompPanel().textWindowLeft.GetValue()) 881 # Deplacements 882 lSource = [] 883 lCible = [] 884 for X in self.getCompPanel().resultatTransfo.getListeDeplacements(): 885 if X[0]<lgSource: 886 lSource.append((X[0],X[1])) 887 else: 888 lCible.append((X[0]-lgSource,X[1]-lgSource)) 889 #lSource.sort() 890 #lCible.sort() 891 892 if (self.couleursTransfo.getDeplacement() & 2)==2 : italic = wx.ITALIC 893 else: italic = wx.NORMAL 894 if (self.couleursTransfo.getDeplacement() & 4)==4 : weight = wx.BOLD 895 else: weight = wx.NORMAL 896 if (self.couleursTransfo.getDeplacement() & 8)==8 : underline = True 897 else: underline = False 898 #fontDepl=wx.Font(10,wx.DEFAULT,italic,weight,underline,encoding=wx.FONTENCODING_ISO8859_1) 899 fontDepl = self.getCompPanel().textWindowLeft.GetFont() 900 fontDepl.SetStyle(italic) 901 fontDepl.SetWeight(weight) 902 fontDepl.SetUnderlined(underline) 903 # insertions 904 for X in self.getCompPanel().resultatTransfo.getListeInsertions(): 905 i1 = X[0] - lgSource 906 if i1 < 0: i1 = 0 907 i2 = X[1] - lgSource 908 self.getCompPanel().textWindowRight.SetStyle(i1,i2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulInsert())) 909 # suppressions 910 for X in self.getCompPanel().resultatTransfo.getListeSuppressions(): 911 i1 = X[0] ; i2 = X[1] 912 self.getCompPanel().textWindowLeft.SetStyle(i1,i2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulSupp())) 913 914 # Remplacements 915 for X in self.getCompPanel().resultatTransfo.getListeRemplacements(): 916 if X[0]<lgSource:# Texte Source 917 i1 = X[0] ; i2 = X[1] 918 self.getCompPanel().textWindowLeft.SetStyle(i1,i2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulRemp())) 919 else: # texte Cible 920 i1 = X[0] - lgSource ; i2 = X[1] - lgSource 921 self.getCompPanel().textWindowRight.SetStyle(i1,i2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulRemp())) 922 #déplacements 923 for d1,d2 in lSource: 924 textAttr = wx.TextAttr() 925 res = self.getCompPanel().textWindowLeft.GetStyle(d1, textAttr) 926 if res: textAttr.SetFont(fontDepl) 927 else: textAttr = wx.TextAttr(font=fontDepl) 928 self.getCompPanel().textWindowLeft.SetStyle(d1,d2,wx.TextAttr(font=fontDepl)) 929 930 for d1,d2 in lCible: 931 textAttr = wx.TextAttr() 932 res = self.getCompPanel().textWindowRight.GetStyle(d1, textAttr) 933 if res: textAttr.SetFont(fontDepl) 934 else: textAttr = wx.TextAttr(font=fontDepl) 935 self.getCompPanel().textWindowRight.SetStyle(d1,d2,wx.TextAttr(font=fontDepl)) 936 937 self.getCompPanel().textWindowRight.Thaw() 938 self.getCompPanel().textWindowLeft.Thaw() 939
940 - def affichageCouleur___(self):
941 # Resultats de la comparaison sur les textes avec les couleurs 942 lgSource = self.getCompPanel().resultatTransfo.getLgSource() 943 self.getCompPanel().textWindowRight.Freeze() 944 self.getCompPanel().textWindowLeft.Freeze() 945 #print "affichageCouleur type(self.getCompPanel().resultatTransfo.getTextesConcatenes()) ",type(self.getCompPanel().resultatTransfo.getTextesConcatenes()) 946 #print "affichageCouleur type(self.getCompPanel().textWindowLeft ",type(self.getCompPanel().textWindowLeft.GetValue()) 947 # Deplacements 948 lSource = [] 949 lCible = [] 950 for X in self.getCompPanel().resultatTransfo.getListeDeplacements(): 951 if X[0]<lgSource: 952 lSource.append((X[0],X[1])) 953 else: 954 lCible.append((X[0]-lgSource,X[1]-lgSource)) 955 lSource.sort() 956 lCible.sort() 957 958 if (self.couleursTransfo.getDeplacement() & 2)==2 : italic = wx.ITALIC 959 else: italic = wx.NORMAL 960 if (self.couleursTransfo.getDeplacement() & 4)==4 : weight = wx.BOLD 961 else: weight = wx.NORMAL 962 if (self.couleursTransfo.getDeplacement() & 8)==8 : underline = True 963 else: underline = False 964 #fontDepl=wx.Font(10,wx.DEFAULT,italic,weight,underline,encoding=wx.FONTENCODING_ISO8859_1) 965 fontDepl = self.getCompPanel().textWindowLeft.GetFont() 966 fontDepl.SetStyle(italic) 967 fontDepl.SetWeight(weight) 968 fontDepl.SetUnderlined(underline) 969 970 # Déplacements seuls 971 for d1,d2 in lSource: 972 self.getCompPanel().textWindowLeft.SetStyle(d1,d2,wx.TextAttr(font=fontDepl)) 973 #self.getCompPanel().textWindowLeft.SetStyle(d1, d2,0) 974 #print d1,d2 975 for d1,d2 in lCible: 976 self.getCompPanel().textWindowRight.SetStyle(d1,d2,wx.TextAttr(font=fontDepl)) 977 #self.getCompPanel().textWindowRight.SetStyle(d1, d2,0) 978 #print d1+lgSource,d2+lgSource 979 # Insertions 980 t=self.getCompPanel().resultatTransfo.getTextesConcatenes() 981 #print lgSource,len(t) 982 #print t 983 for X in self.getCompPanel().resultatTransfo.getListeInsertions(): 984 #sys.stderr.write("INS3 : "+t[X[0]:X[1]]+"\n") 985 #self.getCompPanel().textWindowRight.SetInsertionPoint(0) 986 i1 = X[0]-lgSource 987 if i1<0:i1=0 988 i2 = X[1]-lgSource 989 #sys.stderr.write("X="+str(X)+" / i1="+str(i1)+" / i2="+str(i2)+"\n") 990 self.getCompPanel().textWindowRight.SetStyle(i1,i2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulInsert())) 991 #self.getCompPanel().textWindowRight.SetStyle(i1, i2, 0) 992 for d1,d2 in lCible: # Déplacements dans des insertions 993 if ((i1<=d1<=i2) or (i1<=d2<=i2) or ((d1<=i1)and(d2>=i2))): 994 #sys.stderr.write("dep : "+t[d1:d2]+"\n") 995 if (d1<=i1): 996 if (d2<=i2): 997 self.getCompPanel().textWindowRight.SetStyle(i1,d2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulInsert(),fontDepl)) 998 #self.getCompPanel().textWindowRight.SetStyle(i1, d2, 0) 999 else: 1000 self.getCompPanel().textWindowRight.SetStyle(i1,i2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulInsert(),fontDepl)) 1001 else: 1002 if(d2<=i2): 1003 self.getCompPanel().textWindowRight.SetStyle(d1,d2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulInsert(),fontDepl)) 1004 else: 1005 self.getCompPanel().textWindowRight.SetStyle(d1,i2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulInsert(),fontDepl)) 1006 1007 # Suppressions 1008 #t=self.getCompPanel().resultatTransfo.getTextesConcatenes() 1009 for X in self.getCompPanel().resultatTransfo.getListeSuppressions(): 1010 #self.getCompPanel().textWindowLeft.SetInsertionPoint(0) 1011 i1 = X[0] 1012 i2 = X[1] 1013 self.getCompPanel().textWindowLeft.SetStyle(i1,i2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulSupp())) 1014 #self.getCompPanel().textWindowLeft.SetStyle(i1, i2, 0) 1015 for d1,d2 in lSource: # Déplacements dans Suppresion 1016 if ((i1<=d1<=i2) or (i1<=d2<=i2) or ((d1<=i1)and(d2>=i2))): 1017 if (d1<=i1): 1018 if (d2<=i2): 1019 self.getCompPanel().textWindowLeft.SetStyle(i1,d2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulSupp(),fontDepl)) 1020 #self.getCompPanel().textWindowLeft.SetStyle(i1, d2, 0) 1021 else: 1022 self.getCompPanel().textWindowLeft.SetStyle(i1,i2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulSupp(),fontDepl)) 1023 else: 1024 if(d2<=i2): 1025 self.getCompPanel().textWindowLeft.SetStyle(d1,d2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulSupp(),fontDepl)) 1026 else: 1027 self.getCompPanel().textWindowLeft.SetStyle(d1,i2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulSupp(),fontDepl)) 1028 1029 # Remplacements 1030 for X in self.getCompPanel().resultatTransfo.getListeRemplacements(): 1031 if X[0]<lgSource:# Texte Source 1032 #self.getCompPanel().textWindowLeft.SetInsertionPoint(0) 1033 i1 = X[0] 1034 i2 = X[1] 1035 self.getCompPanel().textWindowLeft.SetStyle(i1,i2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulRemp())) 1036 for d1,d2 in lSource: # déplacement dans remplacement 1037 if ((i1<=d1<=i2) or (i1<=d2<=i2) or ((d1<=i1)and(d2>=i2))): 1038 if (d1<=i1): 1039 if (d2<=i2): 1040 self.getCompPanel().textWindowLeft.SetStyle(i1,d2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulRemp(),fontDepl)) 1041 else: 1042 self.getCompPanel().textWindowLeft.SetStyle(i1,i2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulRemp(),fontDepl)) 1043 else: 1044 if(d2<=i2): 1045 self.getCompPanel().textWindowLeft.SetStyle(d1,d2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulRemp(),fontDepl)) 1046 else: 1047 self.getCompPanel().textWindowLeft.SetStyle(d1,i2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulRemp(),fontDepl)) 1048 else: # texte Cible 1049 #self.getCompPanel().textWindowRight.SetInsertionPoint(0) 1050 i1 = X[0]-lgSource 1051 i2 = X[1]-lgSource 1052 self.getCompPanel().textWindowRight.SetStyle(i1,i2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulRemp())) 1053 for d1,d2 in lCible: # déplacement dans remplacement 1054 if ((i1<=d1<=i2) or (i1<=d2<=i2) or ((d1<=i1)and(d2>=i2))): 1055 if (d1<=i1): 1056 if (d2<=i2): 1057 self.getCompPanel().textWindowRight.SetStyle(i1,d2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulRemp(),fontDepl)) 1058 else: 1059 self.getCompPanel().textWindowRight.SetStyle(i1,i2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulRemp(),fontDepl)) 1060 else: 1061 if(d2<=i2): 1062 self.getCompPanel().textWindowRight.SetStyle(d1,d2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulRemp(),fontDepl)) 1063 else: 1064 self.getCompPanel().textWindowRight.SetStyle(d1,i2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulRemp(),fontDepl)) 1065 1066 self.getCompPanel().textWindowRight.Thaw() 1067 self.getCompPanel().textWindowLeft.Thaw() 1068
1069 - def affichageComparaison(self):
1070 #Listes des transformations affichees dans la fenetre transformations 1071 logging.debug('begin affichageTransformations') 1072 trans = self.affichageTransformations()#reverse=True) 1073 logging.debug('fin affichageTransformations') 1074 1075 chaine,num,encodage = decode_string_heuristically(trans) 1076 if encodage == 'utf-8': 1077 fontDefault=wx.Font(10,wx.DEFAULT,wx.NORMAL,wx.NORMAL,encoding=wx.FONTENCODING_UTF8) 1078 else: 1079 fontDefault=wx.Font(10,wx.DEFAULT,wx.NORMAL,wx.NORMAL) 1080 #print "affichageComparaison type(chaine) ",type(chaine),len(chaine) 1081 self.getCompPanel().transformations.SetDefaultStyle(wx.TextAttr(font=fontDefault)) 1082 1083 #s = unicode(self.getCompPanel().resultatTransfo.getTextesConcatenes(),'utf-8') 1084 #print s.encode('raw_unicode_escape') 1085 #print s[:25].encode('raw_unicode_escape') 1086 #s = self.reverseString(s[:25]) 1087 #print s.encode('unicode_escape') 1088 #print "affichageComparaison type(chaine) ",type(chaine),len(chaine) 1089 #print "affichageComparaison type(trans) ",type(trans),len(trans) 1090 self.getCompPanel().transformations.Clear() 1091 self.getCompPanel().transformations.SetValue(chaine) 1092 1093 logging.debug('begin affichageCouleur') 1094 self.affichageCouleur() 1095 logging.debug('fin affichageCouleur') 1096 #Rendre accessible les fonctionnalites enregistrer transformations et les informations 1097 self.smEnregistrer.Enable(ID_ADD_TRANSFOS, True) 1098 self.smEnregistrer.Enable(ID_ADD_TRANSFOS_COMMENT, True)
1099
1100 - def __chargerInfosEtats(self,event):
1101 self.SetCursor(wx.HOURGLASS_CURSOR) 1102 listeInfos = self.cinfos.rechercherLInformationsDG(self.DGAuteur, self.DGOeuvre) 1103 for infos in listeInfos: 1104 plan = PlanTravail(self.DGAuteur, self.DGOeuvre, 1105 infos.getVersionSource(), infos.getEtatSource(), 1106 infos.getVersionCible(), infos.getEtatCible(),infos.getParametres()) 1107 self.listePlanTravail.appendPlanTravail(plan) 1108 panel=MainPanel(self.nb,plan) 1109 self.nb.AddPage(panel,plan.getEtatSource()+"-"+plan.getEtatCible()) 1110 if plan.getAuteur() != '' and plan.getOeuvre() != '': 1111 self.enableMenuDGCharge() 1112 self.nb.SetSelection(self.nb.GetPageCount()-1) 1113 self.rechargerEtats(infos) 1114 infos = None 1115 listeInfos = None 1116 self.reloadNavMenu() 1117 self.SetCursor(wx.STANDARD_CURSOR)
1118
1119 - def chargerInfosEtats(self,event):
1120 self.SetCursor(wx.HOURGLASS_CURSOR) 1121 #listeInfos = self.cinfos.rechercherLInformationsDG(self.DGAuteur, self.DGOeuvre) 1122 for infos in self.cinfos.generateLInformationsDG(self.DGAuteur, self.DGOeuvre): 1123 plan = PlanTravail(self.DGAuteur, self.DGOeuvre, 1124 infos.getVersionSource(), infos.getEtatSource(), 1125 infos.getVersionCible(), infos.getEtatCible(),infos.getParametres()) 1126 self.listePlanTravail.appendPlanTravail(plan) 1127 panel=MainPanel(self.nb,plan) 1128 self.nb.AddPage(panel,plan.getEtatSource()+"-"+plan.getEtatCible()) 1129 if plan.getAuteur() != '' and plan.getOeuvre() != '': 1130 self.enableMenuDGCharge() 1131 self.nb.SetSelection(self.nb.GetPageCount()-1) 1132 self.rechargerEtats(infos) 1133 #infos = None 1134 #listeInfos = None 1135 self.reloadNavMenu() 1136 self.SetCursor(wx.STANDARD_CURSOR)
1137
1138 - def rechargerListeEtats(self):
1139 # chargement de la liste des plans de travail 1140 try : 1141 self.listePlanTravail = self.ctravail.chargerListePlans() 1142 # if self.planTravail.getAuteur() != '' and self.planTravail.getOeuvre() != '': 1143 # self.enableMenuDGCharge() 1144 except FichierNonTrouve, eFNT : 1145 # on crée une nouvelle liste dans laquelle ion insère un plan 1146 self.listePlanTravail = ListePlanTravail() 1147 plan = PlanTravail("","","","","","",Parametres()) #auteur,oeuvre,versSource,etatS,verCible,etatC 1148 self.listePlanTravail.appendPlanTravail(plan) 1149 panel=MainPanel(self.nb,plan) 1150 panel.initialised = False 1151 self.nb.AddPage(panel,plan.getEtatSource()+"-"+plan.getEtatCible()) 1152 self.nb.SetSelection(self.nb.GetPageCount()-1) 1153 return 1154 #sys.stderr.write(self.listePlanTravail.toString()) 1155 if self.listePlanTravail.estVide() or self.listePlanTravail.getListe()[0].getAuteur()=='': 1156 self.DGLoaded = False 1157 # on crée une nouvelle liste dans laquelle on insère un plan 1158 self.listePlanTravail = ListePlanTravail() 1159 plan = PlanTravail("","","","","","",Parametres()) 1160 self.listePlanTravail.appendPlanTravail(plan) 1161 panel=MainPanel(self.nb,plan) 1162 panel.initialised = False 1163 self.nb.AddPage(panel,plan.getEtatSource()+"-"+plan.getEtatCible()) 1164 self.nb.SetSelection(self.nb.GetPageCount()-1) 1165 return 1166 else: 1167 self.DGAuteur = self.listePlanTravail.getListe()[0].getAuteur() 1168 self.DGOeuvre = self.listePlanTravail.getListe()[0].getOeuvre() 1169 self.DGLoaded = True 1170 self.treePanel.initTree(self.DGAuteur,self.DGOeuvre) 1171 # création d'un panel par plan 1172 for plan in self.listePlanTravail.getListe(): 1173 panel=MainPanel(self.nb,plan) 1174 self.nb.AddPage(panel,plan.getEtatSource()+"-"+plan.getEtatCible()) 1175 if plan.getAuteur() != '' and plan.getOeuvre() != '': 1176 self.enableMenuDGCharge() 1177 self.nb.SetSelection(self.nb.GetPageCount()-1) 1178 self.rechargerEtats() 1179 self.getCompPanel().sizeF() 1180 self.getCompPanel().Refresh() 1181 self.nb.Refresh() 1182 self.Refresh() 1183 self.SendSizeEvent() 1184 self.reloadNavMenu()
1185 1186 # fonction pour recharger les états du plan de travail enregistre
1187 - def rechargerEtats(self, infos=None):
1188 vSource = self.getPlanTravail().getVersionSource() 1189 fSource = self.getPlanTravail().getEtatSource() 1190 vCible = self.getPlanTravail().getVersionCible() 1191 fCible = self.getPlanTravail().getEtatCible() 1192 1193 fontDefault=wx.Font(10,wx.DEFAULT,wx.NORMAL,wx.NORMAL,encoding=wx.FONTENCODING_ISO8859_1) 1194 if vSource != '' and fSource !='': 1195 # source 1196 cheminS=self.dgm.getEtatPath(self.getPlanTravail().getAuteur(), 1197 self.getPlanTravail().getOeuvre(),vSource,fSource) 1198 self.getCompPanel().textWindowLeft.Clear() 1199 #self.getCompPanel().textWindowLeft.SetValue('') 1200 texte,enc = loadFile(cheminS,renvoieEnc=True) 1201 #print "recharger etat type(texte) ",type(texte),cheminS 1202 if enc == 'utf-8': 1203 #pass 1204 #print "uni" 1205 fontDefault=wx.Font(10,wx.DEFAULT,wx.NORMAL,wx.NORMAL,encoding=wx.FONTENCODING_UTF8) 1206 #self.getCompPanel().textWindowLeft.SetCodePage(wx.stc.STC_CP_UTF8) 1207 #self.getCompPanel().textWindowLeft.SetStyle(0,0,wx.TextAttr(wx.BLACK,wx.WHITE,fontDefault)) 1208 self.getCompPanel().textWindowLeft.SetDefaultStyle(wx.TextAttr(font=fontDefault)) 1209 #self.getCompPanel().textWindowLeft.LoadFile(cheminS) 1210 #self.getCompPanel().textWindowLeft.SetValue(loadFile(cheminS)) 1211 1212 self.getCompPanel().textWindowLeft.SetValue(texte) 1213 #self.getCompPanel().textWindowLeft.SetTextRaw(texte.encode('utf-8')) 1214 #self.getCompPanel().textWindowLeft.LoadFile(cheminS) 1215 #print loadFile(cheminS).encode('utf-8') 1216 1217 if vCible !='' and fCible !='': 1218 # cible 1219 cheminC=self.dgm.getEtatPath(self.getPlanTravail().getAuteur(), 1220 self.getPlanTravail().getOeuvre(),vCible,fCible) 1221 self.getCompPanel().textWindowRight.Clear() 1222 if enc == 'utf-8': 1223 #pass 1224 fontDefault=wx.Font(10,wx.DEFAULT,wx.NORMAL,wx.NORMAL,encoding=wx.FONTENCODING_UTF8) 1225 #self.getCompPanel().textWindowRight.SetStyle(0,0,wx.TextAttr(wx.BLACK,wx.WHITE,fontDefault)) 1226 #self.getCompPanel().textWindowRight.SetDefaultStyle(wx.TextAttr(wx.BLACK,wx.WHITE,fontDefault)) 1227 self.getCompPanel().textWindowRight.SetDefaultStyle(wx.TextAttr(font=fontDefault)) 1228 #self.getCompPanel().textWindowRight.LoadFile(cheminC) 1229 self.getCompPanel().textWindowRight.SetValue(loadFile(cheminC)) 1230 #self.getCompPanel().textWindowRight.SetText(loadFile(cheminC)) 1231 1232 if vSource != '' and fSource !='' and vCible !='' and fCible !='': 1233 self.enableMenuEtatsOuverts() 1234 # dlg=wx.MessageDialog(self,"Nous cherchons les informations pour ce couple d'états","Attention",wx.OK) 1235 # dlg.ShowModal() 1236 # dlg.Destroy() 1237 self.__chargement(infos) 1238 else: 1239 self.getCompPanel().initialised = False
1240 1241 ## fonction privee pour charger toutes les informations d'un couple d'états
1242 - def __chargement(self, infos):
1243 # objet Informations déjà fourni, inutile de le rechercher 1244 if infos != None: 1245 self.__chargementUnique(infos) 1246 return 1247 if not self.getPlanTravail().getParam().isNull(): 1248 info2=self.cinfos.rechercherInformations(self.getPlanTravail()) 1249 if info2 != None: 1250 self.getCompPanel().initialised = True 1251 self.__chargementUnique(info2) 1252 return 1253 # 1ere etape : rechercher toutes les infos existantes pour le couple d'états charge 1254 liste=self.cinfos.rechercherToutesInformations(self.getPlanTravail()) 1255 if len(liste) == 0: 1256 self.getCompPanel().initialised = False 1257 # self.getCompPanel().infosChargees=InformationsChargees(None, None, None) 1258 # dlg=wx.MessageDialog(self, u"Les informations n'ont pas \xe9t\xe9 trouv\xe9es !!","Attention",wx.OK) 1259 # dlg.ShowModal() 1260 # dlg.Destroy() 1261 elif len(liste) == 1 : 1262 # else: 1263 self.getCompPanel().initialised = True 1264 self.__chargementUnique(liste[0]) 1265 else : 1266 self.getCompPanel().initialised = True 1267 # 2eme etape : choix des parametres 1268 listeParam = [] 1269 for i in liste : 1270 param = i.getParametres() 1271 lpara = '(%s,%s,%s,%s,%s,%s)'%(param.getp1(),param.getp2(),param.getp3(),param.getp4(),param.getp5(),param.getp6()) 1272 listeParam.append(lpara) 1273 1274 phrase = u"Il existe plusieurs informations concernant ces états.\n Choisissez les param\xe8tres\n (lg pivot, ratio, seuil, car/mot, casse, séparateur)" 1275 dlg = wx.SingleChoiceDialog(self,phrase,u"Choix des informations \xe0 charger",listeParam, 1276 wx.OK|wx.CANCEL) 1277 if dlg.ShowModal() == wx.ID_OK: 1278 choix = dlg.GetStringSelection() 1279 n = 0 1280 for p in listeParam : 1281 if choix == p : 1282 self.__chargementUnique(liste[n]) 1283 return 1284 else : 1285 n+=1
1286 1287 # Methode privee pour le chargement definitif des infos
1288 - def __chargementUnique(self, pInfos):
1289 logging.debug('begin chargement unique') 1290 try : 1291 #max = 20 1292 #self.progressChargement = wx.ProgressDialog('Attendre','Recherche des informations',max,self, 1293 # style = wx.PD_AUTO_HIDE | wx.PD_APP_MODAL ) # | wxPD_ESTIMATED_TIME 1294 #count = 0 1295 #while count < 8: 1296 # count = count + 2 1297 #wxSleep(1) 1298 # self.progressChargement.Update(count) 1299 self.getCompPanel().infosChargees = pInfos 1300 #self.progressChargement.Update(10,"Affichage des transformations") 1301 #while count < max-4: 1302 # count = count + 2 1303 #wxSleep(1) 1304 # self.progressChargement.Update(count) 1305 1306 self.getCompPanel().resultatTransfo = self.getCompPanel().infosChargees.getTransformations() 1307 self.getCompPanel().commentaire.SetValue(self.getCompPanel().infosChargees.getCommentaire().getCommentaire()) 1308 self.getPlanTravail().setParam(self.getCompPanel().infosChargees.getParametres()) 1309 self.getCompPanel().param.chargerParametres(self.getPlanTravail().getParam()) 1310 logging.debug('begin affichageComparaison') 1311 self.affichageComparaison() 1312 logging.debug('fin affichageComparaison') 1313 #bbl = MediteAppli.synthetic.BiBlocListWD(self.getCompPanel().resultatTransfo,self.getPlanTravail()) 1314 #bbl.print_html() 1315 self.smEnregistrer.Enable(ID_ADD_TRANSFOS, False) 1316 self.smEnregistrer.Enable(ID_ADD_TRANSFOS_COMMENT, False) 1317 1318 #while count < max : 1319 # count = count + 2 1320 #wxSleep(1) 1321 # self.progressChargement.Update(count) 1322 #self.progressChargement.Update(20) 1323 1324 except InformationsNonTrouvees, eINT: 1325 pass 1326 #self.progressChargement.Update(20) 1327 #dlg=wx.MessageDialog(self, u"Les informations n'ont pas \xe9t\xe9 trouv\xe9es !!","Attention",wx.OK) 1328 #dlg.ShowModal() 1329 # dlg.Destroy() 1330 logging.debug('fin chargement unique')
1331 1332 # Methode privee permettant le choix des parametres associes a un cple d'états 1333 # pour l'enregistrement d'un commentaire
1334 - def __choixParametres(self):
1335 # 1ere etape : rechercher toutes les infos existantes pour le couple d'états charge 1336 liste=self.cinfos.rechercherToutesInformations(self.getPlanTravail()) 1337 if len(liste) == 0: 1338 fake=1 1339 # dlg=wx.MessageDialog(self, u"Les informations n'ont pas \xe9t\xe9 trouv\xe9es !!","Attention",wx.OK) 1340 # dlg.ShowModal() 1341 # dlg.Destroy() 1342 else: 1343 # 2eme etape : choix des parametres 1344 listeParam = [] 1345 for i in liste : 1346 param = i.getParametres() 1347 lpara = '(%s,%s,%s,%s,%s,%s)'%(param.getp1(),param.getp2(),param.getp3(),param.getp4(),param.getp5(),param.getp6()) 1348 listeParam.append(lpara) 1349 1350 phrase = u"Il existe plusieurs informations concernant ces états.\n Choisissez les param\xe8tres\n (lg pivot, ratio, seuil, car/mot, casse, séparateur)" 1351 dlg = wx.SingleChoiceDialog(self,phrase,u"Choix des informations \xe0 charger",listeParam, 1352 wx.OK|wx.CANCEL) 1353 if dlg.ShowModal() == wx.ID_OK: 1354 choix = dlg.GetStringSelection() 1355 n = 0 1356 for p in listeParam : 1357 if choix == p : 1358 try: 1359 planTravail=PlanTravail(self.getPlanTravail().getAuteur(),self.getPlanTravail().getOeuvre(), 1360 self.getPlanTravail().getVersionSource(),self.getPlanTravail().getEtatSource(), 1361 self.getPlanTravail().getVersionCible(),self.getPlanTravail().getEtatCible(), 1362 liste[n].getParametres()) 1363 self.cinfos.enregistrerCommentaire(planTravail,self.getCompPanel().commentaire.GetValue()) 1364 except CommentaireDejaExistant, eCDE: 1365 formulaire=FormEnregistrerCommentaire(self,eCDE.getCommentaire().getCommentaire(), 1366 liste[n].getParametres()) 1367 formulaire.Show(True) 1368 else : 1369 n+=1
1370 1371 # Methode pour reafficher les états sans les transformations
1372 - def noirSurBlanc(self):
1373 fontDefault=wx.Font(10,wx.DEFAULT,wx.NORMAL,wx.NORMAL,encoding=wx.FONTENCODING_ISO8859_1) 1374 texte = self.getCompPanel().textWindowLeft.GetValue() 1375 self.getCompPanel().textWindowLeft.Clear()#SetValue('') 1376 self.getCompPanel().textWindowLeft.SetStyle(0,0,wx.TextAttr(wx.BLACK,wx.WHITE,fontDefault)) 1377 self.getCompPanel().textWindowLeft.SetValue(texte) 1378 1379 texte = self.getCompPanel().textWindowRight.GetValue() 1380 self.getCompPanel().textWindowRight.Clear()#SetValue('') 1381 self.getCompPanel().textWindowRight.SetStyle(0,0,wx.TextAttr(wx.BLACK,wx.WHITE,fontDefault)) 1382 self.getCompPanel().textWindowRight.SetValue(texte)
1383 - def noirSurBlanc__(self):
1384 self.getCompPanel().textWindowLeft.StyleClearAll() 1385 self.getCompPanel().textWindowRight.StyleClearAll()
1386
1387 - def chargerInfosDG(self,evt):
1388 # 1ere etape : rechercher toutes les infos existantes pour le couple de états charge 1389 liste=self.cinfos.rechercherToutesInformationsDG(self.getPlanTravail().getAuteur(), 1390 self.getPlanTravail().getOeuvre()) 1391 if len(liste) == 0: 1392 dlg=wx.MessageDialog(self, u"Les informations n'ont pas \xe9t\xe9 trouv\xe9es !!","Attention",wx.OK) 1393 dlg.ShowModal() 1394 dlg.Destroy() 1395 else: 1396 # 2eme etape : visualiser les differentes informations 1397 listeInfos = [] 1398 for i in liste : 1399 text = "(%s, %s) (%s, %s) (%s, %s, %s, %s)" %(i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7]) 1400 listeInfos.append(text) 1401 1402 phrase = u"Les informations concernant le dossier g\xe9n\xe9tique charg\xe9 sont les suivantes." 1403 phrase += "\n (VS,FS) (VC,FC) (lg pivot, ratio, seuil, car/mot)" 1404 dlg = wx.SingleChoiceDialog(self,phrase,"Informations",listeInfos,wx.OK|wx.CANCEL) 1405 dlg.ShowModal()
1406
1407 - def chargerInfosCple(self,evt):
1408 # 1ere etape : rechercher toutes les infos existantes pour le couple de états charge 1409 liste=self.cinfos.rechercherToutesInformations(self.getPlanTravail()) 1410 if len(liste) == 0: 1411 dlg=wx.MessageDialog(self, u"Les informations n'ont pas \xe9t\xe9 trouv\xe9es !!","Attention",wx.OK) 1412 dlg.ShowModal() 1413 dlg.Destroy() 1414 else: 1415 # 2eme etape : visualiser les differentes informations 1416 listeParam = [] 1417 for i in liste : 1418 param = i.getParametres() 1419 lpara = '(%s,%s,%s)'%(param.getp1(),param.getp2(),param.getp3()) 1420 listeParam.append(lpara) 1421 1422 phrase = u"Les informations concernant les états charg\xe9s sont les suivantes." 1423 dlg = wx.SingleChoiceDialog(self,phrase,"Informations",listeParam,wx.OK|wx.CANCEL) 1424 ## if 1425 dlg.ShowModal()
1426 ## == wx.ID_OK: 1427 ## return 1428