1 # -*- coding: utf-8 -*-
3 #----------------------------------------------------------------------------
4 # Author: Pierre Ratinaud
7 #comes from ListCtrl.py from the demo tool of wxPython:
8 # Author: Robin Dunn & Gary Dumer
11 # Copyright: (c) 1998 by Total Control Software
12 # Licence: wxWindows license
13 #----------------------------------------------------------------------------
18 import wx.lib.mixins.listctrl as listmix
21 from functions import exec_rcode, MessageImage
22 from chemins import ffr
23 from PrintRScript import barplot
24 from dialog import SearchDial
25 #---------------------------------------------------------------------------
27 class List(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin):
28 def __init__(self, parent, ID, pos=wx.DefaultPosition,
29 size=wx.DefaultSize, style=0):
30 wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
31 listmix.ListCtrlAutoWidthMixin.__init__(self)
33 class ListForSpec(wx.Panel, listmix.ColumnSorterMixin):
34 def __init__(self, parent,gparent, dlist,first):
39 wx.Panel.__init__(self, parent, -1, style=wx.WANTS_CHARS)
41 search_id = wx.NewId()
42 self.parent.Bind(wx.EVT_MENU, self.onsearch, id = search_id)
43 self.accel_tbl = wx.AcceleratorTable([(wx.ACCEL_CTRL, ord('F'), search_id)])
44 self.SetAcceleratorTable(self.accel_tbl)
46 self.il = wx.ImageList(16, 16)
48 self.sm_up = self.il.Add(getSmallUpArrowBitmap())
49 self.sm_dn = self.il.Add(getSmallDnArrowBitmap())
53 self.list = List(self, tID,
57 | wx.LC_SORT_ASCENDING
60 self.list.SetImageList(self.il, wx.IMAGE_LIST_SMALL)
63 self.PopulateList(dlist,first)
64 self.Bind(wx.EVT_SIZE, self.OnSize)
66 self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected, self.list)
67 self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick)
70 self.list.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightClick)
73 self.list.Bind(wx.EVT_RIGHT_UP, self.OnRightClick)
76 self.itemDataMap = dlist
77 listmix.ColumnSorterMixin.__init__(self, len(first))
78 self.SortListItems(1, False)
81 #-----------------------------------------------------------------------------------------
83 def PopulateList(self, dlist,first):
86 self.list.InsertColumn(i,name,wx.LIST_FORMAT_LEFT)
89 for key,data in dlist.iteritems() :
91 index = self.list.InsertStringItem(sys.maxint, str(data[0]))
94 self.list.SetStringItem(index, i, str(data[i]))
97 self.list.SetItemData(index, key)
99 self.list.SetColumnWidth(0, wx.LIST_AUTOSIZE)
100 for i in range(1,len(first)-1):
101 self.list.SetColumnWidth(i, 130)
103 def do_greyline(self):
104 for row in xrange(self.list.GetItemCount()):
106 self.list.SetItemBackgroundColour(row,(230,230,230))
108 self.list.SetItemBackgroundColour(row,wx.WHITE)
111 # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
112 def GetListCtrl(self):
115 # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
116 def GetSortImages(self):
117 return (self.sm_dn, self.sm_up)
120 def OnRightDown(self, event):
123 item, flags = self.list.HitTest((x, y))
125 if flags & wx.LIST_HITTEST_ONITEM:
126 self.list.Select(item)
130 def getColumnText(self, index, col):
131 item = self.list.GetItem(index, col)
132 return item.GetText()
134 def OnItemSelected(self, event):
135 self.currentItem = event.m_itemIndex
138 def onsearch(self, evt) :
139 self.dial = SearchDial(self, self, 0, True)
140 self.dial.CenterOnParent()
141 self.dial.ShowModal()
144 def OnRightClick(self, event):
146 # only do this part the first time so the events are only bound once
147 if not hasattr(self, "popupID1"):
148 self.popupID1 = wx.NewId()
149 self.popupID2 = wx.NewId()
150 self.popupID3 = wx.NewId()
151 self.popup_Tgen_glob = wx.NewId()
153 self.Bind(wx.EVT_MENU, self.OnPopupOne, id=self.popupID1)
154 self.Bind(wx.EVT_MENU, self.OnPopupTwo, id=self.popupID2)
155 self.Bind(wx.EVT_MENU, self.OnPopupThree, id=self.popupID3)
156 self.Bind(wx.EVT_MENU, self.OnTgen_glob, id=self.popup_Tgen_glob)
160 menu.Append(self.popupID1, u"Formes associƩes")
161 menu.Append(self.popupID2, u"Concordancier")
162 menu.Append(self.popupID3, "Graphique")
163 #menu.Append(self.popup_Tgen_glob, "Tgen global")
169 def OnPopupOne(self, event):
170 activenotebook = self.parent.nb.GetSelection()
171 page = self.parent.nb.GetPage(activenotebook)
173 word = self.getColumnText(self.list.GetFirstSelected(), 0)
174 lems = corpus.getlems()
176 for forme in lems[word].formes :
177 rep.append([corpus.getforme(forme).forme, corpus.getforme(forme).freq])
178 win = message(self, -1, u"Formes associƩes", size=(300, 200), style=wx.DEFAULT_FRAME_STYLE)
179 win.html = '<html>\n' + '<br>'.join([' : '.join([str(val) for val in forme]) for forme in rep]) + '\n</html>'
180 win.HtmlPage.SetPage(win.html)
183 def OnPopupTwo(self, event):
184 activenotebook = self.parent.nb.GetSelection()
185 page = self.parent.nb.GetPage(activenotebook)
186 item=self.getColumnText(self.list.GetFirstSelected(), 0)
188 win = message(self, -1, u"Concordancier", size=(600, 200),style = wx.DEFAULT_FRAME_STYLE)
190 listmot = corpus.getlems()[item].formes
191 uce_ok = corpus.getlemuces(item)
192 txt = '<h1>Concordancier</h1>'
193 res = corpus.getconcorde(uce_ok)
195 ucetxt = ' '+uce[1]+' '
196 txt += ' '.join(corpus.ucis[corpus.getucefromid(uce[0]).uci].etoiles) + '<br>'
197 for forme in listmot :
198 forme = corpus.getforme(forme).forme
199 ucetxt = ucetxt.replace(' '+forme+' ', '<font color=red> ' + forme + ' </font>')
200 txt += ucetxt + '<br><br>'
202 # content = ' '+' '.join(corpus.ucis_paras_uces[uce[0]][uce[1]][uce[2]])+' '
203 # for form in listmot :
206 # forme = ' ' + form + ' '
207 # while i < len(content):
208 # coordword = content[i:].find(forme)
209 # if coordword != -1 and i == 0:
210 # txt += '<br><b>' + ' '.join(corpus.ucis[uce[0]][0]) + '</b><br>'
211 # if coordword < avap:
212 # sp = ' ' * (avap - coordword)
215 # deb = i + coordword - avap
216 # if len(content) < i + coordword + avap:
217 # fin = len(content) - 1
219 # fin = i + coordword + avap
220 # txt += '<TT>' + sp + content[deb:fin].replace(forme, '<font color=red>' + forme + '</font>') + '</TT><br>'
221 # i += coordword + len(forme)
223 # elif coordword != -1 and i != 0 :
224 # if coordword < avap:
225 # sp = ' ' * (avap - coordword)
228 # deb = i + coordword - avap
229 # if len(content) < i + coordword + avap:
230 # fin = len(content) - 1
232 # fin = i + coordword + avap
233 # txt += '<TT>' + sp + content[deb:fin].replace(forme, '<font color=red>' + forme + '</font>') + '</TT><br>'
234 # i += coordword + len(forme)
239 win.HtmlPage.SetPage(txt)
242 def OnPopupThree(self, event) :
243 datas = [self.dlist[self.list.GetItemData(self.list.GetFirstSelected())]]
244 last = self.list.GetFirstSelected()
245 while self.list.GetNextSelected(last) != -1:
246 last = self.list.GetNextSelected(last)
247 data = self.dlist[self.list.GetItemData(last)]
249 colnames = self.first[1:]
250 table = [[str(val) for val in line[1:]] for line in datas]
251 rownames = [val[0] for val in datas]
252 tmpgraph = tempfile.mktemp(dir=self.parent.TEMPDIR)
254 txt = barplot(table, rownames, colnames, self.parent.RscriptsPath['Rgraph'], tmpgraph)
256 tmpscript = tempfile.mktemp(dir=self.parent.TEMPDIR)
257 file = open(tmpscript,'w')
260 exec_rcode(self.parent.RPath, tmpscript, wait = True)
261 win = MessageImage(self, -1, u"Graphique", size=(700, 500),style = wx.DEFAULT_FRAME_STYLE)
262 win.addsaveimage(tmpgraph)
263 txt = "<img src='%s'>" % tmpgraph
264 win.HtmlPage.SetPage(txt)
267 def OnTgen_glob(self, evt) :
268 activenotebook = self.parent.nb.GetSelection()
269 page = self.parent.nb.GetPage(activenotebook)
272 tmpgraph = tempfile.mktemp(dir=self.gparent.parent.TEMPDIR)
275 """ % corpus.dictpathout['RData']
279 for (i in 1:ncol(dmf)) {
280 Tgen.glob <- rbind(Tgen.glob,colSums(dmf[which(specf[,i] > 3),]))
281 tovire <- append(tovire, which(specf[,i] > 3))
283 rownames(Tgen.glob) <- colnames(dmf)
284 Tgen.table <- dmf[-unique(tovire),]
285 Tgen.table<- rbind(Tgen.table, Tgen.glob)
286 spec.Tgen.glob <- AsLexico2(Tgen.table)
287 spec.Tgen.glob <- spec.Tgen.glob[[1]][((nrow(Tgen.table)-ncol(Tgen.table))+1):nrow(Tgen.table),]
290 txt = barplot('', '', '', self.gparent.parent.RscriptsPath['Rgraph'], tmpgraph, intxt = intxt)
291 tmpscript = tempfile.mktemp(dir=self.gparent.parent.TEMPDIR)
292 with open(tmpscript, 'w') as f :
294 exec_rcode(self.gparent.parent.RPath, tmpscript, wait = True)
295 win = MessageImage(self, -1, u"Graphique", size=(700, 500),style = wx.DEFAULT_FRAME_STYLE)
296 win.addsaveimage(tmpgraph)
297 txt = "<img src='%s'>" % tmpgraph
298 win.HtmlPage.SetPage(txt)
301 def OnSize(self, event):
302 w,h = self.GetClientSizeTuple()
303 self.list.SetDimensions(0, 0, w, h)
305 def OnColClick(self,event):
308 class message(wx.Frame):
309 def __init__(self, *args, **kwds):
310 # begin wxGlade: MyFrame.__init__
311 kwds["style"] = wx.DEFAULT_FRAME_STYLE
312 wx.Frame.__init__(self, *args, **kwds)
313 #self.text_ctrl_1 = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE)
314 self.HtmlPage=wx.html.HtmlWindow(self, -1)
315 if "gtk2" in wx.PlatformInfo:
316 self.HtmlPage.SetStandardFonts()
317 self.HtmlPage.SetFonts('Courier','Courier')
320 self.button_1 = wx.Button(self, -1, "Fermer")
321 self.Bind(wx.EVT_BUTTON, self.OnCloseMe, self.button_1)
322 self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
326 def __do_layout(self):
327 # begin wxGlade: MyFrame.__do_layout
328 sizer_1 = wx.BoxSizer(wx.VERTICAL)
329 sizer_2 = wx.BoxSizer(wx.VERTICAL)
330 sizer_2.Add(self.HtmlPage, 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
331 sizer_2.Add(self.button_1, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ADJUST_MINSIZE, 0)
332 sizer_1.Add(sizer_2, 1, wx.EXPAND, 0)
333 self.SetAutoLayout(True)
334 self.SetSizer(sizer_1)
338 def OnCloseMe(self, event):
341 def OnCloseWindow(self, event):
345 def getSmallUpArrowData():
347 '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
348 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
349 \x00\x00<IDAT8\x8dcddbf\xa0\x040Q\xa4{h\x18\xf0\xff\xdf\xdf\xffd\x1b\x00\xd3\
350 \x8c\xcf\x10\x9c\x06\xa0k\xc2e\x08m\xc2\x00\x97m\xd8\xc41\x0c \x14h\xe8\xf2\
351 \x8c\xa3)q\x10\x18\x00\x00R\xd8#\xec\xb2\xcd\xc1Y\x00\x00\x00\x00IEND\xaeB`\
354 def getSmallUpArrowBitmap():
355 return wx.BitmapFromImage(getSmallUpArrowImage())
357 def getSmallUpArrowImage():
358 stream = cStringIO.StringIO(getSmallUpArrowData())
359 return wx.ImageFromStream(stream)
361 #----------------------------------------------------------------------
362 def getSmallDnArrowData():
364 "\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
365 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
366 \x00\x00HIDAT8\x8dcddbf\xa0\x040Q\xa4{\xd4\x00\x06\x06\x06\x06\x06\x16t\x81\
367 \xff\xff\xfe\xfe'\xa4\x89\x91\x89\x99\x11\xa7\x0b\x90%\ti\xc6j\x00>C\xb0\x89\
368 \xd3.\x10\xd1m\xc3\xe5*\xbc.\x80i\xc2\x17.\x8c\xa3y\x81\x01\x00\xa1\x0e\x04e\
369 ?\x84B\xef\x00\x00\x00\x00IEND\xaeB`\x82"
371 def getSmallDnArrowBitmap():
372 return wx.BitmapFromImage(getSmallDnArrowImage())
374 def getSmallDnArrowImage():
375 stream = cStringIO.StringIO(getSmallDnArrowData())
376 return wx.ImageFromStream(stream)