...
[iramuteq] / ProfList.py
1 # -*- coding: utf-8 -*-
2
3 #----------------------------------------------------------------------------
4 # Name:         ListCtrl.py
5 # Author:       Pierre Ratinaud
6
7
8 #comes from ListCtrl.py from the demo tool of wxPython:
9 # Author:       Robin Dunn & Gary Dumer
10 #
11 # Created:
12 # Copyright:    (c) 1998 by Total Control Software
13 # Licence:      wxWindows license
14 #----------------------------------------------------------------------------
15
16 import os
17 import sys
18 import  wx
19 import  wx.lib.mixins.listctrl  as  listmix
20 from tabsimi import DoSimi
21 from listlex import ListForSpec
22 from chemins import ConstructPathOut, ffr
23 from dialog import PrefExport, PrefUCECarac, SearchDial, message
24 from tableau import Tableau
25 from search_tools import SearchFrame
26 import webbrowser
27 import cStringIO
28 import tempfile
29 import codecs
30 from functions import exec_rcode, MessageImage, progressbar, treat_var_mod
31 from PrintRScript import barplot
32 from textclassechd import ClasseCHD
33 from shutil import copyfile
34
35 #---------------------------------------------------------------------------
36 class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ColumnSorterMixin):
37     def __init__(self, parent, gparent, profclasse, Alceste=False, cl=0):
38         wx.ListCtrl.__init__( self, parent, -1, style=wx.LC_REPORT|wx.LC_VIRTUAL|wx.LC_HRULES|wx.LC_VRULES)
39
40         self.parent = parent
41         self.Alceste = Alceste
42         self.Source = gparent
43         self.cl = cl
44         self.var_mod = {}
45
46         line1 = profclasse.pop(0)
47         classen = [line for line in profclasse if line[0] != '*' and line[0] != '*****']
48         try :
49             self.lenact = profclasse.index([u'*****', u'*', u'*', u'*', u'*', u'*', '', ''])
50             profclasse.pop(self.lenact)
51         except ValueError:
52             self.lenact = len(profclasse)
53         try :
54             self.lensup = profclasse.index([u'*', u'*', u'*', u'*', u'*', u'*', '', ''])
55             self.lensup = self.lensup - self.lenact
56             profclasse.pop(self.lensup)
57         except ValueError: 
58             self.lensup = 0
59         self.lenet = len(profclasse) - (self.lenact + self.lensup)
60 #        print self.lenact, self.lensup, self.lenet
61         for i,  line in enumerate(classen) :
62             line[0] = i
63         dictdata = dict(zip([i for i in range(0,len(classen))], classen))
64
65         if self.lenact != 0 :
66             self.la = [dictdata[i][6] for i in range(0, self.lenact)]
67             self.lchi = [dictdata[i][4] for i in range(0, self.lenact)]
68             self.lfreq = [dictdata[i][1] for i in range(0, self.lenact)]
69         else :
70             self.la = []
71             self.lchi = []
72             self.lfreq = []
73             
74         #adding some art
75         self.il = wx.ImageList(16, 16)
76         a={"sm_up":"GO_UP","sm_dn":"GO_DOWN","w_idx":"WARNING","e_idx":"ERROR","i_idx":"QUESTION"}
77         for k,v in a.items():
78             s="self.%s= self.il.Add(wx.ArtProvider_GetBitmap(wx.ART_%s,wx.ART_TOOLBAR,(16,16)))" % (k,v)
79             exec(s)
80         self.SetImageList(self.il, wx.IMAGE_LIST_SMALL)
81
82         #adding some attributes (colourful background for each item rows)
83         self.attr1 = wx.ListItemAttr()
84         self.attr1.SetBackgroundColour((220, 220, 220))
85         self.attrsg = wx.ListItemAttr()
86         self.attrsg.SetBackgroundColour((230, 230, 230))
87         self.attr2 = wx.ListItemAttr()
88         self.attr2.SetBackgroundColour((190, 249, 236))
89         self.attr2s = wx.ListItemAttr()
90         self.attr2s.SetBackgroundColour((211, 252, 244))        
91         self.attr3 = wx.ListItemAttr()
92         self.attr3.SetBackgroundColour((245, 180, 180))
93         self.attr3s = wx.ListItemAttr()
94         self.attr3s.SetBackgroundColour((245, 190, 190))
95
96
97         self.InsertColumn(0, "num", wx.LIST_FORMAT_RIGHT)
98         self.InsertColumn(1, "eff. uce", wx.LIST_FORMAT_RIGHT)
99         self.InsertColumn(2, "eff. total", wx.LIST_FORMAT_RIGHT)
100         self.InsertColumn(3, "pourcentage", wx.LIST_FORMAT_RIGHT)
101         self.InsertColumn(4, "chi2", wx.LIST_FORMAT_RIGHT)
102         self.InsertColumn(5, "Type", wx.LIST_FORMAT_RIGHT)
103         self.InsertColumn(6, "forme", wx.LIST_FORMAT_RIGHT)
104         self.InsertColumn(7, "p", wx.LIST_FORMAT_RIGHT)
105         
106
107         self.SetColumnWidth(0, 60)
108         self.SetColumnWidth(1, 70)
109         self.SetColumnWidth(2, 80)
110         self.SetColumnWidth(3, 100)
111         self.SetColumnWidth(4, 70)
112         self.SetColumnWidth(5, 60)
113         self.SetColumnWidth(6, 140)
114         self.SetColumnWidth(7, wx.LIST_AUTOSIZE)
115
116         #These two should probably be passed to init more cleanly
117         #setting the numbers of items = number of elements in the dictionary
118         self.itemDataMap = dictdata
119         self.itemIndexMap = dictdata.keys()
120         self.SetItemCount(len(dictdata))
121         
122         #mixins
123         listmix.ListCtrlAutoWidthMixin.__init__(self)
124         listmix.ColumnSorterMixin.__init__(self, len(classen[0]))
125
126         #sort by genre (column 2), A->Z ascending order (1)
127         self.SortListItems(0, 1)
128
129         #events
130         #self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected)
131         #self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated)
132         #self.Bind(wx.EVT_LIST_ITEM_DESELECTED, self.OnItemDeselected)
133         self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick)
134
135         # for wxMSW
136         self.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightClick)
137
138         # for wxGTK
139         self.Bind(wx.EVT_RIGHT_UP, self.OnRightClick)
140
141         #for searching
142         search_id = wx.NewId()
143         searchall_id = wx.NewId()
144         self.parent.Bind(wx.EVT_MENU, self.onsearch, id = search_id)
145         self.parent.Bind(wx.EVT_MENU, self.onsearchall, id = searchall_id)
146         self.accel_tbl = wx.AcceleratorTable([(wx.ACCEL_CTRL, ord('F'), search_id),
147                                               (wx.ACCEL_CTRL|wx.ACCEL_SHIFT, ord('F'), searchall_id)])
148         self.SetAcceleratorTable(self.accel_tbl)
149
150
151
152     def OnColClick(self,event):
153         event.Skip()
154
155     def OnItemSelected(self, event):
156         self.currentItem = event.m_itemIndex
157
158     def OnItemActivated(self, event):
159         self.currentItem = event.m_itemIndex
160
161     def getColumnText(self, index, col):
162         item = self.GetItem(index, col)
163         return item.GetText()
164
165     def OnItemDeselected(self, evt):
166         pass
167     #---------------------------------------------------
168     # These methods are callbacks for implementing the
169     # "virtualness" of the list...
170
171     def OnGetItemText(self, item, col):
172         index=self.itemIndexMap[item]
173         s = self.itemDataMap[index][col]
174         return s
175
176     def OnGetItemImage(self, item):
177         index=self.itemIndexMap[item]
178         genre=self.itemDataMap[index][2]
179
180         if genre=="Rock":
181             return self.w_idx
182         elif genre=="Jazz":
183             return self.e_idx
184         elif genre=="New Age":
185             return self.i_idx
186         else:
187             return -1
188
189     def OnGetItemAttr(self, item):
190         index=self.itemIndexMap[item]
191         if index < self.lenact :
192             if item % 2 :
193                 return self.attr1
194             else :
195                 return self.attrsg
196         elif index >= self.lenact and index < (self.lenact + self.lensup) :
197             if item % 2 :
198                 return self.attr2
199             else :
200                 return self.attr2s
201         elif index >= (self.lenact + self.lensup) :
202             if item % 2 :
203                 return self.attr3
204             else :
205                 return self.attr3s
206         else :
207             return None
208
209     #---------------------------------------------------
210     # Matt C, 2006/02/22
211     # Here's a better SortItems() method --
212     # the ColumnSorterMixin.__ColumnSorter() method already handles the ascending/descending,
213     # and it knows to sort on another column if the chosen columns have the same value.
214
215     def SortItems(self,sorter=cmp):
216         items = list(self.itemDataMap.keys())
217         items.sort(sorter)
218         self.itemIndexMap = items
219         
220         # redraw the list
221         self.Refresh()
222
223     # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
224     def GetListCtrl(self):
225         return self
226
227     # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
228     def GetSortImages(self):
229         return (self.sm_dn, self.sm_up)
230
231     def onsearch(self, evt) :
232         self.dial = SearchDial(self, self, 6, True)
233         self.dial.CenterOnParent()
234         self.dial.ShowModal()
235         self.dial.Destroy()
236
237     def onsearchall(self, evt) :
238         if 'FrameSearch' not in dir(self.Source) :
239             self.Source.FrameSearch = SearchFrame(self.parent, -1, u"Rechercher...", self.Source.corpus)
240         self.dial = SearchDial(self, self.Source.FrameSearch.liste, 1, False)
241         self.dial.CenterOnParent()
242         self.dial.ShowModal()
243         self.dial.Destroy()
244
245     def OnRightClick(self, event):
246
247         # only do this part the first time so the events are only bound once
248         if self.Alceste:
249             if not hasattr(self, "popupID1"):
250                 self.popupID1 = wx.NewId()
251                 self.popupID2 = wx.NewId()
252                 self.popupID3 = wx.NewId()
253                 self.popupID4 = wx.NewId()
254                 self.popupID5 = wx.NewId()
255                 self.popupID6 = wx.NewId()
256                 self.popupID7 = wx.NewId()
257                 self.popupID8 = wx.NewId()
258                 self.popupID9 = wx.NewId()
259                 #self.popupID10 = wx.NewId()
260                 self.popupIDgraph = wx.NewId()
261                 self.idseg = wx.NewId()
262                 self.iducecarac = wx.NewId()
263                 self.idtablex = wx.NewId()
264                 self.idchimod = wx.NewId()
265                 self.idwordgraph = wx.NewId()
266                 self.popup_proxe = wx.NewId()
267                 self.idlexdendro = wx.NewId()
268                 self.idexport = wx.NewId()
269             #    self.export_classes = wx.NewId()
270    
271                 self.Bind(wx.EVT_MENU, self.OnPopupOne, id=self.popupID1)
272                 self.Bind(wx.EVT_MENU, self.OnPopupTwo, id=self.popupID2)
273                 self.Bind(wx.EVT_MENU, self.OnPopupThree, id=self.popupID3)
274                 self.Bind(wx.EVT_MENU, self.OnPopupFour, id=self.popupID4)
275                 self.Bind(wx.EVT_MENU, self.OnPopupFive, id=self.popupID5)
276                 self.Bind(wx.EVT_MENU, self.OnPopupSix, id=self.popupID6)
277                 self.Bind(wx.EVT_MENU, self.OnPopupSeven, id=self.popupID7)
278                 self.Bind(wx.EVT_MENU, self.OnPopupHeight, id=self.popupID8)
279                 self.Bind(wx.EVT_MENU, self.OnPopupNine, id=self.popupID9)
280                 #self.Bind(wx.EVT_MENU, self.OnPopupSpec, id=self.popupID10)
281                 self.Bind(wx.EVT_MENU, self.on_graph, id=self.popupIDgraph)
282                 self.Bind(wx.EVT_MENU, self.on_segments, id=self.idseg)
283                 self.Bind(wx.EVT_MENU, self.on_uce_carac, id = self.iducecarac)
284                 self.Bind(wx.EVT_MENU, self.on_tablex, id = self.idtablex)
285                 self.Bind(wx.EVT_MENU, self.quest_var_mod, id = self.idchimod)
286                 self.Bind(wx.EVT_MENU, self.onwordgraph, id = self.idwordgraph)
287                 self.Bind(wx.EVT_MENU, self.onproxe, id = self.popup_proxe)
288                 self.Bind(wx.EVT_MENU, self.onlexdendro, id = self.idlexdendro)
289                 self.Bind(wx.EVT_MENU, self.onexport, id = self.idexport)
290              #  self.Bind(wx.EVT_MENU, self.on_export_classes, id = self.export_classes)
291    #            self.Bind(wx.EVT_MENU, self.OnPopupThree, id=self.popupID3)
292     
293             # make a menu
294             menu = wx.Menu()
295             menu.Append(self.popupID1, u"Formes associées")
296             menu.Append(self.idtablex, u"Chi2 par classe")
297             menu.Append(self.idlexdendro, u"Chi2 par classe + dendro")
298             menu.Append(self.idchimod, u"Chi2 modalités de la variable")
299             menu.Append(self.idwordgraph, u"Graphe du mot")
300             #menu.Append(self.export_classes, u"Exporter le corpus...") 
301             
302             #menu.Append(self.popupID10, u"Spécificités")
303
304             menu_conc = wx.Menu()
305             menu_conc.Append(self.popupID2, u"dans les uce de la classe")
306             menu_conc.Append(self.popupID3, u"dans les uce classées")
307             menu_conc.Append(self.popupID4, u"dans toutes les uce")
308             menu.AppendMenu(-1, u"Concordancier", menu_conc) 
309             menu_cnrtl = wx.Menu()      
310             menu_cnrtl.Append(self.popupID5, u"Définition")
311             menu_cnrtl.Append(self.popupID6, u"Etymologie")
312             menu_cnrtl.Append(self.popupID7, u"Synonymie")
313             menu_cnrtl.Append(self.popupID8, u"Antonymie")
314             menu_cnrtl.Append(self.popupID9, u"Morphologie")
315             menu_cnrtl.Append(self.popup_proxe, u"Proxémie")
316             menu.AppendMenu(-1, u"Outils du CNRTL", menu_cnrtl)
317             menu.AppendSeparator()
318             menu.Append(self.popupIDgraph, u"Graphe de la classe")
319             menu.Append(self.idseg, u"Segments répétés")
320             menu.Append(self.iducecarac, u"UCE caractéristiques")
321             menu.Append(self.idexport, 'Partitionner...')
322             #menu.Append(self.popupID2, u"Concordancier")
323     #        menu.Append(self.popupID3, "recharger")
324     
325             self.PopupMenu(menu)
326             menu.Destroy()
327         elif 'tableau' in dir(self.Source) :
328             if not hasattr(self, "pop1"):
329                 self.pop1 = wx.NewId()
330                 self.pop2 = wx.NewId()
331                 self.pop3 = wx.NewId()
332                 self.Bind(wx.EVT_MENU, self.quest_simi, id=self.pop1)
333                 self.Bind(wx.EVT_MENU, self.on_tablex, id=self.pop2)
334                 self.Bind(wx.EVT_MENU, self.quest_var_mod, id=self.pop3)
335
336             menu = wx.Menu()
337             menu.Append(self.pop2, u"Chi2 par classe")
338             menu.Append(self.pop3, u"Chi2 modalités de la variable")
339             menu.AppendSeparator()
340             menu.Append(self.pop1, u"Graph de la classe")
341             self.PopupMenu(menu)
342             menu.Destroy()
343
344     def onexport(self, evt) :
345         if 'corpus' in dir(self.Source):
346             corpus = self.Source.corpus
347         ClasseCHD(self.parent, corpus, self.cl)
348
349     def getselectedwords(self) :
350         words = [self.getColumnText(self.GetFirstSelected(), 6)]
351         last = self.GetFirstSelected()
352         while self.GetNextSelected(last) != -1:
353             last = self.GetNextSelected(last)
354             words.append(self.getColumnText(last, 6))
355         return words
356
357     def quest_var_mod(self, evt) :
358         if 'corpus' in dir(self.Source):
359             corpus = self.Source.corpus
360             if self.var_mod == {} :
361                 self.var_mod = self.Source.corpus.make_etoiles_dict()
362         else :
363             corpus = self.Source.tableau
364             if self.var_mod == {} :
365                 self.var_mod = treat_var_mod([val for val in corpus.actives] + [val for val in corpus.sups])
366         with codecs.open(self.Source.pathout['chisqtable'], 'r', corpus.parametres['syscoding']) as f :
367             chistable = [line.replace('\n','').replace('\r','').replace('"','').replace(',','.').split(';') for line in f]
368         title = chistable[0]
369         title.pop(0)
370         chistable.pop(0)
371         vchistable = [line[1:] for line in chistable]
372         fchistable = [line[0] for line in chistable]
373         word = self.getselectedwords()[0]
374         if len(word.split('_')) > 1 :
375             var = word.split('_')
376             words = ['_'.join([var[0],word]) for word in self.var_mod[var[0]]]
377             words.sort()
378             tableout = []
379             kwords = []
380             for word in words :
381                 if word in fchistable :
382                     tableout.append(vchistable[fchistable.index(word)])
383                     kwords.append(word)
384             tmpgraph = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
385             txt = barplot(tableout, kwords, title, self.Source.parent.RscriptsPath['Rgraph'], tmpgraph)
386             tmpscript = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
387             file = open(tmpscript,'w')
388             file.write(txt)
389             file.close()
390             exec_rcode(self.Source.parent.RPath, tmpscript, wait = True)
391             win = MessageImage(self,u"Graphique", size=(700, 500))
392             win.addsaveimage(tmpgraph)
393             txt = "<img src='%s'>" % tmpgraph
394             win.HtmlPage.SetPage(txt)
395             win.Show(True)
396         else :
397             dial = wx.MessageDialog(self, u"Ce n'est pas une forme du type variable_modalité", u"Problème", wx.OK | wx.ICON_WARNING)
398             dial.CenterOnParent()
399             dial.ShowModal()
400             dial.Destroy()
401
402     def quest_simi(self, evt) :
403         tableau = self.Source.tableau
404         tab = tableau.make_table_from_classe(self.cl, self.la)
405         pathout = ConstructPathOut(self.Source.pathout+'/', 'simi_classe_%i' %self.cl)
406         self.filename = os.path.join(pathout,'mat01.csv')
407         tableau.printtable(self.filename, tab)
408         del tab
409         paramsimi = {'coeff' : 0,
410                           'layout' : 2,
411                           'type' : 1,
412                           'arbremax' : 1,
413                           'coeff_tv' : 1,
414                           'coeff_tv_nb' : 0,
415                           'tvprop' : 0,
416                           'tvmin' : 5,
417                           'tvmax' : 30,
418                           'coeff_te' : 1,
419                           'coeff_temin' : 1,
420                           'coeff_temax' : 10,
421                           'label_v': 1,
422                           'label_e': 1,
423                           'vcex' : 0,
424                           'vcexmin' : 10,
425                           'vcexmax' : 25,
426                           'cex' : 10,
427                           'cexfromchi' : True,
428                           'sfromchi': False,
429                           'seuil_ok' : 0,
430                           'seuil' : 1,
431                           'cols' : (255,0,0),
432                           'cola' : (200,200,200),
433                           'width' : 1000,
434                           'height' : 1000,
435                           'first' : True,
436                           'keep_coord' : True,
437                           'alpha' : 20,
438                           'film': False,
439                           }
440 #        self.tableau.actives = {}
441 #        self.tableau.lchi = self.lchi
442 #        self.tableau.chi = {}
443 #        for i, val in enumerate(self.la) :
444 #            self.tableau.actives[val] = [self.lfreq[i]]
445 #            self.tableau.chi[val] = [self.lchi[i]]
446                           
447         act = {}
448         self.tableau.chi = {}
449         self.tableau.lchi = self.lchi
450         self.tableau.parametre['fromprof'] = True
451         for i, val in enumerate(self.la) :
452             act[val] = [self.lfreq[i]]
453             self.tableau.chi[val] = [self.lchi[i]]
454         DoSimi(self, param = paramsimi, fromprof = ffr(self.filename), pathout = pathout, listactives = self.la, actives = act)
455
456     def onwordgraph(self, evt):
457         word = self.getColumnText(self.GetFirstSelected(), 6)
458         dlg = progressbar(self, 2)
459         corpus = self.Source.corpus
460         uces = corpus.lc[self.cl-1]
461         dlg.Update(1, u'Tableau...')
462         #tab = corpus.make_table_with_classe(uces, self.la)
463         pathout = ConstructPathOut(self.Source.pathout.dirout + '/' , 'simi_%s' % word)
464         self.filename = os.path.join(pathout,'mat01.csv')
465         dlg.Update(2, u'Ecriture...')
466         #corpus.write_tab(tab, self.filename)
467         #del tab
468         corpus.make_and_write_sparse_matrix_from_classe(self.la, uces, self.filename)
469         dlg.Destroy()
470         paramsimi = {'coeff' : 0,
471                           'layout' : 2,
472                           'type' : 1,
473                           'arbremax' : 0,
474                           'coeff_tv' : 1,
475                           'coeff_tv_nb' : 0,
476                           'tvprop' : 0,
477                           'tvmin' : 5,
478                           'tvmax' : 30,
479                           'coeff_te' : 1,
480                           'coeff_temin' : 1,
481                           'coeff_temax' : 10,
482                           'label_v': 1,
483                           'label_e': 0,
484                           'vcex' : 1,
485                           'vcexmin' : 10,
486                           'vcexmax' : 25, 
487                           'cex' : 10,
488                           'seuil_ok' : 1,
489                           'seuil' : 1,
490                           'cols' : (255,0,0),
491                           'cola' : (200,200,200),
492                           'width' : 600,
493                           'height' : 600,
494                           'first' : True,
495                           'keep_coord' : True,
496                           'alpha' : 20,
497                           'film': False,
498                           }
499         self.tableau = Tableau(self.parent, '')
500         self.tableau.listactives = self.la
501         self.tableau.actives = {}
502         for i, val in enumerate(self.la) :
503             self.tableau.actives[val] = [self.lfreq[i]]
504         DoSimi(self, param = paramsimi, fromprof = ffr(self.filename), pathout = pathout, wordgraph = word)
505
506     def on_graph(self, evt):
507         dlg = progressbar(self, 2)
508         corpus = self.Source.corpus
509         uces = corpus.lc[self.cl-1]
510         dlg.Update(1, u'Tableau...')
511         #tab = corpus.make_table_with_classe(uces, self.la)
512         pathout = ConstructPathOut(self.Source.pathout.dirout+'/', 'simi_classe_%i' %self.cl)
513         self.filename = os.path.join(pathout,'mat01.csv')
514         dlg.Update(2, u'Ecriture...')
515         #corpus.write_tab(tab, self.filename)
516         #del tab
517         corpus.make_and_write_sparse_matrix_from_classe(self.la, uces, self.filename)
518         dlg.Destroy()
519         paramsimi = {'coeff' : 0,
520                           'layout' : 2,
521                           'type' : 1,
522                           'arbremax' : 1,
523                           'coeff_tv' : 1,
524                           'coeff_tv_nb' : 0,
525                           'tvprop' : 0,
526                           'tvmin' : 5,
527                           'tvmax' : 30,
528                           'coeff_te' : 1,
529                           'coeff_temin' : 1,
530                           'coeff_temax' : 10,
531                           'label_v': 1,
532                           'label_e': 0,
533                           'vcex' : 0,
534                           'vcexmin' : 10,
535                           'vcexmax' : 25,
536                           'cex' : 10,
537                           'cexfromchi' : True,
538                           'sfromchi': False,
539                           'seuil_ok' : 0,
540                           'seuil' : 1,
541                           'cols' : (255,0,0),
542                           'cola' : (200,200,200),
543                           'width' : 1000,
544                           'height' : 1000,
545                           'first' : True,
546                           'keep_coord' : True,
547                           'alpha' : 20,
548                           'film': False,
549                           }
550         self.tableau = Tableau(self.parent, '')
551         self.tableau.listactives = self.la
552         self.tableau.actives = {}
553         self.tableau.lchi = self.lchi
554         self.tableau.chi = {}
555         self.tableau.parametre['fromprof'] = True
556         for i, val in enumerate(self.la) :
557             self.tableau.actives[val] = [self.lfreq[i]]
558             self.tableau.chi[val] = [self.lchi[i]]
559         DoSimi(self, param = paramsimi, fromprof = ffr(self.filename), pathout = pathout)
560
561     def on_segments(self,evt) :
562         dlg = progressbar(self, 2)
563         corpus = self.Source.corpus
564         uces = corpus.lc[self.cl-1]
565         l = []
566         dlg.Update(1, u'Segments...')
567         for i in range(2,10) :
568             li = corpus.find_segments_in_classe(uces, i, 1000)
569             if li == [] :
570                 break
571             else :
572                 l += li
573         l.sort(reverse = True)
574         d = {}
575         dlg.Update(2, 'Tri...')
576         for i, line in enumerate(l) :
577             d[i] = [line[1],line[0], line[2]]
578         first = ['','','']
579         para={'dico': d,'fline':first}
580         dlg.Destroy()
581         win = wliste(self, -1, u"Segments répétés - Classe %i" % self.cl, d, first, size=(600, 500))
582         win.Show(True)
583
584     def on_uce_carac(self,evt) :
585         dial = PrefUCECarac(self, self.parent)
586         dial.CenterOnParent()
587         if dial.ShowModal() == wx.ID_OK :
588             limite = dial.spin_eff.GetValue()
589             atype = dial.radio_type.GetSelection()
590             dlg = progressbar(self,maxi = 4)
591             corpus = self.Source.corpus
592             uces = corpus.lc[self.cl-1]
593             tab = corpus.make_table_with_classe(uces, self.la)
594             tab.pop(0)
595             dlg.Update(2, u'score...')
596             if atype == 0 :
597                 ntab = [round(sum([self.lchi[i] for i, word in enumerate(line) if word == 1]),2) for line in tab]
598             else :
599                 ntab = [round(sum([self.lchi[i] for i, word in enumerate(line) if word == 1])/float(sum(line)),2) if sum(line)!=0 else 0 for line in tab]
600             ntab2 = [[ntab[i], uces[i]] for i, val in enumerate(ntab)]
601             del ntab
602             ntab2.sort(reverse = True)
603             ntab2 = ntab2[:limite]
604             nuces = [val[1] for val in ntab2]
605             dlg.Update(3, u'concordancier...')
606             #ucestxt = [corpus.ucis_paras_uces[val[1][0]][val[1][1]][val[1][2]] for val in ntab2]
607             ucestxt1 = [row for row in corpus.getconcorde(nuces)]
608             ucestxt = []
609             ucis_txt = []
610             for uce in ucestxt1 :
611                 ucetxt = ' '+uce[1]+' '
612                 ucis_txt.append(' '.join(corpus.ucis[corpus.getucefromid(uce[0]).uci].etoiles) + '<br>')
613                 for lem in self.la :
614                     listmot = corpus.getlems()[lem].formes
615                     for id in listmot :
616                         forme = corpus.getforme(id).forme
617                         ucetxt = ucetxt.replace(' '+forme+' ', '<font color=red> ' + forme + ' </font>')
618                 ucestxt.append(ucetxt)        
619             #ucestxt = [corpus.make_concord(self.la, ' '.join(uce), 'red') for uce in ucestxt]
620             dlg.Update(4, u'texte...')
621             #ucis_txt = [' '.join(corpus.ucis[val[1][0]][0]) for val in ntab2]
622             win = message(self, u"UCE caractéristiques - Classe %i" % self.cl, (750, 600))
623             win.html = '<html>\n' + '<br><br>'.join(['<br>'.join([ucis_txt[i], 'score : ' + str(ntab2[i][0]), ucestxt[i]]) for i in range(0,len(ucestxt))]) + '\n</html>'
624             win.HtmlPage.SetPage(win.html)
625             dlg.Destroy()
626             win.Show(True)
627     
628     def on_tablex(self, evt):
629         if 'corpus' in dir(self.Source):
630             corpus = self.Source.corpus
631         else :
632             corpus = self.Source.tableau
633         with codecs.open(self.Source.pathout['chisqtable'], 'r', corpus.parametres['syscoding']) as f :
634             chistable = [line.replace('\n','').replace('\r','').replace('"','').replace(',','.').split(';') for line in f]
635         title = chistable[0]
636         title.pop(0)
637         chistable.pop(0)
638         vchistable = [line[1:] for line in chistable]
639         fchistable = [line[0] for line in chistable]
640         words = self.getselectedwords()
641         tableout = [vchistable[fchistable.index(word)] for word in words]
642         tmpgraph = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
643         nbcl = len(title)
644         nbwords = len(words)
645         txt = barplot(tableout, words, title, self.Source.parent.RscriptsPath['Rgraph'], tmpgraph)
646         tmpscript = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
647         file = open(tmpscript,'w')
648         file.write(txt)
649         file.close()
650         exec_rcode(self.Source.parent.RPath, tmpscript, wait = True)
651         w = 100 + (20 * nbwords) + (100 * nbcl)
652         h = 100 + (nbwords * 15)
653         if w > 1100 : w = 1100
654         if h > 800 : h = 800
655         if h < 450 : h = 450
656         win = MessageImage(self, u"Graphique", size=(w, h))
657         win.addsaveimage(tmpgraph)
658         txt = "<img src='%s'>" % tmpgraph
659         win.HtmlPage.SetPage(txt)
660         win.Show(True)
661
662     def onlexdendro(self, evt):
663         if 'corpus' in dir(self.Source):
664             corpus = self.Source.corpus
665         else :
666             corpus = self.Source.tableau
667         with codecs.open(self.Source.pathout['chisqtable'], 'r', corpus.parametres['syscoding']) as f :
668             chistable = [line.replace('\n','').replace('\r','').replace('"','').replace(',','.').split(';') for line in f]
669         title = chistable[0]
670         title.pop(0)
671         chistable.pop(0)
672         vchistable = [line[1:] for line in chistable]
673         fchistable = [line[0] for line in chistable]
674         words = self.getselectedwords()
675         tableout = [vchistable[fchistable.index(word)] for word in words]
676         tmpgraph = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
677         txttable = 'c(' + ','.join([','.join(line) for line in tableout]) + ')'
678         rownames = 'c("' + '","'.join(words) + '")'
679         colnames = 'c("' + '","'.join(title) + '")'
680         nbcl = len(title)
681         rownb = len(words)
682         txt = """
683         load("%s")
684         di <- matrix(data=%s, nrow=%i, byrow = TRUE)
685         rownames(di)<- %s
686         colnames(di) <- %s
687         library(ape)
688         source("%s")
689         height <- (30*ncol(di)) + (15*nrow(di))
690         height <- ifelse(height <= 400, 400, height)
691         width <- 500
692         open_file_graph("%s", width=width, height=height)
693         plot.dendro.lex(tree.cut1$tree.cl, di)
694         """ % (self.Source.pathout['Rdendro'], txttable, rownb, rownames, colnames, self.Source.parent.RscriptsPath['Rgraph'], ffr(tmpgraph))
695         tmpscript = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
696         file = open(tmpscript,'w')
697         file.write(txt)
698         file.close()
699         exec_rcode(self.Source.parent.RPath, tmpscript, wait = True)
700         win = MessageImage(self, u"Graphique", size=(700, 500))
701         win.addsaveimage(tmpgraph)
702         txt = "<img src='%s'>" % tmpgraph
703         win.HtmlPage.SetPage(txt)
704         win.Show(True)
705
706
707     def make_concord(self, uces, title, color = 'red') :
708         corpus = self.Source.corpus
709         ListWord = [self.getColumnText(self.GetFirstSelected(), 6)]
710         last = self.GetFirstSelected()
711         while self.GetNextSelected(last) != -1:
712             last = self.GetNextSelected(last)
713             ListWord.append(self.getColumnText(last, 6))
714         listmot = [forme for item in ListWord for forme in corpus.getlems()[item].formes]
715         win = message(self, title, size=(750, 600))
716         toshow = ['<html>\n<H1>Concordancier</H1>\n']
717         toshow.append('<h3><font color=%s>' % color + ' '.join(ListWord) + '</font></h3><br>')
718         duce = {}
719         ucef = []
720         for word in ListWord : 
721             ucef += list(set(corpus.getlemuces(word)).intersection(uces))
722         ucef = list(set(ucef))
723         ucef.sort()
724         res = corpus.getconcorde(ucef)
725         txt = '<br>'.join(toshow) +'<br><br>'
726         for uce in res :
727             ucetxt = ' '+uce[1]+' '
728             txt += ' '.join(corpus.ucis[corpus.getucefromid(uce[0]).uci].etoiles) + '<br>'
729             for forme in listmot:
730                 forme = corpus.getforme(forme).forme
731                 ucetxt = ucetxt.replace(' '+forme+' ', '<font color=red> ' + forme + ' </font>')
732             txt += ucetxt + '<br><br>'
733         win.HtmlPage.SetPage(txt)
734         return win
735
736     def OnPopupTwo(self, event):
737         corpus = self.Source.corpus
738         uces = corpus.lc[self.cl-1]
739         win = self.make_concord(uces, "Concordancier - Classe %i" % self.cl)
740         win.Show(True)
741     
742     def OnPopupThree(self, event):
743         corpus = self.Source.corpus
744         uces = [classe[i] for classe in corpus.lc for i in range(0,len(classe))]
745         win = self.make_concord(uces, "Concordancier - UCE classées")
746         win.Show(True)
747         
748     def OnPopupFour(self, event):
749         corpus = self.Source.corpus
750         uces = [classe[i] for classe in corpus.lc for i in range(0,len(classe))] + corpus.lc0
751         win = self.make_concord(uces, "Concordancier - Toutes les UCE")
752         win.Show(True)
753
754     def OnPopupFive(self, event):
755         word = self.getColumnText(self.GetFirstSelected(), 6)
756         lk = "http://www.cnrtl.fr/definition/" + word
757         webbrowser.open(lk)
758
759     def OnPopupSix(self, event):  
760         word = self.getColumnText(self.GetFirstSelected(), 6)
761         lk = "http://www.cnrtl.fr/etymologie/" + word
762         webbrowser.open(lk)
763         
764     def OnPopupSeven(self, event):        
765         word = self.getColumnText(self.GetFirstSelected(), 6)
766         lk = "http://www.cnrtl.fr/synonymie/" + word
767         webbrowser.open(lk)
768         
769     def OnPopupHeight(self, event):  
770         word = self.getColumnText(self.GetFirstSelected(), 6)
771         lk = "http://www.cnrtl.fr/antonymie/" + word
772         webbrowser.open(lk)
773         
774     def OnPopupNine(self, event):            
775         word = self.getColumnText(self.GetFirstSelected(), 6)
776         lk = "http://www.cnrtl.fr/morphologie/" + word
777         webbrowser.open(lk)
778
779     def onproxe(self, evt) :
780         word = self.getColumnText(self.GetFirstSelected(), 6)
781         lk = "http://www.cnrtl.fr/proxemie/" + word
782         webbrowser.open(lk)
783 #
784
785 #---------------------------------------------------------------------------
786 #class ProfListctrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin):
787 #    def __init__(self, parent, ID, pos=wx.DefaultPosition,
788 #                 size=wx.DefaultSize, style=0):
789 #        wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
790 #        listmix.ListCtrlAutoWidthMixin.__init__(self)
791 #
792 #
793 #class ProfListctrlPanel(wx.Panel, listmix.ColumnSorterMixin):
794 #    def __init__(self, parent, gparent, ProfClasse, Alceste=False, cl=0):
795 #        self.parent = parent
796 #        classe = ProfClasse
797 #        self.cl = cl
798 #        self.Source = gparent
799 #        if 'tableau' in dir(self.Source):
800 #            self.tableau = self.Source.tableau
801 #        self.Alceste = Alceste
802 #        self.var_mod = {}
803 #        
804 #
805 #        wx.Panel.__init__(self, parent, -1, style=wx.WANTS_CHARS)
806 #        
807 #        search_id = wx.NewId()
808 #        searchall_id = wx.NewId()
809 #        self.parent.Bind(wx.EVT_MENU, self.onsearch, id = search_id)
810 #        self.parent.Bind(wx.EVT_MENU, self.onsearchall, id = searchall_id)
811 #        self.accel_tbl = wx.AcceleratorTable([(wx.ACCEL_CTRL, ord('F'), search_id),
812 #                                              (wx.ACCEL_CTRL|wx.ACCEL_SHIFT, ord('F'), searchall_id)])
813 #        self.SetAcceleratorTable(self.accel_tbl)
814 #       
815 #        self.il = wx.ImageList(16, 16)
816 ##        self.idx1 = self.il.Add(images.getSmilesBitmap())
817 #        self.sm_up = self.il.Add(getSmallUpArrowBitmap())
818 #        self.sm_dn = self.il.Add(getSmallDnArrowBitmap())
819 #        tID = wx.NewId()
820 #
821 #        self.list = ProfListctrl(self, tID,
822 #                                 style=wx.LC_REPORT 
823 #                                 | wx.BORDER_NONE
824 #                                 | wx.LC_EDIT_LABELS
825 #                                 | wx.LC_SORT_ASCENDING
826 #                                 )
827 #        line1 = classe.pop(0)
828 #        limit = 0
829 #        limitsup = 0
830 #        i = 0
831 #        dictdata = {}
832 #        classen = [line for line in classe if line[0] != '*' and line[0] != '*****']
833 #        if len(classen) == 0 :
834 #            lenact = 0
835 #            lensup = 0
836 #            lenet = 0
837 #        else :
838 #            lenact = [i for i,b in enumerate(classe) if b[0] == '*****']
839 #            if lenact == [] :
840 #                lensup = 0
841 #                lenact = [i for i,b in enumerate(classe) if b[0] == '*']
842 #                if lenact == [] :
843 #                    lenact = len(classen)
844 #                    lenet = 0
845 #                else :
846 #                    lenact = 0
847 #                    lenet = len(classen)
848 #            else :
849 #                lenact = lenact[0]
850 #                lensup = [i for i,b in enumerate(classe[1:]) if b[0] == '*']
851 #                if lensup != [] :
852 #                   lensup = lensup[0] - lenact
853 #                   lenet = len(classen) - lensup
854 #                else :
855 #                   lensup == 0
856 #                   lenet = len(classen)
857 #        debsup = lenact
858 #                
859 #        self.lenact = lenact
860 #
861 #        debet = lenact + lensup
862 #        dictdata = dict(zip([i for i in range(0,len(classen))], classen))
863 #        self.list.SetImageList(self.il, wx.IMAGE_LIST_SMALL)
864 #        
865 #        self.PopulateList(dictdata, debet, debsup, Alceste)
866 #
867 #        self.Bind(wx.EVT_SIZE, self.OnSize)
868 #        self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick)
869 #        self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected, self.list)
870 #
871 #        # for wxMSW
872 #        self.list.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightClick)
873 #
874 #        # for wxGTK
875 #        self.list.Bind(wx.EVT_RIGHT_UP, self.OnRightClick)
876 #        self.itemDataMap = dictdata
877 #        listmix.ColumnSorterMixin.__init__(self, 8)
878 #        self.do_greyline()
879 ##-----------------------------------------------------------------------------------------    
880 #
881 #    def PopulateList(self, dictdata, limit, limitsup, Alceste):
882 #        
883 #        
884 #            # for normal, simple columns, you can add them like this:
885 #        self.list.InsertColumn(0, "num", wx.LIST_FORMAT_RIGHT)
886 #        self.list.InsertColumn(1, "eff. uce", wx.LIST_FORMAT_RIGHT)
887 #        self.list.InsertColumn(2, "eff. total", wx.LIST_FORMAT_RIGHT)
888 #        self.list.InsertColumn(3, "pourcentage", wx.LIST_FORMAT_RIGHT)
889 #        self.list.InsertColumn(4, "chi2", wx.LIST_FORMAT_RIGHT)
890 #        self.list.InsertColumn(5, "Type", wx.LIST_FORMAT_RIGHT)
891 #        self.list.InsertColumn(6, "forme", wx.LIST_FORMAT_RIGHT)
892 #        self.list.InsertColumn(7, "p", wx.LIST_FORMAT_RIGHT)
893 #        
894 #        for key in dictdata : #.iteritems():
895 #                index = self.list.InsertStringItem(sys.maxint, '%4i' % key)
896 #                i = 1
897 #                for val in dictdata[key][1:]:
898 #                    self.list.SetStringItem(index, i, str(dictdata[key][i]))
899 #                    i += 1
900 #                self.list.SetItemData(index, key)
901 #
902 #        self.list.SetColumnWidth(0, 60)
903 #        self.list.SetColumnWidth(1, 70)
904 #        self.list.SetColumnWidth(2, 80)
905 #        self.list.SetColumnWidth(3, 100)
906 #        self.list.SetColumnWidth(4, 70)
907 #        self.list.SetColumnWidth(5, wx.LIST_AUTOSIZE)
908 #        self.list.SetColumnWidth(6, wx.LIST_AUTOSIZE)
909 #        self.list.SetColumnWidth(7, wx.LIST_AUTOSIZE)
910 #
911 #        # show how to change the colour of a couple items
912 #        for i in range(limitsup, limit):
913 #            item = self.list.GetItem(i)
914 #            item.SetTextColour(wx.RED) 
915 #            self.list.SetItem(item)
916 #        
917 #        for i in range(limit, len(dictdata)):
918 #            item = self.list.GetItem(i)
919 #            item.SetTextColour(wx.BLUE)
920 #            self.list.SetItem(item)          
921 #        
922 #        if self.lenact != 0 :
923 #            self.la = [self.getColumnText(i,6) for i in range(0, self.lenact)]
924 #            self.lchi = [float(self.getColumnText(i,4)) for i in range(0, self.lenact)]
925 #            self.lfreq = [int(self.getColumnText(i,1)) for i in range(0, self.lenact)]
926 #        else :
927 #            self.la = []
928 #            self.lchi = []
929 #            self.lfreq = []
930 #
931 #    def do_greyline(self):
932 #        for row in xrange(self.list.GetItemCount()):
933 #            if row % 2 :
934 #                self.list.SetItemBackgroundColour(row, (230, 230, 230))
935 #            else :
936 #                self.list.SetItemBackgroundColour(row, wx.WHITE)
937 #
938 #
939 #    # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
940 #    def GetListCtrl(self):
941 #        return self.list
942 #
943 #    # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
944 #    def GetSortImages(self):
945 #        return (self.sm_dn, self.sm_up)
946 #
947 #
948 #    def OnRightDown(self, event):
949 #        x = event.GetX()
950 #        y = event.GetY()
951 #        item, flags = self.list.HitTest((x, y))
952 #
953 #        if flags & wx.LIST_HITTEST_ONITEM:
954 #            self.list.Select(item)
955 #
956 #        event.Skip()
957 #
958 #
959 #    def getColumnText(self, index, col):
960 #        item = self.list.GetItem(index, col)
961 #        return item.GetText()
962 #
963 #
964 #    def OnItemSelected(self, event):
965 #        self.currentItem = event.m_itemIndex
966 #        event.Skip()
967 #
968 #    def onsearch(self, evt) :
969 #        self.dial = SearchDial(self, self, 6, True)
970 #        self.dial.CenterOnParent()
971 #        self.dial.ShowModal()
972 #        self.dial.Destroy()
973 #
974 #    def onsearchall(self, evt) :
975 #        if 'FrameSearch' not in dir(self.Source) :
976 #            self.Source.FrameSearch = SearchFrame(self.parent, -1, u"Rechercher...", self.Source.corpus)
977 #        self.dial = SearchDial(self, self.Source.FrameSearch.liste, 1, False)
978 #        self.dial.CenterOnParent()
979 #        self.dial.ShowModal()
980 #        self.dial.Destroy()
981 #
982 #    def OnRightClick(self, event):
983 #
984 #        # only do this part the first time so the events are only bound once
985 #        if self.Alceste:
986 #            if not hasattr(self, "popupID1"):
987 #                self.popupID1 = wx.NewId()
988 #                self.popupID2 = wx.NewId()
989 #                self.popupID3 = wx.NewId()
990 #                self.popupID4 = wx.NewId()
991 #                self.popupID5 = wx.NewId()
992 #                self.popupID6 = wx.NewId()
993 #                self.popupID7 = wx.NewId()
994 #                self.popupID8 = wx.NewId()
995 #                self.popupID9 = wx.NewId()
996 #                #self.popupID10 = wx.NewId()
997 #                self.popupIDgraph = wx.NewId()
998 #                self.idseg = wx.NewId()
999 #                self.iducecarac = wx.NewId()
1000 #                self.idtablex = wx.NewId()
1001 #                self.idchimod = wx.NewId()
1002 #                self.idwordgraph = wx.NewId()
1003 #                self.popup_proxe = wx.NewId()
1004 #                self.idlexdendro = wx.NewId()
1005 #                self.idexport = wx.NewId()
1006 #            #    self.export_classes = wx.NewId()
1007 #   
1008 #                self.Bind(wx.EVT_MENU, self.OnPopupOne, id=self.popupID1)
1009 #                self.Bind(wx.EVT_MENU, self.OnPopupTwo, id=self.popupID2)
1010 #                self.Bind(wx.EVT_MENU, self.OnPopupThree, id=self.popupID3)
1011 #                self.Bind(wx.EVT_MENU, self.OnPopupFour, id=self.popupID4)
1012 #                self.Bind(wx.EVT_MENU, self.OnPopupFive, id=self.popupID5)
1013 #                self.Bind(wx.EVT_MENU, self.OnPopupSix, id=self.popupID6)
1014 #                self.Bind(wx.EVT_MENU, self.OnPopupSeven, id=self.popupID7)
1015 #                self.Bind(wx.EVT_MENU, self.OnPopupHeight, id=self.popupID8)
1016 #                self.Bind(wx.EVT_MENU, self.OnPopupNine, id=self.popupID9)
1017 #                #self.Bind(wx.EVT_MENU, self.OnPopupSpec, id=self.popupID10)
1018 #                self.Bind(wx.EVT_MENU, self.on_graph, id=self.popupIDgraph)
1019 #                self.Bind(wx.EVT_MENU, self.on_segments, id=self.idseg)
1020 #                self.Bind(wx.EVT_MENU, self.on_uce_carac, id = self.iducecarac)
1021 #                self.Bind(wx.EVT_MENU, self.on_tablex, id = self.idtablex)
1022 #                self.Bind(wx.EVT_MENU, self.quest_var_mod, id = self.idchimod)
1023 #                self.Bind(wx.EVT_MENU, self.onwordgraph, id = self.idwordgraph)
1024 #                self.Bind(wx.EVT_MENU, self.onproxe, id = self.popup_proxe)
1025 #                self.Bind(wx.EVT_MENU, self.onlexdendro, id = self.idlexdendro)
1026 #                self.Bind(wx.EVT_MENU, self.onexport, id = self.idexport)
1027 #              #  self.Bind(wx.EVT_MENU, self.on_export_classes, id = self.export_classes)
1028 #    #            self.Bind(wx.EVT_MENU, self.OnPopupThree, id=self.popupID3)
1029 #    
1030 #            # make a menu
1031 #            menu = wx.Menu()
1032 #            menu.Append(self.popupID1, u"Formes associées")
1033 #            menu.Append(self.idtablex, u"Chi2 par classe")
1034 #            menu.Append(self.idlexdendro, u"Chi2 par classe + dendro")
1035 #            menu.Append(self.idchimod, u"Chi2 modalités de la variable")
1036 #            menu.Append(self.idwordgraph, u"Graphe du mot")
1037 #            #menu.Append(self.export_classes, u"Exporter le corpus...") 
1038 #            
1039 #            #menu.Append(self.popupID10, u"Spécificités")
1040 #
1041 #            menu_conc = wx.Menu()
1042 #            menu_conc.Append(self.popupID2, u"dans les uce de la classe")
1043 #            menu_conc.Append(self.popupID3, u"dans les uce classées")
1044 #            menu_conc.Append(self.popupID4, u"dans toutes les uce")
1045 #            menu.AppendMenu(-1, u"Concordancier", menu_conc) 
1046 #            menu_cnrtl = wx.Menu()      
1047 #            menu_cnrtl.Append(self.popupID5, u"Définition")
1048 #            menu_cnrtl.Append(self.popupID6, u"Etymologie")
1049 #            menu_cnrtl.Append(self.popupID7, u"Synonymie")
1050 #            menu_cnrtl.Append(self.popupID8, u"Antonymie")
1051 #            menu_cnrtl.Append(self.popupID9, u"Morphologie")
1052 #            menu_cnrtl.Append(self.popup_proxe, u"Proxémie")
1053 #            menu.AppendMenu(-1, u"Outils du CNRTL", menu_cnrtl)
1054 #            menu.AppendSeparator()
1055 #            menu.Append(self.popupIDgraph, u"Graphe de la classe")
1056 #            menu.Append(self.idseg, u"Segments répétés")
1057 #            menu.Append(self.iducecarac, u"UCE caractéristiques")
1058 #            menu.Append(self.idexport, 'Partitionner...')
1059 #            #menu.Append(self.popupID2, u"Concordancier")
1060 #    #        menu.Append(self.popupID3, "recharger")
1061 #    
1062 #            self.PopupMenu(menu)
1063 #            menu.Destroy()
1064 #        elif 'tableau' in dir(self.Source) :
1065 #            if not hasattr(self, "pop1"):
1066 #                self.pop1 = wx.NewId()
1067 #                self.pop2 = wx.NewId()
1068 #                self.pop3 = wx.NewId()
1069 #                self.Bind(wx.EVT_MENU, self.quest_simi, id=self.pop1)
1070 #                self.Bind(wx.EVT_MENU, self.on_tablex, id=self.pop2)
1071 #                self.Bind(wx.EVT_MENU, self.quest_var_mod, id=self.pop3)
1072 #
1073 #            menu = wx.Menu()
1074 #            menu.Append(self.pop2, u"Chi2 par classe")
1075 #            menu.Append(self.pop3, u"Chi2 modalités de la variable")
1076 #            menu.AppendSeparator()
1077 #            menu.Append(self.pop1, u"Graph de la classe")
1078 #            self.PopupMenu(menu)
1079 #            menu.Destroy()
1080 #
1081 #    def onexport(self, evt) :
1082 #        if 'corpus' in dir(self.Source):
1083 #            corpus = self.Source.corpus
1084 #        ClasseCHD(self.parent, corpus, self.cl)
1085 #
1086 #    def quest_var_mod(self, evt) :
1087 #        if 'corpus' in dir(self.Source):
1088 #            corpus = self.Source.corpus
1089 #            if self.var_mod == {} :
1090 #                self.var_mod = treat_var_mod([val for val in corpus.make_etoiles()])
1091 #        else :
1092 #            corpus = self.Source.tableau
1093 #            if self.var_mod == {} :
1094 #                self.var_mod = treat_var_mod([val for val in corpus.actives] + [val for val in corpus.sups])
1095 #        with codecs.open(self.Source.pathout['chisqtable'], 'r', corpus.parametres['syscoding']) as f :
1096 #            chistable = [line.replace('\n','').replace('\r','').replace('"','').replace(',','.').split(';') for line in f]
1097 #        title = chistable[0]
1098 #        title.pop(0)
1099 #        chistable.pop(0)
1100 #        vchistable = [line[1:] for line in chistable]
1101 #        fchistable = [line[0] for line in chistable]
1102 #        word = self.getColumnText(self.list.GetFirstSelected(), 6)
1103 #        if len(word.split('_')) > 1 :
1104 #            var = word.split('_')[0]
1105 #            words = [word for word in self.var_mod[var]]
1106 #            words.sort()
1107 #            tableout = []
1108 #            kwords = []
1109 #            for word in words :
1110 #                if word in fchistable :
1111 #                    tableout.append(vchistable[fchistable.index(word)])
1112 #                    kwords.append(word)
1113 #            tmpgraph = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
1114 #            txt = barplot(tableout, kwords, title, self.Source.parent.RscriptsPath['Rgraph'], tmpgraph)
1115 #            tmpscript = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
1116 #            file = open(tmpscript,'w')
1117 #            file.write(txt)
1118 #            file.close()
1119 #            exec_rcode(self.Source.parent.RPath, tmpscript, wait = True)
1120 #            win = MessageImage(self, -1, u"Graphique", size=(700, 500),style = wx.DEFAULT_FRAME_STYLE)
1121 #            win.addsaveimage(tmpgraph)
1122 #            txt = "<img src='%s'>" % tmpgraph
1123 #            win.HtmlPage.SetPage(txt)
1124 #            win.Show(True)
1125 #        else :
1126 #            dial = wx.MessageDialog(self, u"Ce n'est pas une forme du type variable_modalité", u"Problème", wx.OK | wx.ICON_WARNING)
1127 #            dial.CenterOnParent()
1128 #            dial.ShowModal()
1129 #            dial.Destroy()
1130 #
1131 #    def quest_simi(self, evt) :
1132 #        tableau = self.Source.tableau
1133 #        tab = tableau.make_table_from_classe(self.cl, self.la)
1134 #        pathout = ConstructPathOut(self.Source.pathout+'/', 'simi_classe_%i' %self.cl)
1135 #        self.filename = os.path.join(pathout,'mat01.csv')
1136 #        tableau.printtable(self.filename, tab)
1137 #        del tab
1138 #        paramsimi = {'coeff' : 0,
1139 #                          'layout' : 2,
1140 #                          'type' : 1,
1141 #                          'arbremax' : 1,
1142 #                          'coeff_tv' : 1,
1143 #                          'coeff_tv_nb' : 0,
1144 #                          'tvprop' : 0,
1145 #                          'tvmin' : 5,
1146 #                          'tvmax' : 30,
1147 #                          'coeff_te' : 1,
1148 #                          'coeff_temin' : 1,
1149 #                          'coeff_temax' : 10,
1150 #                          'label_v': 1,
1151 #                          'label_e': 1,
1152 #                          'vcex' : 0,
1153 #                          'vcexmin' : 10,
1154 #                          'vcexmax' : 25,
1155 #                          'cex' : 10,
1156 #                          'cexfromchi' : True,
1157 #                          'sfromchi': False,
1158 #                          'seuil_ok' : 0,
1159 #                          'seuil' : 1,
1160 #                          'cols' : (255,0,0),
1161 #                          'cola' : (200,200,200),
1162 #                          'width' : 1000,
1163 #                          'height' : 1000,
1164 #                          'first' : True,
1165 #                          'keep_coord' : True,
1166 #                          'alpha' : 20,
1167 #                          'film': False,
1168 #                          }
1169 ##        self.tableau.actives = {}
1170 ##        self.tableau.lchi = self.lchi
1171 ##        self.tableau.chi = {}
1172 ##        for i, val in enumerate(self.la) :
1173 ##            self.tableau.actives[val] = [self.lfreq[i]]
1174 ##            self.tableau.chi[val] = [self.lchi[i]]
1175 #                          
1176 #        act = {}
1177 #        self.tableau.chi = {}
1178 #        self.tableau.lchi = self.lchi
1179 #        self.tableau.parametre['fromprof'] = True
1180 #        for i, val in enumerate(self.la) :
1181 #            act[val] = [self.lfreq[i]]
1182 #            self.tableau.chi[val] = [self.lchi[i]]
1183 #        DoSimi(self, param = paramsimi, fromprof = ffr(self.filename), pathout = pathout, listactives = self.la, actives = act)
1184 #
1185 #    def onwordgraph(self, evt):
1186 #        word = self.getColumnText(self.list.GetFirstSelected(), 6)
1187 #        dlg = progressbar(self, 2)
1188 #        corpus = self.Source.corpus
1189 #        uces = corpus.lc[self.cl-1]
1190 #        dlg.Update(1, u'Tableau...')
1191 #        #tab = corpus.make_table_with_classe(uces, self.la)
1192 #        pathout = ConstructPathOut(self.Source.pathout.dirout + '/' , 'simi_%s' % word)
1193 #        self.filename = os.path.join(pathout,'mat01.csv')
1194 #        dlg.Update(2, u'Ecriture...')
1195 #        #corpus.write_tab(tab, self.filename)
1196 #        #del tab
1197 #        corpus.make_and_write_sparse_matrix_from_classe(self.la, uces, self.filename)
1198 #        dlg.Destroy()
1199 #        paramsimi = {'coeff' : 0,
1200 #                          'layout' : 2,
1201 #                          'type' : 1,
1202 #                          'arbremax' : 0,
1203 #                          'coeff_tv' : 1,
1204 #                          'coeff_tv_nb' : 0,
1205 #                          'tvprop' : 0,
1206 #                          'tvmin' : 5,
1207 #                          'tvmax' : 30,
1208 #                          'coeff_te' : 1,
1209 #                          'coeff_temin' : 1,
1210 #                          'coeff_temax' : 10,
1211 #                          'label_v': 1,
1212 #                          'label_e': 0,
1213 #                          'vcex' : 1,
1214 #                          'vcexmin' : 10,
1215 #                          'vcexmax' : 25, 
1216 #                          'cex' : 10,
1217 #                          'seuil_ok' : 1,
1218 #                          'seuil' : 1,
1219 #                          'cols' : (255,0,0),
1220 #                          'cola' : (200,200,200),
1221 #                          'width' : 600,
1222 #                          'height' : 600,
1223 #                          'first' : True,
1224 #                          'keep_coord' : True,
1225 #                          'alpha' : 20,
1226 #                          'film': False,
1227 #                          }
1228 #        self.tableau = Tableau(self.parent, '')
1229 #        self.tableau.listactives = self.la
1230 #        self.tableau.actives = {}
1231 #        for i, val in enumerate(self.la) :
1232 #            self.tableau.actives[val] = [self.lfreq[i]]
1233 #        DoSimi(self, param = paramsimi, fromprof = ffr(self.filename), pathout = pathout, wordgraph = word)
1234 #
1235 #
1236     def OnPopupOne(self, event):
1237         corpus = self.Source.corpus
1238         #print 'ATTENTION PRINT ET TABLE'
1239         #corpus.make_et_table()
1240         word = self.getColumnText(self.GetFirstSelected(), 6)
1241         lems = corpus.getlems()
1242         uces = corpus.lc[self.cl-1]
1243         rep = []
1244         #FIXME : donner aussi eff reel a la place de nb uce
1245         for forme in lems[word].formes :
1246             ucef = list(set(corpus.getworduces(forme)).intersection(uces))
1247             #ucef = [uce for uce in corpus.formes[forme][1] if uce in uces]
1248             if ucef != [] :
1249                 nb = len(ucef)
1250                 rep.append([corpus.getforme(forme).forme, nb])
1251         win = message(self, u"Formes associées", wx.Size(300, 200))
1252         win.html = '<html>\n' + '<br>'.join([' : '.join([str(val) for val in forme]) for forme in rep]) + '\n</html>'
1253         win.HtmlPage.SetPage(win.html)
1254         win.Show(True)
1255 #
1256 #    def on_graph(self, evt):
1257 #        dlg = progressbar(self, 2)
1258 #        corpus = self.Source.corpus
1259 #        uces = corpus.lc[self.cl-1]
1260 #        dlg.Update(1, u'Tableau...')
1261 #        #tab = corpus.make_table_with_classe(uces, self.la)
1262 #        pathout = ConstructPathOut(self.Source.pathout.dirout+'/', 'simi_classe_%i' %self.cl)
1263 #        self.filename = os.path.join(pathout,'mat01.csv')
1264 #        dlg.Update(2, u'Ecriture...')
1265 #        #corpus.write_tab(tab, self.filename)
1266 #        #del tab
1267 #        corpus.make_and_write_sparse_matrix_from_classe(self.la, uces, self.filename)
1268 #        dlg.Destroy()
1269 #        paramsimi = {'coeff' : 0,
1270 #                          'layout' : 2,
1271 #                          'type' : 1,
1272 #                          'arbremax' : 1,
1273 #                          'coeff_tv' : 1,
1274 #                          'coeff_tv_nb' : 0,
1275 #                          'tvprop' : 0,
1276 #                          'tvmin' : 5,
1277 #                          'tvmax' : 30,
1278 #                          'coeff_te' : 1,
1279 #                          'coeff_temin' : 1,
1280 #                          'coeff_temax' : 10,
1281 #                          'label_v': 1,
1282 #                          'label_e': 0,
1283 #                          'vcex' : 0,
1284 #                          'vcexmin' : 10,
1285 #                          'vcexmax' : 25,
1286 #                          'cex' : 10,
1287 #                          'cexfromchi' : True,
1288 #                          'sfromchi': False,
1289 #                          'seuil_ok' : 0,
1290 #                          'seuil' : 1,
1291 #                          'cols' : (255,0,0),
1292 #                          'cola' : (200,200,200),
1293 #                          'width' : 1000,
1294 #                          'height' : 1000,
1295 #                          'first' : True,
1296 #                          'keep_coord' : True,
1297 #                          'alpha' : 20,
1298 #                          'film': False,
1299 #                          }
1300 #        self.tableau = Tableau(self.parent, '')
1301 #        self.tableau.listactives = self.la
1302 #        self.tableau.actives = {}
1303 #        self.tableau.lchi = self.lchi
1304 #        self.tableau.chi = {}
1305 #        self.tableau.parametre['fromprof'] = True
1306 #        for i, val in enumerate(self.la) :
1307 #            self.tableau.actives[val] = [self.lfreq[i]]
1308 #            self.tableau.chi[val] = [self.lchi[i]]
1309 #        DoSimi(self, param = paramsimi, fromprof = ffr(self.filename), pathout = pathout)
1310 #
1311 #    def on_segments(self,evt) :
1312 #        dlg = progressbar(self, 2)
1313 #        corpus = self.Source.corpus
1314 #        uces = corpus.lc[self.cl-1]
1315 #        l = []
1316 #        dlg.Update(1, u'Segments...')
1317 #        for i in range(2,10) :
1318 #            li = corpus.find_segments_in_classe(uces, i, 1000)
1319 #            if li == [] :
1320 #                break
1321 #            else :
1322 #                l += li
1323 #        l.sort(reverse = True)
1324 #        d = {}
1325 #        dlg.Update(2, 'Tri...')
1326 #        for i, line in enumerate(l) :
1327 #            d[i] = [line[1],line[0], line[2]]
1328 #        first = ['','','']
1329 #        para={'dico': d,'fline':first}
1330 #        dlg.Destroy()
1331 #        win = wliste(self, -1, u"Segments répétés - Classe %i" % self.cl, d, first, size=(600, 500))
1332 #        win.Show(True)
1333 #
1334 #    def on_uce_carac(self,evt) :
1335 #        dial = PrefUCECarac(self, self.parent)
1336 #        dial.CenterOnParent()
1337 #        if dial.ShowModal() == wx.ID_OK :
1338 #            limite = dial.spin_eff.GetValue()
1339 #            atype = dial.radio_type.GetSelection()
1340 #            dlg = progressbar(self,maxi = 4)
1341 #            corpus = self.Source.corpus
1342 #            uces = corpus.lc[self.cl-1]
1343 #            tab = corpus.make_table_with_classe(uces, self.la)
1344 #            tab.pop(0)
1345 #            dlg.Update(2, u'score...')
1346 #            if atype == 0 :
1347 #                ntab = [round(sum([self.lchi[i] for i, word in enumerate(line) if word == 1]),2) for line in tab]
1348 #            else :
1349 #                ntab = [round(sum([self.lchi[i] for i, word in enumerate(line) if word == 1])/float(sum(line)),2) if sum(line)!=0 else 0 for line in tab]
1350 #            ntab2 = [[ntab[i], uces[i]] for i, val in enumerate(ntab)]
1351 #            del ntab
1352 #            ntab2.sort(reverse = True)
1353 #            ntab2 = ntab2[:limite]
1354 #            nuces = [val[1] for val in ntab2]
1355 #            dlg.Update(3, u'concordancier...')
1356 #            #ucestxt = [corpus.ucis_paras_uces[val[1][0]][val[1][1]][val[1][2]] for val in ntab2]
1357 #            ucestxt1 = [row for row in corpus.getconcorde(nuces)]
1358 #            ucestxt = []
1359 #            ucis_txt = []
1360 #            for uce in ucestxt1 :
1361 #                ucetxt = ' '+uce[1]+' '
1362 #                ucis_txt.append(' '.join(corpus.ucis[corpus.getucefromid(uce[0]).uci].etoiles) + '<br>')
1363 #                for lem in self.la :
1364 #                    listmot = corpus.getlems()[lem].formes
1365 #                    for id in listmot :
1366 #                        forme = corpus.getforme(id).forme
1367 #                        ucetxt = ucetxt.replace(' '+forme+' ', '<font color=red> ' + forme + ' </font>')
1368 #                ucestxt.append(ucetxt)        
1369 #            #ucestxt = [corpus.make_concord(self.la, ' '.join(uce), 'red') for uce in ucestxt]
1370 #            dlg.Update(4, u'texte...')
1371 #            #ucis_txt = [' '.join(corpus.ucis[val[1][0]][0]) for val in ntab2]
1372 #            win = message(self, -1, u"UCE caractéristiques - Classe %i" % self.cl, size=(600, 500), style=wx.DEFAULT_FRAME_STYLE)
1373 #            win.html = '<html>\n' + '<br><br>'.join(['<br>'.join([ucis_txt[i], 'score : ' + str(ntab2[i][0]), ucestxt[i]]) for i in range(0,len(ucestxt))]) + '\n</html>'
1374 #            win.HtmlPage.SetPage(win.html)
1375 #            dlg.Destroy()
1376 #            win.Show(True)
1377 #    
1378 #    def on_tablex(self, evt):
1379 #        if 'corpus' in dir(self.Source):
1380 #            corpus = self.Source.corpus
1381 #        else :
1382 #            corpus = self.Source.tableau
1383 #        with codecs.open(self.Source.pathout['chisqtable'], 'r', corpus.parametres['syscoding']) as f :
1384 #            chistable = [line.replace('\n','').replace('\r','').replace('"','').replace(',','.').split(';') for line in f]
1385 #        title = chistable[0]
1386 #        title.pop(0)
1387 #        chistable.pop(0)
1388 #        vchistable = [line[1:] for line in chistable]
1389 #        fchistable = [line[0] for line in chistable]
1390 #        words = [self.getColumnText(self.list.GetFirstSelected(), 6)]
1391 #        tableout = [vchistable[fchistable.index(words[0])]]
1392 #        last = self.list.GetFirstSelected()
1393 #        while self.list.GetNextSelected(last) != -1:
1394 #            last = self.list.GetNextSelected(last)
1395 #            word = self.getColumnText(last, 6)
1396 #            words.append(word)
1397 #            tableout.append(vchistable[fchistable.index(word)])
1398 #        tmpgraph = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
1399 #        nbcl = len(title)
1400 #        txt = barplot(tableout, words, title, self.Source.parent.RscriptsPath['Rgraph'], tmpgraph)
1401 #        tmpscript = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
1402 #        file = open(tmpscript,'w')
1403 #        file.write(txt)
1404 #        file.close()
1405 #        
1406 #        exec_rcode(self.Source.parent.RPath, tmpscript, wait = True)
1407 #        win = MessageImage(self, -1, u"Graphique", size=(700, 500),style = wx.DEFAULT_FRAME_STYLE)
1408 #        win.addsaveimage(tmpgraph)
1409 #        txt = "<img src='%s'>" % tmpgraph
1410 #        win.HtmlPage.SetPage(txt)
1411 #        win.Show(True)
1412 #
1413 #    def onlexdendro(self, evt):
1414 #        if 'corpus' in dir(self.Source):
1415 #            corpus = self.Source.corpus
1416 #        else :
1417 #            corpus = self.Source.tableau
1418 #        with codecs.open(self.Source.pathout['chisqtable'], 'r', corpus.parametres['syscoding']) as f :
1419 #            chistable = [line.replace('\n','').replace('\r','').replace('"','').replace(',','.').split(';') for line in f]
1420 #        title = chistable[0]
1421 #        title.pop(0)
1422 #        chistable.pop(0)
1423 #        vchistable = [line[1:] for line in chistable]
1424 #        fchistable = [line[0] for line in chistable]
1425 #        words = [self.getColumnText(self.list.GetFirstSelected(), 6)]
1426 #        tableout = [vchistable[fchistable.index(words[0])]]
1427 #        last = self.list.GetFirstSelected()
1428 #        while self.list.GetNextSelected(last) != -1:
1429 #            last = self.list.GetNextSelected(last)
1430 #            word = self.getColumnText(last, 6)
1431 #            words.append(word)
1432 #            tableout.append(vchistable[fchistable.index(word)])
1433 #        tmpgraph = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
1434 #        txttable = 'c(' + ','.join([','.join(line) for line in tableout]) + ')'
1435 #        rownames = 'c("' + '","'.join(words) + '")'
1436 #        colnames = 'c("' + '","'.join(title) + '")'
1437 #        nbcl = len(title)
1438 #        rownb = len(words)
1439 #        txt = """
1440 #        load("%s")
1441 #        di <- matrix(data=%s, nrow=%i, byrow = TRUE)
1442 #        rownames(di)<- %s
1443 #        colnames(di) <- %s
1444 #        library(ape)
1445 #        source("%s")
1446 #        height <- (30*ncol(di)) + (15*nrow(di))
1447 #        height <- ifelse(height <= 400, 400, height)
1448 #        width <- 500
1449 #        open_file_graph("%s", width=width, height=height)
1450 #        plot.dendro.lex(tree.cut1$tree.cl, di)
1451 #        """ % (self.Source.pathout['Rdendro'], txttable, rownb, rownames, colnames, self.Source.parent.RscriptsPath['Rgraph'], ffr(tmpgraph))
1452 #        tmpscript = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
1453 #        file = open(tmpscript,'w')
1454 #        file.write(txt)
1455 #        file.close()
1456 #        exec_rcode(self.Source.parent.RPath, tmpscript, wait = True)
1457 #        win = MessageImage(self, -1, u"Graphique", size=(700, 500),style = wx.DEFAULT_FRAME_STYLE)
1458 #        win.addsaveimage(tmpgraph)
1459 #        txt = "<img src='%s'>" % tmpgraph
1460 #        win.HtmlPage.SetPage(txt)
1461 #        win.Show(True)
1462 #
1463 #
1464 #    def make_concord(self, uces, title, color = 'red') :
1465 #        corpus = self.Source.corpus
1466 #        ListWord = [self.getColumnText(self.list.GetFirstSelected(), 6)]
1467 #        last = self.list.GetFirstSelected()
1468 #        while self.list.GetNextSelected(last) != -1:
1469 #            last = self.list.GetNextSelected(last)
1470 #            ListWord.append(self.getColumnText(last, 6))
1471 #        listmot = [forme for item in ListWord for forme in corpus.getlems()[item].formes]
1472 #        win = message(self, -1, title, size=(600, 500), style=wx.DEFAULT_FRAME_STYLE)
1473 #        toshow = ['<html>\n<H1>Concordancier</H1>\n']
1474 #        toshow.append('<h3><font color=%s>' % color + ' '.join(ListWord) + '</font></h3><br>')
1475 #        duce = {}
1476 #        ucef = []
1477 #        for word in ListWord : 
1478 #            ucef += list(set(corpus.getlemuces(word)).intersection(uces))
1479 #        ucef = list(set(ucef))
1480 #        ucef.sort()
1481 #        res = corpus.getconcorde(ucef)
1482 #        txt = '<br>'.join(toshow) +'<br><br>'
1483 #        for uce in res :
1484 #            ucetxt = ' '+uce[1]+' '
1485 #            txt += ' '.join(corpus.ucis[corpus.getucefromid(uce[0]).uci].etoiles) + '<br>'
1486 #            for forme in listmot:
1487 #                forme = corpus.getforme(forme).forme
1488 #                ucetxt = ucetxt.replace(' '+forme+' ', '<font color=red> ' + forme + ' </font>')
1489 #            txt += ucetxt + '<br><br>'
1490 #        win.HtmlPage.SetPage(txt)
1491 #        return win
1492 #
1493 #    def OnPopupTwo(self, event):
1494 #        corpus = self.Source.corpus
1495 #        uces = corpus.lc[self.cl-1]
1496 #        win = self.make_concord(uces, "Concordancier - Classe %i" % self.cl)
1497 #        win.Show(True)
1498 #    
1499 #    def OnPopupThree(self, event):
1500 #        corpus = self.Source.corpus
1501 #        uces = [classe[i] for classe in corpus.lc for i in range(0,len(classe))]
1502 #        win = self.make_concord(uces, "Concordancier - UCE classées")
1503 #        win.Show(True)
1504 #        
1505 #    def OnPopupFour(self, event):
1506 #        corpus = self.Source.corpus
1507 #        uces = [classe[i] for classe in corpus.lc for i in range(0,len(classe))] + corpus.lc0
1508 #        win = self.make_concord(uces, "Concordancier - Toutes les UCE")
1509 #        win.Show(True)
1510 #
1511 #    def OnPopupFive(self, event):
1512 #        word = self.getColumnText(self.list.GetFirstSelected(), 6)
1513 #        lk = "http://www.cnrtl.fr/definition/" + word
1514 #        webbrowser.open(lk)
1515 #
1516 #    def OnPopupSix(self, event):  
1517 #        word = self.getColumnText(self.list.GetFirstSelected(), 6)
1518 #        lk = "http://www.cnrtl.fr/etymologie/" + word
1519 #        webbrowser.open(lk)
1520 #        
1521 #    def OnPopupSeven(self, event):        
1522 #        word = self.getColumnText(self.list.GetFirstSelected(), 6)
1523 #        lk = "http://www.cnrtl.fr/synonymie/" + word
1524 #        webbrowser.open(lk)
1525 #        
1526 #    def OnPopupHeight(self, event):  
1527 #        word = self.getColumnText(self.list.GetFirstSelected(), 6)
1528 #        lk = "http://www.cnrtl.fr/antonymie/" + word
1529 #        webbrowser.open(lk)
1530 #        
1531 #    def OnPopupNine(self, event):            
1532 #        word = self.getColumnText(self.list.GetFirstSelected(), 6)
1533 #        lk = "http://www.cnrtl.fr/morphologie/" + word
1534 #        webbrowser.open(lk)
1535 #
1536 #    def onproxe(self, evt) :
1537 #        word = self.getColumnText(self.list.GetFirstSelected(), 6)
1538 #        lk = "http://www.cnrtl.fr/proxemie/" + word
1539 #        webbrowser.open(lk)
1540 #
1541 #    def OnSize(self, event):
1542 #        w, h = self.GetClientSizeTuple()
1543 #        self.list.SetDimensions(0, 0, w, h)
1544 #        
1545 #    def OnColClick(self, event):
1546 #        self.do_greyline()
1547 #
1548 #
1549 #class wliste(wx.Frame):
1550 #    def __init__(self, parent, id, title, d, fline, size=(600, 500)):
1551 #        wx.Frame.__init__(self, parent, id)
1552 #        self.liste = ListForSpec(self, parent, d, fline)
1553 #        self.button_1 = wx.Button(self, -1, "Fermer")
1554 #        self.Bind(wx.EVT_BUTTON, self.OnCloseMe, self.button_1)
1555 #        self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
1556 #        self.__do_layout()
1557 #
1558 #    def __do_layout(self):
1559 #        sizer_1 = wx.BoxSizer(wx.VERTICAL)
1560 #        sizer_2 = wx.BoxSizer(wx.VERTICAL)
1561 #        sizer_2.Add(self.liste, 1, wx.EXPAND | wx.ADJUST_MINSIZE, 0)
1562 #        sizer_2.Add(self.button_1, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ADJUST_MINSIZE, 0)
1563 #        sizer_1.Add(sizer_2, 1, wx.EXPAND, 0)
1564 #        self.SetAutoLayout(True)
1565 #        self.SetSizer(sizer_1)
1566 #        self.Layout()
1567 #        
1568 #    def OnCloseMe(self, event):
1569 #        self.Close(True)
1570 #
1571 #    def OnCloseWindow(self, event):
1572 #        self.Destroy()
1573 #
1574 #class message(wx.Dialog):
1575 #    def __init__(self, parent, title, size, save = True):
1576 #        wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = title, pos = wx.DefaultPosition, size = size, style = wx.DEFAULT_DIALOG_STYLE )
1577 #       self.save = save        
1578 #        self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
1579 #
1580 #        self.html = ""
1581 #        self.HtmlPage=wx.html.HtmlWindow(self, -1)
1582 #        self.HtmlPage.SetMinSize( size )
1583 #        if "gtk2" in wx.PlatformInfo:
1584 #            self.HtmlPage.SetStandardFonts()
1585 #        self.HtmlPage.SetFonts('Courier','Courier')
1586 #
1587 #        self.button_1 = wx.Button(self, wx.ID_CANCEL)
1588 #
1589 #        self.Bind(wx.EVT_BUTTON, self.OnCloseMe, self.button_1)
1590 #        if self.save :
1591 #            self.button_2 = wx.Button(self, wx.ID_SAVE)
1592 #            self.Bind(wx.EVT_BUTTON, self.OnSavePage, self.button_2)
1593 #        self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
1594 #        self.__do_layout()
1595 #
1596 #    def __do_layout(self):
1597 #        sizer_2 = wx.BoxSizer(wx.VERTICAL)
1598 #        sizer_2.Add(self.HtmlPage, 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
1599 #        m_sdbSizer1 = wx.StdDialogButtonSizer()
1600 #        m_sdbSizer1.AddButton(  self.button_1 )
1601 #        if self.save :
1602 #            m_sdbSizer1.AddButton(  self.button_2 )
1603 #        m_sdbSizer1.Realize()
1604 #        sizer_2.Add(m_sdbSizer1, 1, wx.EXPAND, 5)
1605 #        self.SetSizer(sizer_2)
1606 #        self.Layout()
1607 #        sizer_2.Fit( self )
1608 #
1609 #    def OnSavePage(self, evt) :
1610 #        dlg = wx.FileDialog(
1611 #            self, message="Enregistrer sous...", defaultDir=os.getcwd(),
1612 #            defaultFile="concordancier.html", wildcard="html|*.html", style=wx.SAVE | wx.OVERWRITE_PROMPT
1613 #            )
1614 #        dlg.SetFilterIndex(2)
1615 #        dlg.CenterOnParent()
1616 #        if dlg.ShowModal() == wx.ID_OK:
1617 #            path = dlg.GetPath()
1618 #            with open(path, 'w') as f :
1619 #                f.write(self.html)
1620 #
1621 #    def OnCloseMe(self, event):
1622 #        self.Close(True)
1623 #
1624 #    def OnCloseWindow(self, event):
1625 #        self.Destroy()