1 # -*- coding: utf-8 -*-
2 #Author: Pierre Ratinaud
3 #Copyright (c) 2012, Pierre Ratinaud
9 import wx.lib.agw.customtreectrl as CT
11 from openanalyse import OpenAnalyse
12 from corpus import Corpus, copycorpus
13 from tableau import Tableau, copymatrix
14 from functions import DoConf, GetTxtProfile, TGen, BugReport
15 from profile_segment import ProfileSegment, ProfilType
16 from search_tools import SearchFrame
17 from dialog import PrefSimpleFile, PrefExport
18 from layout import open_antiprofil, TgenLayout
19 from guifunct import TGenFrame
20 from textaslexico import TgenSpec
21 from textreinert import TgenProf
23 log = logging.getLogger('iramuteq.tree')
25 class InfoDialog ( wx.Dialog ):
27 def __init__( self, parent, txt, parametres ):
28 wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"Informations", pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.DEFAULT_DIALOG_STYLE )
29 if len(parametres) > 30 :
33 self.SetSizeHintsSz( wx.Size( 500,200 ), wx.DefaultSize )
35 bSizer1 = wx.BoxSizer( wx.VERTICAL )
37 self.m_panel2 = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
38 bSizer2 = wx.BoxSizer( wx.VERTICAL )
40 self.m_staticText4 = wx.StaticText( self.m_panel2, wx.ID_ANY, txt, wx.DefaultPosition, wx.DefaultSize, 0 )
41 self.m_staticText4.Wrap( -1 )
42 bSizer2.Add( self.m_staticText4, 0, wx.ALL, 5 )
45 self.m_panel2.SetSizer( bSizer2 )
46 self.m_panel2.Layout()
47 bSizer2.Fit( self.m_panel2 )
48 bSizer1.Add( self.m_panel2, 0, wx.EXPAND |wx.ALL, 5 )
50 self.m_panel1 = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
52 fgSizer1 = wx.FlexGridSizer( 0, nb, 0, 0 )
53 fgSizer1.SetFlexibleDirection( wx.BOTH )
54 fgSizer1.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED )
57 for val in parametres :
58 fgSizer1.Add( wx.StaticText( self.m_panel1, wx.ID_ANY, val[0], wx.DefaultPosition, wx.DefaultSize, 0 ), 0, wx.ALL, 0)
59 #fgSizer1.Add( wx.StaticText( self.m_panel1, wx.ID_ANY, val[1], wx.DefaultPosition, wx.DefaultSize, 0 ), 0, wx.ALL, 0)
60 txtctrl.append( wx.TextCtrl( self.m_panel1, wx.ID_ANY, val[1], wx.DefaultPosition, (450, 20), wx.TE_READONLY ) )
61 txtctrl[-1].SetBackgroundColour('#DDE8EB')
62 #wx.SystemSettings.GetColour(wx.SYS_COLOUR_GRAYTEXT))
63 fgSizer1.Add( txtctrl[-1], 0, wx.ALL|wx.EXPAND, 0)
64 #fgSizer1.Add( wx.StaticLine( self.m_panel1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ), 0, wx.EXPAND |wx.ALL, 0)
65 #fgSizer1.Add( wx.StaticLine( self.m_panel1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ), 0, wx.EXPAND|wx.ALL, 0)
67 self.m_panel1.SetSizer( fgSizer1 )
68 self.m_panel1.Layout()
69 fgSizer1.Fit( self.m_panel1 )
70 bSizer1.Add( self.m_panel1, 0, wx.EXPAND|wx.ALL, 3 )
72 m_sdbSizer1 = wx.StdDialogButtonSizer()
73 self.m_sdbSizer1OK = wx.Button( self, wx.ID_OK )
74 m_sdbSizer1.AddButton( self.m_sdbSizer1OK )
75 m_sdbSizer1.Realize();
77 bSizer1.Add( m_sdbSizer1, 0, wx.EXPAND, 5 )
80 self.SetSizer( bSizer1 )
84 self.Centre( wx.BOTH )
90 class LeftTree(CT.CustomTreeCtrl):
92 def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition,
94 style=wx.SUNKEN_BORDER|wx.WANTS_CHARS,
95 agwStyle=CT.TR_HIDE_ROOT|CT.TR_HAS_BUTTONS|CT.TR_HAS_VARIABLE_ROW_HEIGHT):
97 CT.CustomTreeCtrl.__init__(self, parent, id, pos, size, style, agwStyle)
103 if data.startswith("TR_"):
104 treestyles.append(data)
105 elif data.startswith("EVT_"):
110 self.styles = treestyles
113 self.il = wx.ImageList(16, 16)
115 imgtextroot = self.il.Add(wx.Image(os.path.join(self.parent.images_path,'textroot.png'), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap())
116 self.ild['alceste'] = self.il.Add(wx.Image(os.path.join(self.parent.images_path,'reinert.png'), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap())
117 self.ild['corpus'] = self.il.Add(wx.Image(os.path.join(self.parent.images_path,'textcorpus.png'), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap())
118 self.ild['wordcloud'] = self.il.Add(wx.Image(os.path.join(self.parent.images_path,'wordcloud.png'), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap())
119 self.ild['stat'] = self.il.Add(wx.Image(os.path.join(self.parent.images_path,'stats.png'), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap())
120 self.ild['simitxt'] = self.il.Add(wx.Image(os.path.join(self.parent.images_path,'simitxt.png'), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap())
121 self.ild['clustersimitxt'] = self.il.Add(wx.Image(os.path.join(self.parent.images_path,'clustersimitxt.png'), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap())
122 self.ild['clustercloud'] = self.il.Add(wx.Image(os.path.join(self.parent.images_path,'clustercloud.png'), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap())
123 self.ild['spec'] = self.il.Add(wx.Image(os.path.join(self.parent.images_path,'spec.png'), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap())
124 imgmatroot = self.il.Add(wx.Image(os.path.join(self.parent.images_path,'matroot.png'), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap())
125 self.ild['matrix'] = self.il.Add(wx.Image(os.path.join(self.parent.images_path,'matrix.png'), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap())
126 self.ild['freq'] = self.il.Add(wx.Image(os.path.join(self.parent.images_path,'frequences.png'), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap())
127 self.ild['freqmulti'] = self.il.Add(wx.Image(os.path.join(self.parent.images_path,'frequences.png'), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap())
128 self.ild['chi2'] = self.il.Add(wx.Image(os.path.join(self.parent.images_path,'chi2.png'), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap())
129 self.ild['reinertmatrix'] = self.il.Add(wx.Image(os.path.join(self.parent.images_path,'reinertmatrix.png'), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap())
130 self.ild['simimatrix'] = self.il.Add(wx.Image(os.path.join(self.parent.images_path,'simimatrix.png'), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap())
131 self.ild['simiclustermatrix'] = self.il.Add(wx.Image(os.path.join(self.parent.images_path,'simimatrix.png'), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap())
132 self.ild['proto'] = self.il.Add(wx.Image(os.path.join(self.parent.images_path,'proto.png'), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap())
133 self.SetImageList(self.il)
138 self.history = parent.history
139 self.h = self.history.history
140 self.root = self.AddRoot("Iramuteq")
142 if not(self.GetAGWWindowStyleFlag() & CT.TR_HIDE_ROOT):
143 self.SetPyData(self.root, None)
144 self.SetItemImage(self.root, 24, CT.TreeItemIcon_Normal)
145 self.SetItemImage(self.root, 13, CT.TreeItemIcon_Expanded)
147 self.textroot = self.AppendItem(self.root, _(u'Textual corpus'))
148 self.SetPyData(self.textroot, {'uuid': 'textroot'})
149 self.SetItemImage(self.textroot, imgtextroot, CT.TreeItemIcon_Normal)
150 self.SetItemImage(self.textroot, imgtextroot, CT.TreeItemIcon_Expanded)
152 for corpus in reversed(self.h) :
153 child = self.AppendItem(self.textroot, corpus['corpus_name'])
154 self.SetPyData(child, corpus)
155 self.SetItemImage(child, self.ild['corpus'], CT.TreeItemIcon_Normal)
156 self.SetItemImage(child, self.ild['corpus'], CT.TreeItemIcon_Expanded)
158 if 'analyses' in corpus :
159 for y in corpus['analyses'] :
160 last = self.AppendItem(child, y['name'], ct_type=0)
161 self.SetPyData(last, y)
162 if y['type'] in self.ild :
163 img = self.ild[y['type']]
166 self.SetItemImage(last, img, CT.TreeItemIcon_Normal)
167 self.SetItemImage(last, img, CT.TreeItemIcon_Expanded)
169 self.matroot = self.AppendItem(self.root, _(u'Matrix'))
170 self.SetPyData(self.matroot, {'uuid': 'matroot'})
171 self.SetItemImage(self.matroot, imgmatroot, CT.TreeItemIcon_Normal)
172 self.SetItemImage(self.matroot, imgmatroot, CT.TreeItemIcon_Expanded)
175 for matrix in reversed(self.history.matrix) :
176 if 'matrix_name' in matrix :
177 child = self.AppendItem(self.matroot, matrix['matrix_name'])
178 self.SetPyData(child, matrix)
179 self.SetItemImage(child, self.ild['matrix'], CT.TreeItemIcon_Normal)
180 self.SetItemImage(child, self.ild['matrix'], CT.TreeItemIcon_Expanded)
181 if 'analyses' in matrix :
182 for y in matrix['analyses'] :
183 last = self.AppendItem(child, y['name'], ct_type=0)
184 self.SetPyData(last, y)
185 if y['type'] in self.ild :
186 img = self.ild[y['type']]
189 self.SetItemImage(last, img, CT.TreeItemIcon_Normal)
190 self.SetItemImage(last, img, CT.TreeItemIcon_Expanded)
192 orphmat.append(matrix)
194 self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDClick)
195 #self.Bind(wx.EVT_IDLE, self.OnIdle)
197 self.eventdict = {'EVT_TREE_BEGIN_DRAG': self.OnBeginDrag, 'EVT_TREE_BEGIN_LABEL_EDIT': self.OnBeginEdit,
198 'EVT_TREE_BEGIN_RDRAG': self.OnBeginRDrag, 'EVT_TREE_DELETE_ITEM': self.OnDeleteItem,
199 'EVT_TREE_END_DRAG': self.OnEndDrag, 'EVT_TREE_END_LABEL_EDIT': self.OnEndEdit,
200 'EVT_TREE_ITEM_ACTIVATED': self.OnActivate, 'EVT_TREE_ITEM_CHECKED': self.OnItemCheck,
201 'EVT_TREE_ITEM_CHECKING': self.OnItemChecking, 'EVT_TREE_ITEM_COLLAPSED': self.OnItemCollapsed,
202 'EVT_TREE_ITEM_COLLAPSING': self.OnItemCollapsing, 'EVT_TREE_ITEM_EXPANDED': self.OnItemExpanded,
203 'EVT_TREE_ITEM_EXPANDING': self.OnItemExpanding, 'EVT_TREE_ITEM_GETTOOLTIP': self.OnToolTip,
204 'EVT_TREE_ITEM_MENU': self.OnItemMenu, 'EVT_TREE_ITEM_RIGHT_CLICK': self.OnRightDown,
205 'EVT_TREE_KEY_DOWN': self.OnKey, 'EVT_TREE_SEL_CHANGED': self.OnSelChanged,
206 'EVT_TREE_SEL_CHANGING': self.OnSelChanging, "EVT_TREE_ITEM_HYPERLINK": self.OnHyperLink}
208 mainframe = wx.GetTopLevelParent(self)
210 if not hasattr(mainframe, "leftpanel"):
211 #self.Bind(CT.EVT_TREE_ITEM_EXPANDED, self.OnItemExpanded)
212 #self.Bind(CT.EVT_TREE_ITEM_COLLAPSED, self.OnItemCollapsed)
213 self.Bind(CT.EVT_TREE_SEL_CHANGED, self.OnSelChanged)
214 self.Bind(CT.EVT_TREE_SEL_CHANGING, self.OnSelChanging)
215 self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
216 self.Bind(wx.EVT_RIGHT_UP, self.OnRightUp)
218 for combos in mainframe.treeevents:
219 self.BindEvents(combos)
221 if hasattr(mainframe, "leftpanel"):
222 self.ChangeStyle(mainframe.treestyles)
224 if not(self.GetAGWWindowStyleFlag() & CT.TR_HIDE_ROOT):
225 self.SelectItem(self.root)
226 self.Expand(self.root)
229 def BindEvents(self, choice, recreate=False):
231 value = choice.GetValue()
232 text = choice.GetLabel()
235 binder = self.eventdict[text]
238 if evt == "CT.EVT_TREE_BEGIN_RDRAG":
239 self.Bind(wx.EVT_RIGHT_DOWN, None)
240 self.Bind(wx.EVT_RIGHT_UP, None)
241 self.Bind(eval(evt), binder)
243 self.Bind(eval(evt), None)
244 if evt == "CT.EVT_TREE_BEGIN_RDRAG":
245 self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
246 self.Bind(wx.EVT_RIGHT_UP, self.OnRightUp)
249 def ChangeStyle(self, combos):
253 if combo.GetValue() == 1:
254 style = style | eval("CT." + combo.GetLabel())
256 if self.GetAGWWindowStyleFlag() != style:
257 self.SetAGWWindowStyleFlag(style)
260 def OnCompareItems(self, item1, item2):
262 t1 = self.GetItemText(item1)
263 t2 = self.GetItemText(item2)
274 def OnIdle(self, event):
278 # if self.gauge.IsEnabled() and self.gauge.IsShown():
279 # self.count = self.count + 1
281 # if self.count >= 50:
284 # self.gauge.SetValue(self.count)
292 def CloseItem(self, itemParent = None, uuid = None) :
293 if itemParent is None :
294 itemParent = self.root
295 child, cookie = self.GetFirstChild(itemParent)
297 pydata = self.GetPyData(child)
298 if pydata['uuid'] == uuid :
299 self.SetItemBold(child, False)
301 self.CloseItem(child, uuid)
302 child, cookie = self.GetNextChild(itemParent, cookie)
304 def GiveFocus(self, itemParent = None, uuid = None, bold = False) :
305 if itemParent is None :
306 itemParent = self.root
307 child, cookie = self.GetFirstChild(itemParent)
309 pydata = self.GetPyData(child)
310 if pydata['uuid'] == uuid :
311 self.SelectItem(child)
313 self.SetItemBold(child, True)
315 self.GiveFocus(child, uuid, bold)
316 child, cookie = self.GetNextChild(itemParent, cookie)
318 def IsInTree(self, itemParent = None, uuid = None) :
319 if itemParent is None :
320 itemParent = self.root
321 child, cookie = self.GetFirstChild(itemParent)
324 pydata = self.GetPyData(child)
325 if pydata['uuid'] == uuid :
327 self.GiveFocus(child, uuid)
328 child, cookie = self.GetNextChild(itemParent, cookie)
332 def OnRightDown(self, event):
334 pt = event.GetPosition()
335 item, flags = self.HitTest(pt)
339 #self.log.info("OnRightClick: %s, %s, %s" % (self.GetItemText(item), type(item), item.__class__) + "\n")
340 self.SelectItem(item)
343 def OnRightUp(self, event):
351 if not self.IsItemEnabled(item):
355 # Item Text Appearance
356 ishtml = self.IsItemHyperText(item)
357 back = self.GetItemBackgroundColour(item)
358 fore = self.GetItemTextColour(item)
359 isbold = self.IsBold(item)
360 font = self.GetItemFont(item)
363 normal = self.GetItemImage(item, CT.TreeItemIcon_Normal)
364 selected = self.GetItemImage(item, CT.TreeItemIcon_Selected)
365 expanded = self.GetItemImage(item, CT.TreeItemIcon_Expanded)
366 selexp = self.GetItemImage(item, CT.TreeItemIcon_SelectedExpanded)
368 # Enabling/Disabling Windows Associated To An Item
369 haswin = self.GetItemWindow(item)
371 # Enabling/Disabling Items
372 enabled = self.IsItemEnabled(item)
374 # Generic Item's Info
375 children = self.GetChildrenCount(item)
376 itemtype = self.GetItemType(item)
377 text = self.GetItemText(item)
378 pydata = self.GetPyData(item)
382 self.itemdict = {"ishtml": ishtml, "back": back, "fore": fore, "isbold": isbold,
383 "font": font, "normal": normal, "selected": selected, "expanded": expanded,
384 "selexp": selexp, "haswin": haswin, "children": children,
385 "itemtype": itemtype, "text": text, "pydata": pydata, "enabled": enabled}
387 if not item in [self.textroot, self.matroot] :
389 info = menu.Append(wx.ID_ANY, _(u"Informations").decode('utf8'))
390 rename = menu.Append(wx.ID_ANY, _(u"Rename").decode('utf8'))
391 menu.AppendSeparator()
393 if 'corpus_name' in pydata :
394 stat = menu.Append(wx.ID_ANY, _(u"Statistics").decode('utf8'))
395 spec = menu.Append(wx.ID_ANY, _(u"Specificities and CA").decode('utf8'))
396 classification = wx.Menu()
397 reinert = classification.Append(wx.ID_ANY, _(u"Reinert's Method").decode('utf8'))
398 #pam = classification.Append(wx.ID_ANY, u"Par matrice des distances")
399 menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), classification)
400 simi = menu.Append(wx.ID_ANY, _(u"Similarities Analysis").decode('utf8'))
401 wdc = menu.Append(wx.ID_ANY, _(u"WordCloud").decode('utf8'))
402 subcorpus = wx.Menu()
403 subcorpusfrommeta = subcorpus.Append(wx.ID_ANY, _(u'Sub corpus from metadata').decode('utf8'))
404 subcorpusfromtheme = subcorpus.Append(wx.ID_ANY, _(u'Sub corpus from thematic').decode('utf8'))
405 menu.AppendMenu(-1, _(u"Sub corpus").decode('utf8'), subcorpus)
406 menu.AppendSeparator()
407 self.Bind(wx.EVT_MENU, self.OnReinert, reinert)
408 #self.Bind(wx.EVT_MENU, self.OnPam, pam)
409 self.Bind(wx.EVT_MENU, self.OnStat, stat)
410 self.Bind(wx.EVT_MENU, self.OnSpec, spec)
411 self.Bind(wx.EVT_MENU, self.OnSimiTxt, simi)
412 self.Bind(wx.EVT_MENU, self.OnWordCloud, wdc)
413 self.Bind(wx.EVT_MENU, self.OnSubTextFromMeta, subcorpusfrommeta)
414 self.Bind(wx.EVT_MENU, self.OnSubTextFromTheme, subcorpusfromtheme)
415 elif 'matrix_name' in pydata :
416 for i in range(self.parent.matrix_menu.GetMenuItemCount()) :
417 item = self.parent.matrix_menu.FindItemByPosition(i)
418 itemid = item.GetId()
419 itemtext = item.GetText()
420 if item.IsSubMenu() :
422 for val in item.GetSubMenu().GetMenuItems() :
423 nmenu.Append(val.GetId(), val.GetText())
424 menu.AppendMenu(itemid, itemtext, nmenu)
426 menu.Append(itemid, itemtext)
428 splitfromvar = split.Append(-1, _(u"Split from variable").decode('utf8'))
429 menu.AppendMenu(-1, _(u"Split matrix").decode('utf8'), split)
430 self.Bind(wx.EVT_MENU, self.OnSplitFromVar, splitfromvar)
431 #print item, itemid, itemtext
432 #menu = self.parent.matrix_menu
433 #freq = menu.Append(wx.ID_ANY, _(u"Frequency").decode('utf8'))
434 #chi2 = menu.Append(wx.ID_ANY, _(u"Chi square").decode('utf8'))
435 #chdreinert = menu.Append(wx.ID_ANY, _(u"Reinert clustering").decode('utf8'))
436 #simi = menu.Append(wx.ID_ANY, _(u"Similarity analysis").decode('utf8'))
437 menu.AppendSeparator()
438 #self.Bind(wx.EVT_MENU, self.OnFreq, freq)
439 #self.Bind(wx.EVT_MENU, self.OnChiSquare, chi2)
440 #self.Bind(wx.EVT_MENU, self.OnSimiTab, simi)
441 #self.Bind(wx.EVT_MENU, self.OnCHDReinert, chdreinert)
442 elif pydata.get('type', False) == 'alceste' and pydata['uuid'] in self.parent.history.opened :
444 antipro = openmenu.Append(wx.ID_ANY, _(u"Antiprofiles").decode('utf8'))
445 menu.AppendMenu(wx.ID_ANY, _(u"Open ...").decode('utf8'), openmenu)
447 profsr = menu.Append(wx.ID_ANY, _(u"Repeated segments profiles").decode('utf8'))
448 profgram = menu.Append(wx.ID_ANY, _(u"POS profiles").decode('utf8'))
449 tgen = menu.Append(wx.ID_ANY, _(u"Tgen Editor").decode('utf8'))
450 computetgen = menu.Append(wx.ID_ANY, _(u"Compute Tgen").decode('utf8'))
451 export_corpus = menu.Append(wx.ID_ANY, _(u"Export corpus").decode('utf8'))
452 colored = menu.Append(wx.ID_ANY, _(u"Colored corpus").decode('utf8'))
453 navig = menu.Append(wx.ID_ANY, _(u"Navigator").decode('utf8'))
454 statclasse = menu.Append(wx.ID_ANY, _(u"Clusters statistics").decode('utf8'))
455 rapport = menu.Append(wx.ID_ANY, _(u"Report").decode('utf8'))
456 export_classes = menu.Append(wx.ID_ANY, _(u"Export clusters").decode('utf8'))
457 subcorpusfromcl = menu.Append(wx.ID_ANY, _(u"Sub corpus from clusters").decode('utf8'))
458 menu.AppendSeparator()
459 self.Bind(wx.EVT_MENU, self.OpenAntipro, antipro)
460 self.Bind(wx.EVT_MENU, self.OnProfSR, profsr)
461 self.Bind(wx.EVT_MENU, self.OnProfGram, profgram)
462 self.Bind(wx.EVT_MENU, self.OnTgenEditor, tgen)
463 self.Bind(wx.EVT_MENU, self.OnTgenCompute, computetgen)
464 self.Bind(wx.EVT_MENU, self.OnExportCorpus, export_corpus)
465 self.Bind(wx.EVT_MENU, self.OnColored, colored)
466 self.Bind(wx.EVT_MENU, self.OnNavig, navig)
467 self.Bind(wx.EVT_MENU, self.StatClasse, statclasse)
468 self.Bind(wx.EVT_MENU, self.OnRapport, rapport)
469 self.Bind(wx.EVT_MENU, self.OnExportClasses, export_classes)
470 self.Bind(wx.EVT_MENU, self.OnSubCorpusFromClusters, subcorpusfromcl)
471 elif pydata.get('type', False) == 'stat' and pydata['uuid'] in self.parent.history.opened :
472 export_dictionary = menu.Append(wx.ID_ANY, _(u"Export dictionary").decode('utf8'))
473 export_lems = menu.Append(wx.ID_ANY, _(u"Export lemma dictionary").decode('utf8'))
474 self.Bind(wx.EVT_MENU, self.OnExportDictionary, export_dictionary)
475 self.Bind(wx.EVT_MENU, self.OnExportLems, export_lems)
476 menu.AppendSeparator()
477 elif pydata.get('type', False) == 'spec' and pydata['uuid'] in self.parent.history.opened :
478 tgen = menu.Append(wx.ID_ANY, _(u"Tgen Editor").decode('utf8'))
479 computetgen = menu.Append(wx.ID_ANY, _(u"Compute Tgen").decode('utf8'))
480 self.Bind(wx.EVT_MENU, self.OnTgenEditor, tgen)
481 self.Bind(wx.EVT_MENU, self.OnTgenCompute, computetgen)
482 menu.AppendSeparator()
483 elif pydata.get('type', False) == 'reinertmatrix' and pydata['uuid'] in self.parent.history.opened :
485 antipro = openmenu.Append(wx.ID_ANY, _(u"antiprofiles").decode('utf8'))
486 rapport = menu.Append(wx.ID_ANY, _(u"Report").decode('utf8'))
487 menu.AppendMenu(wx.ID_ANY, _(u"Open ...").decode('utf8'), openmenu)
488 self.Bind(wx.EVT_MENU, self.OpenAntipro, antipro)
489 self.Bind(wx.EVT_MENU, self.OnRapport, rapport)
492 itemdelete = menu.Append(wx.ID_ANY, _(u"Delete from history").decode('utf8'))
493 #item11 = menu.Append(wx.ID_ANY, "Prepend An Item")
494 #item12 = menu.Append(wx.ID_ANY, "Append An Item")
496 #self.Bind(wx.EVT_MENU, self.OnItemBackground, item1)
497 #self.Bind(wx.EVT_MENU, self.OnItemForeground, item2)
498 #self.Bind(wx.EVT_MENU, self.OnItemBold, item3)
499 #self.Bind(wx.EVT_MENU, self.OnItemFont, item4)
500 #self.Bind(wx.EVT_MENU, self.OnItemHyperText, item5)
501 #self.Bind(wx.EVT_MENU, self.OnEnableWindow, item6)
502 #self.Bind(wx.EVT_MENU, self.OnDisableItem, item7)
503 #self.Bind(wx.EVT_MENU, self.OnItemIcons, item8)
504 self.Bind(wx.EVT_MENU, self.OnItemInfo, info)
505 self.Bind(wx.EVT_MENU, self.OnRename, rename)
506 self.Bind(wx.EVT_MENU, self.OnItemDelete, itemdelete)
507 #self.Bind(wx.EVT_MENU, self.OnItemPrepend, item11)
508 #self.Bind(wx.EVT_MENU, self.OnItemAppend, item12)
514 busy = wx.BusyInfo(_("Please wait...Reading corpus").decode('utf8'), self.parent)
516 if self.pydata['uuid'] in self.parent.history.openedcorpus :
517 corpus = copycorpus(self.parent.history.openedcorpus[self.pydata['uuid']])
518 elif 'corpus_name' in self.pydata :
519 corpus = Corpus(self.parent, parametres = DoConf(self.pydata['ira']).getoptions('corpus'), read = True)
521 cuuid = self.pydata['corpus']
522 if cuuid in self.parent.history.openedcorpus :
523 corpus = copycorpus(self.parent.history.openedcorpus[cuuid])
525 irapath = self.parent.history.corpus[cuuid]['ira']
526 corpus = Corpus(self.parent, parametres = DoConf(irapath).getoptions('corpus'), read = True)
531 if 'matrix_name' in self.pydata :
532 matrix = Tableau(self.parent, parametres = DoConf(self.pydata['ira']).getoptions('matrix'))
534 return copymatrix(matrix)
536 cuuid = self.pydata['matrix']
537 matrix = Tableau(self.parent, parametres = DoConf(self.history.matrixanalyse[cuuid]['ira']).getoptions('matrix'))
539 return copymatrix(matrix)
541 def OnSpec(self, evt) :
542 self.parent.OnTextSpec(evt, self.getcorpus())
544 def OnStat(self, evt) :
545 self.parent.OnTextStat(evt, self.getcorpus())
547 def OnReinert(self, evt) :
548 self.parent.OnTextReinert(evt, self.getcorpus())
550 def OnPam(self, evt) :
551 self.parent.OnPamSimple(evt, self.getcorpus())
553 def OnSimiTxt(self, evt) :
554 self.parent.OnSimiTxt(evt, self.getcorpus())
556 def OnWordCloud(self, evt) :
557 self.parent.OnWordCloud(evt, self.getcorpus())
559 def OnFreq(self, evt):
560 self.parent.OnFreq(evt, self.getmatrix())
562 def OnChiSquare(self, evt):
563 self.parent.OnChi2(evt, self.getmatrix())
565 def OnSimiTab(self, evt):
566 self.parent.OnSimiTab(evt, self.getmatrix())
568 def OnProto(self, evt):
569 self.parent.OnProto(evt, self.getmatrix())
571 def OnSplitFromVar(self, evt):
572 self.parent.OnSplitVar(evt, self.getmatrix())
574 def OnCHDReinert(self, evt):
575 self.parent.OnCHDReinert(evt, self.getmatrix())
577 def OnSubTextFromMeta(self, evt):
578 self.parent.OnSubText(self.getcorpus(), parametres = {'frommeta' : True})
580 def OnSubTextFromTheme(self, evt):
581 self.parent.OnSubText(self.getcorpus(), parametres = {'fromtheme' : True})
583 def OnProfSR(self, evt) :
584 ProfileSegment(self.parent, self.page.dictpathout, self.page.parametres, self.page.corpus)
586 def OnProfGram(self, evt) :
587 ProfilType(self.parent, self.page.corpus, self.page.parametres)
589 def OnExportCorpus(self, evt) :
590 dial = PrefExport(self, self.parent)
591 dial.fbb.SetValue(os.path.join(os.path.dirname(self.page.dictpathout['ira']), 'export_corpus.txt'))
592 dial.CenterOnParent()
593 res = dial.ShowModal()
595 if dial.radio_type.GetSelection() == 0 : alc = True
597 if dial.radio_lem.GetSelection() == 0 : lem = True
599 if self.page.parametres['classif_mode'] != 2 :
603 self.page.corpus.export_corpus_classes(dial.fbb.GetValue(), alc = alc, lem = lem, uci = uci)
606 dlg = wx.MessageDialog(self.parent, msg, u"Export", wx.OK | wx.NO_DEFAULT | wx.ICON_INFORMATION)
611 def OnColored(self, evt) :
612 dial = PrefSimpleFile(self, self.parent, **{'mask' : '*.html', 'title': _(u"Colored corpus").decode('utf8')})
613 dial.fbb.SetValue(os.path.join(os.path.dirname(self.page.dictpathout['ira']), 'corpus_couleur.html'))
614 dial.CenterOnParent()
615 res = dial.ShowModal()
617 fileout = dial.fbb.GetValue()
619 if self.page.parametres['classif_mode'] != 2 :
623 txt = self.page.corpus.make_colored_corpus(uci = uci)
624 with open(fileout, 'w') as f :
626 msg = ' !\n'.join([_(u"Done").decode('utf8'), _(u"Open in a web browser ?").decode('utf8')])
627 dlg = wx.MessageDialog(self.parent, msg, u"Corpus en couleur", wx.NO | wx.YES | wx.NO_DEFAULT | wx.ICON_QUESTION)
629 if dlg.ShowModal() == wx.ID_YES :
630 webbrowser.open(fileout)
633 def OnNavig(self, evt):
634 if 'FrameSearch' not in dir(self.page) :
635 self.page.FrameSearch = SearchFrame(self.parent, -1, _(u"Search ...").decode('utf8'), self.page.corpus)
636 self.page.FrameSearch.Show()
638 def StatClasse(self, evt):
639 dial = PrefSimpleFile(self, self.parent, **{'mask' : '*.csv', 'title': _(u"Clusters statistics").decode('utf8')})
640 dial.fbb.SetValue( os.path.join(os.path.dirname(self.page.dictpathout['ira']), 'stat_par_classe.csv'))
641 dial.CenterOnParent()
642 res = dial.ShowModal()
644 fileout = dial.fbb.GetValue()
646 self.page.corpus.get_stat_by_cluster(fileout)
648 dlg = wx.MessageDialog(self.parent, msg, _(u"Clusters statistics").decode('utf8'), wx.OK | wx.NO_DEFAULT | wx.ICON_INFORMATION)
650 if dlg.ShowModal() == wx.ID_OK :
653 def OpenAntipro(self, evt) :
655 for i in range(0, self.page.TabChdSim.GetPageCount()) :
656 page = self.page.TabChdSim.GetPage(i)
657 if self.page.TabChdSim.GetPageText(i) == _(u"Antiprofiles").decode('utf8') :
658 self.page.TabChdSim.SetSelection(i)
662 open_antiprofil(self.page, self.page.dictpathout['ANTIPRO_OUT'], self.parent.syscoding)
663 self.page.TabChdSim.SetSelection(self.page.TabChdSim.GetPageCount() - 1)
665 def OnRapport(self, evt) :
666 dial = PrefSimpleFile(self, self.parent, **{'mask' : '*.txt', 'title': _(u"Report").decode('utf8')})
667 dial.fbb.SetValue(self.page.dictpathout['rapport'])
668 dial.CenterOnParent()
669 res = dial.ShowModal()
671 fileout = dial.fbb.GetValue()
673 with open(fileout, 'w') as f :
674 f.write(self.page.debtext + '\n' + GetTxtProfile(self.page.DictProfile, self.page.cluster_size))
676 dlg = wx.MessageDialog(self.parent, msg, _(u"Report").decode('utf8'), wx.OK | wx.NO_DEFAULT | wx.ICON_INFORMATION)
683 def OnExportDictionary(self, evt) :
684 corpus = self.page.corpus
685 corpus.export_dictionary(self.page.pathout['dictionary.csv'], self.parent.syscoding)
686 log.info('export dictionary %s' % self.page.pathout['dictionary.csv'])
687 dial = wx.MessageDialog(self.parent, self.page.pathout['dictionary.csv'], 'Export', wx.OK)
691 def OnExportLems(self, evt) :
692 corpus = self.page.corpus
693 corpus.export_lems(self.page.pathout['lemmes.csv'], self.parent.syscoding)
694 log.info('export lemmes %s' % self.page.pathout['lemmes.csv'])
695 dial = wx.MessageDialog(self.parent, self.page.pathout['lemmes.csv'], 'Export', wx.OK)
699 def OnTgenEditor(self, evt):
700 corpus = self.page.corpus
701 tgenpath = os.path.join(self.page.parametres['pathout'], 'tgen.csv')
702 tgen = TGen(path = tgenpath, encoding = self.parent.syscoding)
703 if os.path.exists(tgenpath) :
705 if isinstance(evt, list) :
707 while 'tgen%i' %i in tgen.tgen :
709 tgenname = 'tgen%i' %i
710 tgen.tgen[tgenname] = evt
711 tgenframe = TGenFrame(self.parent, corpus, tgen)
713 if isinstance(evt, list) :
714 tgenframe.OnNewTgen(None, tgen = tgenname)
716 def OnTgenCompute(self, evt):
717 corpus = self.page.corpus
718 tgenpath = os.path.join(self.page.parametres['pathout'], 'tgen.csv')
719 if not os.path.exists(tgenpath) :
720 message = wx.MessageDialog(self.parent, _(u"No TGen yet !"), style = wx.ICON_EXCLAMATION | wx.OK)
724 self.page.parametres['tgenpath'] = tgenpath
725 tgen = TGen(path = tgenpath, encoding = self.parent.syscoding)
726 if self.page.parametres['type'] == 'spec' :
727 self.page.parametres['etoiles'] = self.page.etoiles
728 TgenSpec(self.parent, corpus, self.page.parametres)
729 elif self.page.parametres['type'] == 'alceste' :
730 TgenProf(self.parent, corpus, self.page.parametres, self.page.cluster_size)
731 TgenLayout(self.page)
733 def OnExportClasses(self, event):
734 corpus = self.page.corpus
735 if self.page.parametres['classif_mode'] != 2 :
739 busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self.parent)
741 for i in range(1, self.page.parametres['clnb'] + 1) :
742 corpus.export_classe(self.page.pathout['classe_%i_export.txt' % i], i, uci = uci)
744 dial = wx.MessageDialog(self, self.page.pathout['classe_x_export.txt'], u"Export", wx.OK|wx.ICON_INFORMATION)
748 def OnSubCorpusFromClusters(self, evt):
749 self.parent.OnSubText(self.getcorpus(), parametres = {'fromclusters' : True, 'clnb': self.page.parametres['clnb'], 'lc' : self.page.corpus.lc})
751 def OnRename(self, event):
752 pydata = self.itemdict['pydata']
753 if 'matrix_name' in pydata :
755 elif 'corpus_name' in pydata :
759 oldname = pydata[name]
760 dlg = wx.TextEntryDialog(self, "Please Enter The New Item Name", 'Item Naming', oldname)
761 if dlg.ShowModal() == wx.ID_OK:
762 newname = dlg.GetValue()
764 pydata[name] = newname
765 Totconf = DoConf(configfile=pydata['ira'])
766 conf = Totconf.getoptions()
768 Totconf.makeoptions(Totconf.getsections(), [conf])
769 self.history.update(pydata)
770 self.SetItemText(self.current, newname)
771 self.EnsureVisible(self.current)
773 def OnItemBackground(self, event):
775 colourdata = wx.ColourData()
776 colourdata.SetColour(self.itemdict["back"])
777 dlg = wx.ColourDialog(self, colourdata)
779 dlg.GetColourData().SetChooseFull(True)
781 if dlg.ShowModal() == wx.ID_OK:
782 data = dlg.GetColourData()
783 col1 = data.GetColour().Get()
784 self.SetItemBackgroundColour(self.current, col1)
788 def OnItemForeground(self, event):
790 colourdata = wx.ColourData()
791 colourdata.SetColour(self.itemdict["fore"])
792 dlg = wx.ColourDialog(self, colourdata)
794 dlg.GetColourData().SetChooseFull(True)
796 if dlg.ShowModal() == wx.ID_OK:
797 data = dlg.GetColourData()
798 col1 = data.GetColour().Get()
799 self.SetItemTextColour(self.current, col1)
803 def OnItemBold(self, event):
805 self.SetItemBold(self.current, not self.itemdict["isbold"])
808 def OnItemFont(self, event):
811 font = self.itemdict["font"]
814 font = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
816 data.SetInitialFont(font)
818 dlg = wx.FontDialog(self, data)
820 if dlg.ShowModal() == wx.ID_OK:
821 data = dlg.GetFontData()
822 font = data.GetChosenFont()
823 self.SetItemFont(self.current, font)
828 def OnItemHyperText(self, event):
830 self.SetItemHyperText(self.current, not self.itemdict["ishtml"])
833 def OnEnableWindow(self, event):
835 enable = self.GetItemWindowEnabled(self.current)
836 self.SetItemWindowEnabled(self.current, not enable)
839 def OnDisableItem(self, event):
841 self.EnableItem(self.current, False)
844 def OnItemIcons(self, event):
846 bitmaps = [self.itemdict["normal"], self.itemdict["selected"],
847 self.itemdict["expanded"], self.itemdict["selexp"]]
850 dlg = TreeIcons(self, -1, bitmaps=bitmaps)
855 def SetNewIcons(self, bitmaps):
857 self.SetItemImage(self.current, bitmaps[0], CT.TreeItemIcon_Normal)
858 self.SetItemImage(self.current, bitmaps[1], CT.TreeItemIcon_Selected)
859 self.SetItemImage(self.current, bitmaps[2], CT.TreeItemIcon_Expanded)
860 self.SetItemImage(self.current, bitmaps[3], CT.TreeItemIcon_SelectedExpanded)
863 def OnItemInfo(self, event):
865 itemtext = self.itemdict["text"]
866 numchildren = str(self.itemdict["children"])
867 itemtype = self.itemdict["itemtype"]
868 pydata = self.itemdict['pydata']
869 #if 'analyses' in pydata :
870 # toshow = dict([[val, pydata[val]] for val in pydata if val not in['analyses', 'isload']])
872 toshow = pydata['ira']
873 toshow = DoConf(toshow).getoptions()
874 txt = DoConf().totext(toshow)
875 parametres = [val.split('\t\t:') for val in txt.splitlines()]
881 itemtype = "CheckBox"
883 itemtype = "RadioButton"
885 dlg = InfoDialog(self, itemtext, parametres)
892 def OnItemDelete(self, event):
894 strs = "Are You Sure You Want To Delete Item " + self.GetItemText(self.current) + "?"
895 dlg = wx.MessageDialog(None, strs, 'Deleting Item', wx.OK | wx.CANCEL | wx.ICON_QUESTION)
897 if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
903 pydata = self.itemdict['pydata']
904 if 'corpus_name' in pydata :
905 self.history.delete(pydata, True)
907 self.history.delete(pydata)
908 self.DeleteChildren(self.current)
909 self.Delete(self.current)
914 def OnItemPrepend(self, event):
916 dlg = wx.TextEntryDialog(self, "Please Enter The New Item Name", 'Item Naming', 'Python')
918 if dlg.ShowModal() == wx.ID_OK:
919 newname = dlg.GetValue()
920 newitem = self.PrependItem(self.current, newname)
921 self.EnsureVisible(newitem)
925 def AddAnalyse(self, parametres, itemParent = None, bold = True) :
926 uuid = parametres.get('corpus', None)
927 if uuid is not None :
928 if itemParent is None :
929 itemParent = self.textroot
930 child, cookie = self.GetFirstChild(itemParent)
933 pydata = self.GetPyData(child)
934 if pydata['uuid'] == uuid :
937 self.GiveFocus(child, uuid)
938 child, cookie = self.GetNextChild(itemParent, cookie)
939 #item = self.AppendItem(child, parametres['name'])
940 if corpus is not None :
941 item = self.AppendItem(corpus, parametres['name'])
943 item = self.AppendItem(self.textroot, parametres['name'])
945 item = self.AppendItem(self.matroot, parametres['name'])
946 self.SetPyData(item, parametres)
947 if parametres['type'] in self.ild :
948 img = self.ild[parametres['type']]
951 self.SetItemImage(item, img, CT.TreeItemIcon_Normal)
952 self.SetItemImage(item, 13, CT.TreeItemIcon_Expanded)
953 self.SetItemBold(item, bold)
954 self.SelectItem(item)
956 def AddMatAnalyse(self, parametres, itemParent = None, bold = True) :
957 uuid = parametres.get('matrix', None)
958 if uuid is not None :
959 if itemParent is None :
960 itemParent = self.matroot
961 child, cookie = self.GetFirstChild(itemParent)
964 pydata = self.GetPyData(child)
965 if pydata['uuid'] == uuid :
968 self.GiveFocus(child, uuid)
969 child, cookie = self.GetNextChild(itemParent, cookie)
970 #item = self.AppendItem(child, parametres['name'])
971 if matrix is not None :
972 item = self.AppendItem(matrix, parametres['name'])
974 item = self.AppendItem(self.matroot, parametres['name'])
975 self.SetPyData(item, parametres)
976 if parametres['type'] in self.ild :
977 img = self.ild[parametres['type']]
980 self.SetItemImage(item, img, CT.TreeItemIcon_Normal)
981 self.SetItemImage(item, 13, CT.TreeItemIcon_Expanded)
982 self.SetItemBold(item, bold)
983 self.SelectItem(item)
985 def OnItemAppend(self, item, select = True):
986 if 'corpus_name' in item :
987 child = self.InsertItem(self.textroot, 0, item['corpus_name'])
989 child = self.InsertItem(self.matroot, 0, item['matrix_name'])
990 self.SetPyData(child, item)
991 if item['type'] in self.ild :
992 img = self.ild[item['type']]
995 self.SetItemImage(child, img, CT.TreeItemIcon_Normal)
996 self.SetItemImage(child, img, CT.TreeItemIcon_Expanded)
998 self.history.addtab(item)
999 self.SetItemBold(child, True)
1000 self.SelectItem(child)
1002 #dlg = wx.TextEntryDialog(self, "Please Enter The New Item Name", 'Item Naming', 'Python')
1004 #if dlg.ShowModal() == wx.ID_OK:
1005 # newname = dlg.GetValue()
1006 # newitem = self.AppendItem(self.current, newname)
1007 # self.EnsureVisible(newitem)
1013 def OnBeginEdit(self, event):
1015 #self.log.info("OnBeginEdit" + "\n")
1016 # show how to prevent edit...
1017 item = event.GetItem()
1018 if item and self.GetItemText(item) == "The Root Item":
1020 #self.log.info("You can't edit this one..." + "\n")
1022 # Lets just see what's visible of its children
1024 root = event.GetItem()
1025 (child, cookie) = self.GetFirstChild(root)
1028 #self.log.info("Child [%s] visible = %d" % (self.GetItemText(child), self.IsVisible(child)) + "\n")
1029 (child, cookie) = self.GetNextChild(root, cookie)
1034 def OnEndEdit(self, event):
1036 #self.log.info("OnEndEdit: %s %s" %(event.IsEditCancelled(), event.GetLabel()))
1037 # show how to reject edit, we'll not allow any digits
1038 for x in event.GetLabel():
1039 if x in string.digits:
1040 #self.log.info(", You can't enter digits..." + "\n")
1047 def OnLeftDClick(self, event):
1048 pt = event.GetPosition()
1049 item, flags = self.HitTest(pt)
1050 if item is not None :
1051 pydata = self.GetPyData(item)
1052 if pydata['uuid'] in self.parent.history.opened :
1053 for i in range(self.parent.nb.GetPageCount()) :
1054 page = self.parent.nb.GetPage(i)
1055 if 'parametres' in dir(page) :
1056 if page.parametres['uuid'] == pydata['uuid'] :
1057 self.parent.nb.SetSelection(i)
1059 elif pydata['uuid'] in ['textroot', 'matroot'] :
1062 if os.path.exists(pydata['ira']) :
1063 busy = wx.BusyInfo(_("Please wait..."), self.parent)
1066 OpenAnalyse(self.parent, pydata)
1068 self.SetItemBold(item, True)
1069 self.OnSelChanged(pydata = pydata)
1074 wx.MessageBox(_(u"This file does not exist : %s" % pydata['ira']).decode('utf8'), 'Information', wx.ICON_EXCLAMATION | wx.STAY_ON_TOP )
1075 #if item and (flags & CT.TREE_HITTEST_ONITEMLABEL):
1076 # if self.GetAGWWindowStyleFlag() & CT.TR_EDIT_LABELS:
1077 # self.log.info("OnLeftDClick: %s (manually starting label edit)"% self.GetItemText(item) + "\n")
1079 #self.EditLabel(item)
1081 # pydata = self.GetPyData(item)
1083 # self.log.info("OnLeftDClick: Cannot Start Manual Editing, Missing Style TR_EDIT_LABELS\n")
1088 def OnItemExpanded(self, event):
1090 item = event.GetItem()
1092 self.log.info("OnItemExpanded: %s" % self.GetItemText(item) + "\n")
1095 def OnItemExpanding(self, event):
1097 item = event.GetItem()
1099 self.log.info("OnItemExpanding: %s" % self.GetItemText(item) + "\n")
1104 def OnItemCollapsed(self, event):
1106 item = event.GetItem()
1108 self.log.info("OnItemCollapsed: %s" % self.GetItemText(item) + "\n")
1111 def OnItemCollapsing(self, event):
1113 item = event.GetItem()
1115 self.log.info("OnItemCollapsing: %s" % self.GetItemText(item) + "\n")
1120 def OnSelChanged(self, event = None, pydata = None):
1121 if event is not None :
1122 item = event.GetItem()
1123 pydata = self.GetPyData(item)
1125 if pydata is not None :
1126 if 'corpus_name' in pydata or 'corpus' in pydata :
1127 self.ira.ShowMenu('text', True)
1128 self.ira.ShowMenu('matrix', False)
1129 if 'matrix_name' in pydata or 'matrix' in pydata:
1130 self.ira.ShowMenu('text', False)
1131 self.ira.ShowMenu('matrix', True)
1132 self.pydata = pydata
1133 if pydata['uuid'] in self.parent.history.opened :
1134 for i in range(self.parent.nb.GetPageCount()) :
1135 self.page = self.parent.nb.GetPage(i)
1136 if 'parametres' in dir(self.page) :
1137 if self.page.parametres['uuid'] == pydata['uuid'] :
1138 self.parent.nb.SetSelection(i)
1140 if event is not None :
1144 def OnSelChanging(self, event):
1146 item = event.GetItem()
1147 olditem = event.GetOldItem()
1151 olditemtext = "None"
1153 olditemtext = self.GetItemText(olditem)
1154 #self.log.info("OnSelChanging: From %s" % olditemtext + " To %s" % self.GetItemText(item) + "\n")
1159 def OnBeginDrag(self, event):
1161 self.item = event.GetItem()
1163 self.log.info("Beginning Drag..." + "\n")
1168 def OnBeginRDrag(self, event):
1170 self.item = event.GetItem()
1172 self.log.info("Beginning Right Drag..." + "\n")
1177 def OnEndDrag(self, event):
1179 self.item = event.GetItem()
1181 self.log.info("Ending Drag!" + "\n")
1186 def OnDeleteItem(self, event):
1188 item = event.GetItem()
1193 self.log.info("Deleting Item: %s" % self.GetItemText(item) + "\n")
1197 def OnItemCheck(self, event):
1199 item = event.GetItem()
1200 self.log.info("Item " + self.GetItemText(item) + " Has Been Checked!\n")
1204 def OnItemChecking(self, event):
1206 item = event.GetItem()
1207 self.log.info("Item " + self.GetItemText(item) + " Is Being Checked...\n")
1211 def OnToolTip(self, event):
1213 item = event.GetItem()
1215 event.SetToolTip(wx.ToolTip(self.GetItemText(item)))
1218 def OnItemMenu(self, event):
1220 item = event.GetItem()
1222 self.log.info("OnItemMenu: %s" % self.GetItemText(item) + "\n")
1227 def OnKey(self, event):
1229 keycode = event.GetKeyCode()
1230 keyname = keyMap.get(keycode, None)
1232 if keycode == wx.WXK_BACK:
1233 self.log.info("OnKeyDown: HAHAHAHA! I Vetoed Your Backspace! HAHAHAHA\n")
1237 if "unicode" in wx.PlatformInfo:
1238 keycode = event.GetUnicodeKey()
1240 keycode = event.GetKeyCode()
1241 keyname = "\"" + unichr(event.GetUnicodeKey()) + "\""
1243 keyname = "Ctrl-%s" % chr(ord('A') + keycode-1)
1249 keyname = "Ctrl-%s" % chr(ord('A') + keycode-1)
1251 keyname = "\"%s\"" % chr(keycode)
1253 keyname = "unknown (%s)" % keycode
1255 self.log.info("OnKeyDown: You Pressed '" + keyname + "'\n")
1260 def OnActivate(self, event):
1263 self.log.info("OnActivate: %s" % self.GetItemText(self.item) + "\n")
1268 def OnHyperLink(self, event):
1270 item = event.GetItem()
1272 self.log.info("OnHyperLink: %s" % self.GetItemText(self.item) + "\n")
1275 def OnTextCtrl(self, event):
1277 char = chr(event.GetKeyCode())
1278 self.log.info("EDITING THE TEXTCTRL: You Wrote '" + char + \
1279 "' (KeyCode = " + str(event.GetKeyCode()) + ")\n")
1283 def OnComboBox(self, event):
1285 selection = event.GetEventObject().GetValue()
1286 self.log.info("CHOICE FROM COMBOBOX: You Chose '" + selection + "'\n")