1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import sys,wx
23
24
25
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
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
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
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
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
98
99
100
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
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
143 self.mComparaison = wx.Menu()
144 self.mComparaison.Append(ID_NEWCOMP,"Nouvelle Comparaison","Ouvre un nouvel onglet de comparaison")
145
146
147
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
153 self.mNavigation = wx.Menu()
154
155
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
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
174 self.SetMenuBar(self.menu_bar)
175
176
177 self.tb = MainToolBar(self)
178 self.SetToolBar(self.tb)
179
180
181
182
183 self.cmed = CMedite()
184 self.cinfos = CInformations()
185 self.ctravail = CTravail()
186 self.dgm = Controleurs.DGManager.DGManager()
187
188
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
206
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
224
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
232
233
234 self.miseEnPlaceParametres()
235
236
237 self.nb = wx.Notebook(self)
238
239 self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnNBPageChanged, self.nb)
240
241 self.createTreePanel()
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
258 if self.mNavigation.GetMenuItemCount():
259 lItems = self.mNavigation.GetMenuItems()
260 for item in lItems:
261 self.mNavigation.Delete(item.GetId())
262
263
264
265
266
267
268
269
270
271 i = 0
272 while i<self.nb.GetPageCount():
273 self.mNavigation.Append(ID_NAVMENU+i, str(self.nb.GetPage(i).getTitre()),'')
274
275 wx.EVT_MENU(self, ID_NAVMENU+i, self.selectPage)
276 i+=1
277
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
289
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
307 wx.Frame.OnSize(self,event)
308 wx.LayoutAlgorithm().LayoutFrame(self)
309
310
312 """ Autorise les menus interdits lorque l'on quitte le treePanel """
313
314 self.mComparaison.Enable(ID_DELCOMP,True)
315 self.mComparaison.Enable(ID_DELALLCOMP,True)
316
317
318 self.menu_bar.EnableTop(2, True)
319 self.menu_bar.EnableTop(3, True)
320
322 """ Interdit certains menus lorsque l'on est sur le treepanel """
323
324 self.mComparaison.Enable(ID_DELCOMP,False)
325 self.mComparaison.Enable(ID_DELALLCOMP,False)
326
327
328 self.menu_bar.EnableTop(2, False)
329 self.menu_bar.EnableTop(3, False)
330
354
355
376
377
379 while self.nb.GetPageCount() != 1:
380 self.nb.SetSelection(self.nb.GetPageCount()-1)
381 self.supprimeComparaison(None)
382 self.nouvelleComparaison(None)
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
400 self.treePanel = TreePanel(self.nb, self)
401 self.nb.InsertPage(0,self.treePanel,"Arbre")
402
405
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
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
444
445
446
466
467
468
469
470
471
472
473
474
475
476
477
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
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
497
498
501
502
505
506
510
511
512
521
530
531
532
533
554
555
559
560
564
565
569
570
574
575
579
583
584
585
586
594
595
596
599
600
601
602
603
604
605
606
626
627
628
632
649
650
651
655
656
657
681
693
694
695
702
703
705
706 formulaire=FormOuvrirFichier(self,u"Ouvrir un état Source","Source")
707 formulaire.Show(1)
708
709
711
712 formulaire=FormOuvrirFichier(self,u"Ouvrir un état Cible","Cible")
713 formulaire.Show(1)
714
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
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
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
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
746
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 )
754
755 count = 0
756 while count < (max-4)/2:
757 count = count + 2
758
759 self.prog.Update(count)
760
761
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
770 self.prog.Update(count)
771 self.affichageComparaison()
772
773 sys.stderr.flush()
774 self.prog.Update(max)
775
776 except Exception, e:
777
778 self.prog.Update(max)
779
780
781
782 sys.stderr.write( str(e))
783 traceback.print_exc()
784 sys.stderr.flush()
785
787 if isinstance(chaine,unicode):
788 uni = [c for c in chaine]
789 uni.reverse()
790 return ''.join(uni)
791 else:
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
842
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
854
855
856 texte = self.getCompPanel().resultatTransfo.getTextesConcatenes()
857
858 chaine,y,enc = decode_string_heuristically(texte)
859
860 if enc == 'utf-8':
861
862 backup = self.getCompPanel().resultatTransfo
863
864 mapper = Utile.decodage.mapperUnicodeUtf(chaine, 'utf-8')
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
875
876 lgSource = self.getCompPanel().resultatTransfo.getLgSource()
877 self.getCompPanel().textWindowRight.Freeze()
878 self.getCompPanel().textWindowLeft.Freeze()
879
880
881
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
890
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
899 fontDepl = self.getCompPanel().textWindowLeft.GetFont()
900 fontDepl.SetStyle(italic)
901 fontDepl.SetWeight(weight)
902 fontDepl.SetUnderlined(underline)
903
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
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
915 for X in self.getCompPanel().resultatTransfo.getListeRemplacements():
916 if X[0]<lgSource:
917 i1 = X[0] ; i2 = X[1]
918 self.getCompPanel().textWindowLeft.SetStyle(i1,i2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulRemp()))
919 else:
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
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
941
942 lgSource = self.getCompPanel().resultatTransfo.getLgSource()
943 self.getCompPanel().textWindowRight.Freeze()
944 self.getCompPanel().textWindowLeft.Freeze()
945
946
947
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
965 fontDepl = self.getCompPanel().textWindowLeft.GetFont()
966 fontDepl.SetStyle(italic)
967 fontDepl.SetWeight(weight)
968 fontDepl.SetUnderlined(underline)
969
970
971 for d1,d2 in lSource:
972 self.getCompPanel().textWindowLeft.SetStyle(d1,d2,wx.TextAttr(font=fontDepl))
973
974
975 for d1,d2 in lCible:
976 self.getCompPanel().textWindowRight.SetStyle(d1,d2,wx.TextAttr(font=fontDepl))
977
978
979
980 t=self.getCompPanel().resultatTransfo.getTextesConcatenes()
981
982
983 for X in self.getCompPanel().resultatTransfo.getListeInsertions():
984
985
986 i1 = X[0]-lgSource
987 if i1<0:i1=0
988 i2 = X[1]-lgSource
989
990 self.getCompPanel().textWindowRight.SetStyle(i1,i2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulInsert()))
991
992 for d1,d2 in lCible:
993 if ((i1<=d1<=i2) or (i1<=d2<=i2) or ((d1<=i1)and(d2>=i2))):
994
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
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
1008
1009 for X in self.getCompPanel().resultatTransfo.getListeSuppressions():
1010
1011 i1 = X[0]
1012 i2 = X[1]
1013 self.getCompPanel().textWindowLeft.SetStyle(i1,i2,wx.TextAttr(self.couleursTransfo.getEcriture(),self.couleursTransfo.getCoulSupp()))
1014
1015 for d1,d2 in lSource:
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
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
1030 for X in self.getCompPanel().resultatTransfo.getListeRemplacements():
1031 if X[0]<lgSource:
1032
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:
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:
1049
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:
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
1070
1071 logging.debug('begin affichageTransformations')
1072 trans = self.affichageTransformations()
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
1081 self.getCompPanel().transformations.SetDefaultStyle(wx.TextAttr(font=fontDefault))
1082
1083
1084
1085
1086
1087
1088
1089
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
1097 self.smEnregistrer.Enable(ID_ADD_TRANSFOS, True)
1098 self.smEnregistrer.Enable(ID_ADD_TRANSFOS_COMMENT, True)
1099
1118
1137
1139
1140 try :
1141 self.listePlanTravail = self.ctravail.chargerListePlans()
1142
1143
1144 except FichierNonTrouve, eFNT :
1145
1146 self.listePlanTravail = ListePlanTravail()
1147 plan = PlanTravail("","","","","","",Parametres())
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
1155 if self.listePlanTravail.estVide() or self.listePlanTravail.getListe()[0].getAuteur()=='':
1156 self.DGLoaded = False
1157
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
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
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
1196 cheminS=self.dgm.getEtatPath(self.getPlanTravail().getAuteur(),
1197 self.getPlanTravail().getOeuvre(),vSource,fSource)
1198 self.getCompPanel().textWindowLeft.Clear()
1199
1200 texte,enc = loadFile(cheminS,renvoieEnc=True)
1201
1202 if enc == 'utf-8':
1203
1204
1205 fontDefault=wx.Font(10,wx.DEFAULT,wx.NORMAL,wx.NORMAL,encoding=wx.FONTENCODING_UTF8)
1206
1207
1208 self.getCompPanel().textWindowLeft.SetDefaultStyle(wx.TextAttr(font=fontDefault))
1209
1210
1211
1212 self.getCompPanel().textWindowLeft.SetValue(texte)
1213
1214
1215
1216
1217 if vCible !='' and fCible !='':
1218
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
1224 fontDefault=wx.Font(10,wx.DEFAULT,wx.NORMAL,wx.NORMAL,encoding=wx.FONTENCODING_UTF8)
1225
1226
1227 self.getCompPanel().textWindowRight.SetDefaultStyle(wx.TextAttr(font=fontDefault))
1228
1229 self.getCompPanel().textWindowRight.SetValue(loadFile(cheminC))
1230
1231
1232 if vSource != '' and fSource !='' and vCible !='' and fCible !='':
1233 self.enableMenuEtatsOuverts()
1234
1235
1236
1237 self.__chargement(infos)
1238 else:
1239 self.getCompPanel().initialised = False
1240
1241
1243
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
1254 liste=self.cinfos.rechercherToutesInformations(self.getPlanTravail())
1255 if len(liste) == 0:
1256 self.getCompPanel().initialised = False
1257
1258
1259
1260
1261 elif len(liste) == 1 :
1262
1263 self.getCompPanel().initialised = True
1264 self.__chargementUnique(liste[0])
1265 else :
1266 self.getCompPanel().initialised = True
1267
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
1331
1332
1333
1335
1336 liste=self.cinfos.rechercherToutesInformations(self.getPlanTravail())
1337 if len(liste) == 0:
1338 fake=1
1339
1340
1341
1342 else:
1343
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
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()
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()
1381 self.getCompPanel().textWindowRight.SetStyle(0,0,wx.TextAttr(wx.BLACK,wx.WHITE,fontDefault))
1382 self.getCompPanel().textWindowRight.SetValue(texte)
1386
1388
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
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
1408
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
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
1425 dlg.ShowModal()
1426
1427
1428