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
22 log = logging.getLogger('iramuteq.tree')
24 class InfoDialog ( wx.Dialog ):
26 def __init__( self, parent, txt, parametres ):
27 wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"Informations", pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.DEFAULT_DIALOG_STYLE )
28 if len(parametres) > 30 :
32 self.SetSizeHintsSz( wx.Size( 500,200 ), wx.DefaultSize )
34 bSizer1 = wx.BoxSizer( wx.VERTICAL )
36 self.m_panel2 = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
37 bSizer2 = wx.BoxSizer( wx.VERTICAL )
39 self.m_staticText4 = wx.StaticText( self.m_panel2, wx.ID_ANY, txt, wx.DefaultPosition, wx.DefaultSize, 0 )
40 self.m_staticText4.Wrap( -1 )
41 bSizer2.Add( self.m_staticText4, 0, wx.ALL, 5 )
44 self.m_panel2.SetSizer( bSizer2 )
45 self.m_panel2.Layout()
46 bSizer2.Fit( self.m_panel2 )
47 bSizer1.Add( self.m_panel2, 0, wx.EXPAND |wx.ALL, 5 )
49 self.m_panel1 = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
51 fgSizer1 = wx.FlexGridSizer( 0, nb, 0, 0 )
52 fgSizer1.SetFlexibleDirection( wx.BOTH )
53 fgSizer1.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED )
56 for val in parametres :
57 fgSizer1.Add( wx.StaticText( self.m_panel1, wx.ID_ANY, val[0], wx.DefaultPosition, wx.DefaultSize, 0 ), 0, wx.ALL, 0)
58 #fgSizer1.Add( wx.StaticText( self.m_panel1, wx.ID_ANY, val[1], wx.DefaultPosition, wx.DefaultSize, 0 ), 0, wx.ALL, 0)
59 txtctrl.append( wx.TextCtrl( self.m_panel1, wx.ID_ANY, val[1], wx.DefaultPosition, (450, 20), wx.TE_READONLY ) )
60 txtctrl[-1].SetBackgroundColour('#DDE8EB')
61 #wx.SystemSettings.GetColour(wx.SYS_COLOUR_GRAYTEXT))
62 fgSizer1.Add( txtctrl[-1], 0, wx.ALL|wx.EXPAND, 0)
63 #fgSizer1.Add( wx.StaticLine( self.m_panel1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ), 0, wx.EXPAND |wx.ALL, 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)
66 self.m_panel1.SetSizer( fgSizer1 )
67 self.m_panel1.Layout()
68 fgSizer1.Fit( self.m_panel1 )
69 bSizer1.Add( self.m_panel1, 0, wx.EXPAND|wx.ALL, 3 )
71 m_sdbSizer1 = wx.StdDialogButtonSizer()
72 self.m_sdbSizer1OK = wx.Button( self, wx.ID_OK )
73 m_sdbSizer1.AddButton( self.m_sdbSizer1OK )
74 m_sdbSizer1.Realize();
76 bSizer1.Add( m_sdbSizer1, 0, wx.EXPAND, 5 )
79 self.SetSizer( bSizer1 )
83 self.Centre( wx.BOTH )
89 class LeftTree(CT.CustomTreeCtrl):
91 def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition,
93 style=wx.SUNKEN_BORDER|wx.WANTS_CHARS,
94 agwStyle=CT.TR_HIDE_ROOT|CT.TR_HAS_BUTTONS|CT.TR_HAS_VARIABLE_ROW_HEIGHT):
96 CT.CustomTreeCtrl.__init__(self, parent, id, pos, size, style, agwStyle)
102 if data.startswith("TR_"):
103 treestyles.append(data)
104 elif data.startswith("EVT_"):
109 self.styles = treestyles
112 self.il = wx.ImageList(16, 16)
114 imgtextroot = self.il.Add(wx.Image(os.path.join(self.parent.images_path,'textroot.png'), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap())
115 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())
116 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())
117 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())
118 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())
119 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())
120 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())
121 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())
122 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())
123 imgmatroot = self.il.Add(wx.Image(os.path.join(self.parent.images_path,'matroot.png'), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap())
124 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())
125 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())
126 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())
127 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())
128 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())
129 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())
130 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())
131 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())
132 self.SetImageList(self.il)
137 self.history = parent.history
138 self.h = self.history.history
139 self.root = self.AddRoot("Iramuteq")
141 if not(self.GetAGWWindowStyleFlag() & CT.TR_HIDE_ROOT):
142 self.SetPyData(self.root, None)
143 self.SetItemImage(self.root, 24, CT.TreeItemIcon_Normal)
144 self.SetItemImage(self.root, 13, CT.TreeItemIcon_Expanded)
146 self.textroot = self.AppendItem(self.root, u'Corpus texte')
147 self.SetPyData(self.textroot, {'uuid': 'textroot'})
148 self.SetItemImage(self.textroot, imgtextroot, CT.TreeItemIcon_Normal)
149 self.SetItemImage(self.textroot, imgtextroot, CT.TreeItemIcon_Expanded)
151 for corpus in reversed(self.h) :
152 child = self.AppendItem(self.textroot, corpus['corpus_name'])
153 self.SetPyData(child, corpus)
154 self.SetItemImage(child, self.ild['corpus'], CT.TreeItemIcon_Normal)
155 self.SetItemImage(child, self.ild['corpus'], CT.TreeItemIcon_Expanded)
157 if 'analyses' in corpus :
158 for y in corpus['analyses'] :
159 last = self.AppendItem(child, y['name'], ct_type=0)
160 self.SetPyData(last, y)
161 if y['type'] in self.ild :
162 img = self.ild[y['type']]
165 self.SetItemImage(last, img, CT.TreeItemIcon_Normal)
166 self.SetItemImage(last, img, CT.TreeItemIcon_Expanded)
168 self.matroot = self.AppendItem(self.root, u'Matrices')
169 self.SetPyData(self.matroot, {'uuid': 'matroot'})
170 self.SetItemImage(self.matroot, imgmatroot, CT.TreeItemIcon_Normal)
171 self.SetItemImage(self.matroot, imgmatroot, CT.TreeItemIcon_Expanded)
174 for matrix in reversed(self.history.matrix) :
175 if 'matrix_name' in matrix :
176 child = self.AppendItem(self.matroot, matrix['matrix_name'])
177 self.SetPyData(child, matrix)
178 self.SetItemImage(child, self.ild['matrix'], CT.TreeItemIcon_Normal)
179 self.SetItemImage(child, self.ild['matrix'], CT.TreeItemIcon_Expanded)
180 if 'analyses' in matrix :
181 for y in matrix['analyses'] :
182 last = self.AppendItem(child, y['name'], ct_type=0)
183 self.SetPyData(last, y)
184 if y['type'] in self.ild :
185 img = self.ild[y['type']]
188 self.SetItemImage(last, img, CT.TreeItemIcon_Normal)
189 self.SetItemImage(last, img, CT.TreeItemIcon_Expanded)
191 orphmat.append(matrix)
193 self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDClick)
194 #self.Bind(wx.EVT_IDLE, self.OnIdle)
196 self.eventdict = {'EVT_TREE_BEGIN_DRAG': self.OnBeginDrag, 'EVT_TREE_BEGIN_LABEL_EDIT': self.OnBeginEdit,
197 'EVT_TREE_BEGIN_RDRAG': self.OnBeginRDrag, 'EVT_TREE_DELETE_ITEM': self.OnDeleteItem,
198 'EVT_TREE_END_DRAG': self.OnEndDrag, 'EVT_TREE_END_LABEL_EDIT': self.OnEndEdit,
199 'EVT_TREE_ITEM_ACTIVATED': self.OnActivate, 'EVT_TREE_ITEM_CHECKED': self.OnItemCheck,
200 'EVT_TREE_ITEM_CHECKING': self.OnItemChecking, 'EVT_TREE_ITEM_COLLAPSED': self.OnItemCollapsed,
201 'EVT_TREE_ITEM_COLLAPSING': self.OnItemCollapsing, 'EVT_TREE_ITEM_EXPANDED': self.OnItemExpanded,
202 'EVT_TREE_ITEM_EXPANDING': self.OnItemExpanding, 'EVT_TREE_ITEM_GETTOOLTIP': self.OnToolTip,
203 'EVT_TREE_ITEM_MENU': self.OnItemMenu, 'EVT_TREE_ITEM_RIGHT_CLICK': self.OnRightDown,
204 'EVT_TREE_KEY_DOWN': self.OnKey, 'EVT_TREE_SEL_CHANGED': self.OnSelChanged,
205 'EVT_TREE_SEL_CHANGING': self.OnSelChanging, "EVT_TREE_ITEM_HYPERLINK": self.OnHyperLink}
207 mainframe = wx.GetTopLevelParent(self)
209 if not hasattr(mainframe, "leftpanel"):
210 #self.Bind(CT.EVT_TREE_ITEM_EXPANDED, self.OnItemExpanded)
211 #self.Bind(CT.EVT_TREE_ITEM_COLLAPSED, self.OnItemCollapsed)
212 self.Bind(CT.EVT_TREE_SEL_CHANGED, self.OnSelChanged)
213 self.Bind(CT.EVT_TREE_SEL_CHANGING, self.OnSelChanging)
214 self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
215 self.Bind(wx.EVT_RIGHT_UP, self.OnRightUp)
217 for combos in mainframe.treeevents:
218 self.BindEvents(combos)
220 if hasattr(mainframe, "leftpanel"):
221 self.ChangeStyle(mainframe.treestyles)
223 if not(self.GetAGWWindowStyleFlag() & CT.TR_HIDE_ROOT):
224 self.SelectItem(self.root)
225 self.Expand(self.root)
228 def BindEvents(self, choice, recreate=False):
230 value = choice.GetValue()
231 text = choice.GetLabel()
234 binder = self.eventdict[text]
237 if evt == "CT.EVT_TREE_BEGIN_RDRAG":
238 self.Bind(wx.EVT_RIGHT_DOWN, None)
239 self.Bind(wx.EVT_RIGHT_UP, None)
240 self.Bind(eval(evt), binder)
242 self.Bind(eval(evt), None)
243 if evt == "CT.EVT_TREE_BEGIN_RDRAG":
244 self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
245 self.Bind(wx.EVT_RIGHT_UP, self.OnRightUp)
248 def ChangeStyle(self, combos):
252 if combo.GetValue() == 1:
253 style = style | eval("CT." + combo.GetLabel())
255 if self.GetAGWWindowStyleFlag() != style:
256 self.SetAGWWindowStyleFlag(style)
259 def OnCompareItems(self, item1, item2):
261 t1 = self.GetItemText(item1)
262 t2 = self.GetItemText(item2)
273 def OnIdle(self, event):
277 # if self.gauge.IsEnabled() and self.gauge.IsShown():
278 # self.count = self.count + 1
280 # if self.count >= 50:
283 # self.gauge.SetValue(self.count)
291 def CloseItem(self, itemParent = None, uuid = None) :
292 if itemParent is None :
293 itemParent = self.root
294 child, cookie = self.GetFirstChild(itemParent)
296 pydata = self.GetPyData(child)
297 if pydata['uuid'] == uuid :
298 self.SetItemBold(child, False)
300 self.CloseItem(child, uuid)
301 child, cookie = self.GetNextChild(itemParent, cookie)
303 def GiveFocus(self, itemParent = None, uuid = None, bold = False) :
304 if itemParent is None :
305 itemParent = self.root
306 child, cookie = self.GetFirstChild(itemParent)
308 pydata = self.GetPyData(child)
309 if pydata['uuid'] == uuid :
310 self.SelectItem(child)
312 self.SetItemBold(child, True)
314 self.GiveFocus(child, uuid, bold)
315 child, cookie = self.GetNextChild(itemParent, cookie)
317 def IsInTree(self, itemParent = None, uuid = None) :
318 if itemParent is None :
319 itemParent = self.root
320 child, cookie = self.GetFirstChild(itemParent)
323 pydata = self.GetPyData(child)
324 if pydata['uuid'] == uuid :
326 self.GiveFocus(child, uuid)
327 child, cookie = self.GetNextChild(itemParent, cookie)
331 def OnRightDown(self, event):
333 pt = event.GetPosition()
334 item, flags = self.HitTest(pt)
338 #self.log.info("OnRightClick: %s, %s, %s" % (self.GetItemText(item), type(item), item.__class__) + "\n")
339 self.SelectItem(item)
342 def OnRightUp(self, event):
350 if not self.IsItemEnabled(item):
354 # Item Text Appearance
355 ishtml = self.IsItemHyperText(item)
356 back = self.GetItemBackgroundColour(item)
357 fore = self.GetItemTextColour(item)
358 isbold = self.IsBold(item)
359 font = self.GetItemFont(item)
362 normal = self.GetItemImage(item, CT.TreeItemIcon_Normal)
363 selected = self.GetItemImage(item, CT.TreeItemIcon_Selected)
364 expanded = self.GetItemImage(item, CT.TreeItemIcon_Expanded)
365 selexp = self.GetItemImage(item, CT.TreeItemIcon_SelectedExpanded)
367 # Enabling/Disabling Windows Associated To An Item
368 haswin = self.GetItemWindow(item)
370 # Enabling/Disabling Items
371 enabled = self.IsItemEnabled(item)
373 # Generic Item's Info
374 children = self.GetChildrenCount(item)
375 itemtype = self.GetItemType(item)
376 text = self.GetItemText(item)
377 pydata = self.GetPyData(item)
381 self.itemdict = {"ishtml": ishtml, "back": back, "fore": fore, "isbold": isbold,
382 "font": font, "normal": normal, "selected": selected, "expanded": expanded,
383 "selexp": selexp, "haswin": haswin, "children": children,
384 "itemtype": itemtype, "text": text, "pydata": pydata, "enabled": enabled}
386 if not item in [self.textroot, self.matroot] :
388 info = menu.Append(wx.ID_ANY, _(u"Informations").decode('utf8'))
389 rename = menu.Append(wx.ID_ANY, _(u"Rename").decode('utf8'))
390 menu.AppendSeparator()
392 if 'corpus_name' in pydata :
393 stat = menu.Append(wx.ID_ANY, _(u"Statistics").decode('utf8'))
394 spec = menu.Append(wx.ID_ANY, _(u"Specificities and CA").decode('utf8'))
395 classification = wx.Menu()
396 reinert = classification.Append(wx.ID_ANY, _(u"Reinert method").decode('utf8'))
397 #pam = classification.Append(wx.ID_ANY, u"Par matrice des distances")
398 menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), classification)
399 simi = menu.Append(wx.ID_ANY, _(u"Similarities analysis").decode('utf8'))
400 wdc = menu.Append(wx.ID_ANY, _(u"Wordcloud").decode('utf8'))
401 subcorpus = wx.Menu()
402 subcorpusfrommeta = subcorpus.Append(wx.ID_ANY, _(u'Sub corpus from metadata').decode('utf8'))
403 subcorpusfromtheme = subcorpus.Append(wx.ID_ANY, _(u'Sub corpus from thematic').decode('utf8'))
404 menu.AppendMenu(-1, _(u"Sub corpus").decode('utf8'), subcorpus)
405 menu.AppendSeparator()
406 self.Bind(wx.EVT_MENU, self.OnReinert, reinert)
407 #self.Bind(wx.EVT_MENU, self.OnPam, pam)
408 self.Bind(wx.EVT_MENU, self.OnStat, stat)
409 self.Bind(wx.EVT_MENU, self.OnSpec, spec)
410 self.Bind(wx.EVT_MENU, self.OnSimiTxt, simi)
411 self.Bind(wx.EVT_MENU, self.OnWordCloud, wdc)
412 self.Bind(wx.EVT_MENU, self.OnSubTextFromMeta, subcorpusfrommeta)
413 self.Bind(wx.EVT_MENU, self.OnSubTextFromTheme, subcorpusfromtheme)
414 elif 'matrix_name' in pydata :
415 for i in range(self.parent.matrix_menu.GetMenuItemCount()) :
416 item = self.parent.matrix_menu.FindItemByPosition(i)
417 itemid = item.GetId()
418 itemtext = item.GetText()
419 if item.IsSubMenu() :
421 for val in item.GetSubMenu().GetMenuItems() :
422 nmenu.Append(val.GetId(), val.GetText())
423 menu.AppendMenu(itemid, itemtext, nmenu)
425 menu.Append(itemid, itemtext)
427 splitfromvar = split.Append(-1, _(u"Split from variable").decode('utf8'))
428 menu.AppendMenu(-1, _(u"Split matrix").decode('utf8'), split)
429 self.Bind(wx.EVT_MENU, self.OnSplitFromVar, splitfromvar)
430 #print item, itemid, itemtext
431 #menu = self.parent.matrix_menu
432 #freq = menu.Append(wx.ID_ANY, _(u"Frequency").decode('utf8'))
433 #chi2 = menu.Append(wx.ID_ANY, _(u"Chi square").decode('utf8'))
434 #chdreinert = menu.Append(wx.ID_ANY, _(u"Reinert clustering").decode('utf8'))
435 #simi = menu.Append(wx.ID_ANY, _(u"Similarity analysis").decode('utf8'))
436 menu.AppendSeparator()
437 #self.Bind(wx.EVT_MENU, self.OnFreq, freq)
438 #self.Bind(wx.EVT_MENU, self.OnChiSquare, chi2)
439 #self.Bind(wx.EVT_MENU, self.OnSimiTab, simi)
440 #self.Bind(wx.EVT_MENU, self.OnCHDReinert, chdreinert)
441 elif pydata.get('type', False) == 'alceste' and pydata['uuid'] in self.parent.history.opened :
443 antipro = openmenu.Append(wx.ID_ANY, _(u"Antiprofiles").decode('utf8'))
444 menu.AppendMenu(wx.ID_ANY, _(u"Open ...").decode('utf8'), openmenu)
446 profsr = menu.Append(wx.ID_ANY, _(u"Repeated segments profiles").decode('utf8'))
447 profgram = menu.Append(wx.ID_ANY, _(u"POS profiles").decode('utf8'))
448 export_corpus = menu.Append(wx.ID_ANY, _(u"Export corpus").decode('utf8'))
449 colored = menu.Append(wx.ID_ANY, _(u"Colored corpus").decode('utf8'))
450 navig = menu.Append(wx.ID_ANY, _(u"Navigator").decode('utf8'))
451 statclasse = menu.Append(wx.ID_ANY, _(u"Clusters statistics").decode('utf8'))
452 rapport = menu.Append(wx.ID_ANY, _(u"Report").decode('utf8'))
453 export_classes = menu.Append(wx.ID_ANY, _(u"Export clusters").decode('utf8'))
454 subcorpusfromcl = menu.Append(wx.ID_ANY, _(u"Sub corpus from clusters").decode('utf8'))
455 menu.AppendSeparator()
456 self.Bind(wx.EVT_MENU, self.OpenAntipro, antipro)
457 self.Bind(wx.EVT_MENU, self.OnProfSR, profsr)
458 self.Bind(wx.EVT_MENU, self.OnProfGram, profgram)
459 self.Bind(wx.EVT_MENU, self.OnExportCorpus, export_corpus)
460 self.Bind(wx.EVT_MENU, self.OnColored, colored)
461 self.Bind(wx.EVT_MENU, self.OnNavig, navig)
462 self.Bind(wx.EVT_MENU, self.StatClasse, statclasse)
463 self.Bind(wx.EVT_MENU, self.OnRapport, rapport)
464 self.Bind(wx.EVT_MENU, self.OnExportClasses, export_classes)
465 self.Bind(wx.EVT_MENU, self.OnSubCorpusFromClusters, subcorpusfromcl)
466 elif pydata.get('type', False) == 'stat' and pydata['uuid'] in self.parent.history.opened :
467 export_dictionary = menu.Append(wx.ID_ANY, _(u"Export dictionary").decode('utf8'))
468 export_lems = menu.Append(wx.ID_ANY, _(u"Export lemma dictionary").decode('utf8'))
469 self.Bind(wx.EVT_MENU, self.OnExportDictionary, export_dictionary)
470 self.Bind(wx.EVT_MENU, self.OnExportLems, export_lems)
471 menu.AppendSeparator()
472 elif pydata.get('type', False) == 'spec' and pydata['uuid'] in self.parent.history.opened :
473 tgen = menu.Append(wx.ID_ANY, _(u"Tgen Editor").decode('utf8'))
474 computetgen = menu.Append(wx.ID_ANY, _(u"Compute Tgen").decode('utf8'))
475 self.Bind(wx.EVT_MENU, self.OnTgenEditor, tgen)
476 self.Bind(wx.EVT_MENU, self.OnTgenCompute, computetgen)
477 menu.AppendSeparator()
478 elif pydata.get('type', False) == 'reinertmatrix' and pydata['uuid'] in self.parent.history.opened :
480 antipro = openmenu.Append(wx.ID_ANY, _(u"antiprofiles").decode('utf8'))
481 rapport = menu.Append(wx.ID_ANY, _(u"Report").decode('utf8'))
482 menu.AppendMenu(wx.ID_ANY, _(u"Open ...").decode('utf8'), openmenu)
483 self.Bind(wx.EVT_MENU, self.OpenAntipro, antipro)
484 self.Bind(wx.EVT_MENU, self.OnRapport, rapport)
487 itemdelete = menu.Append(wx.ID_ANY, _(u"Delete from history").decode('utf8'))
488 #item11 = menu.Append(wx.ID_ANY, "Prepend An Item")
489 #item12 = menu.Append(wx.ID_ANY, "Append An Item")
491 #self.Bind(wx.EVT_MENU, self.OnItemBackground, item1)
492 #self.Bind(wx.EVT_MENU, self.OnItemForeground, item2)
493 #self.Bind(wx.EVT_MENU, self.OnItemBold, item3)
494 #self.Bind(wx.EVT_MENU, self.OnItemFont, item4)
495 #self.Bind(wx.EVT_MENU, self.OnItemHyperText, item5)
496 #self.Bind(wx.EVT_MENU, self.OnEnableWindow, item6)
497 #self.Bind(wx.EVT_MENU, self.OnDisableItem, item7)
498 #self.Bind(wx.EVT_MENU, self.OnItemIcons, item8)
499 self.Bind(wx.EVT_MENU, self.OnItemInfo, info)
500 self.Bind(wx.EVT_MENU, self.OnRename, rename)
501 self.Bind(wx.EVT_MENU, self.OnItemDelete, itemdelete)
502 #self.Bind(wx.EVT_MENU, self.OnItemPrepend, item11)
503 #self.Bind(wx.EVT_MENU, self.OnItemAppend, item12)
509 busy = wx.BusyInfo(_("Please wait...Reading corpus").decode('utf8'), self.parent)
511 if self.pydata['uuid'] in self.parent.history.openedcorpus :
512 corpus = copycorpus(self.parent.history.openedcorpus[self.pydata['uuid']])
513 elif 'corpus_name' in self.pydata :
514 corpus = Corpus(self.parent, parametres = DoConf(self.pydata['ira']).getoptions('corpus'), read = True)
516 cuuid = self.pydata['corpus']
517 if cuuid in self.parent.history.openedcorpus :
518 corpus = copycorpus(self.parent.history.openedcorpus[cuuid])
520 irapath = self.parent.history.corpus[cuuid]['ira']
521 corpus = Corpus(self.parent, parametres = DoConf(irapath).getoptions('corpus'), read = True)
526 if 'matrix_name' in self.pydata :
527 matrix = Tableau(self.parent, parametres = DoConf(self.pydata['ira']).getoptions('matrix'))
529 return copymatrix(matrix)
531 cuuid = self.pydata['matrix']
532 matrix = Tableau(self.parent, parametres = DoConf(self.history.matrixanalyse[cuuid]['ira']).getoptions('matrix'))
534 return copymatrix(matrix)
536 def OnSpec(self, evt) :
537 self.parent.OnTextSpec(evt, self.getcorpus())
539 def OnStat(self, evt) :
540 self.parent.OnTextStat(evt, self.getcorpus())
542 def OnReinert(self, evt) :
543 self.parent.OnTextReinert(evt, self.getcorpus())
545 def OnPam(self, evt) :
546 self.parent.OnPamSimple(evt, self.getcorpus())
548 def OnSimiTxt(self, evt) :
549 self.parent.OnSimiTxt(evt, self.getcorpus())
551 def OnWordCloud(self, evt) :
552 self.parent.OnWordCloud(evt, self.getcorpus())
554 def OnFreq(self, evt):
555 self.parent.OnFreq(evt, self.getmatrix())
557 def OnChiSquare(self, evt):
558 self.parent.OnChi2(evt, self.getmatrix())
560 def OnSimiTab(self, evt):
561 self.parent.OnSimiTab(evt, self.getmatrix())
563 def OnProto(self, evt):
564 self.parent.OnProto(evt, self.getmatrix())
566 def OnSplitFromVar(self, evt):
567 self.parent.OnSplitVar(evt, self.getmatrix())
569 def OnCHDReinert(self, evt):
570 self.parent.OnCHDReinert(evt, self.getmatrix())
572 def OnSubTextFromMeta(self, evt):
573 self.parent.OnSubText(self.getcorpus(), parametres = {'frommeta' : True})
575 def OnSubTextFromTheme(self, evt):
576 self.parent.OnSubText(self.getcorpus(), parametres = {'fromtheme' : True})
578 def OnProfSR(self, evt) :
579 ProfileSegment(self.parent, self.page.dictpathout, self.page.parametres, self.page.corpus)
581 def OnProfGram(self, evt) :
582 ProfilType(self.parent, self.page.corpus, self.page.parametres)
584 def OnExportCorpus(self, evt) :
585 dial = PrefExport(self, self.parent)
586 dial.fbb.SetValue(os.path.join(os.path.dirname(self.page.dictpathout['ira']), 'export_corpus.txt'))
587 dial.CenterOnParent()
588 res = dial.ShowModal()
590 if dial.radio_type.GetSelection() == 0 : alc = True
592 if dial.radio_lem.GetSelection() == 0 : lem = True
594 if self.page.parametres['classif_mode'] != 2 :
598 self.page.corpus.export_corpus_classes(dial.fbb.GetValue(), alc = alc, lem = lem, uci = uci)
601 dlg = wx.MessageDialog(self.parent, msg, u"Export", wx.OK | wx.NO_DEFAULT | wx.ICON_INFORMATION)
606 def OnColored(self, evt) :
607 dial = PrefSimpleFile(self, self.parent, **{'mask' : '*.html', 'title': _(u"Colored corpus").decode('utf8')})
608 dial.fbb.SetValue(os.path.join(os.path.dirname(self.page.dictpathout['ira']), 'corpus_couleur.html'))
609 dial.CenterOnParent()
610 res = dial.ShowModal()
612 fileout = dial.fbb.GetValue()
614 if self.page.parametres['classif_mode'] != 2 :
618 txt = self.page.corpus.make_colored_corpus(uci = uci)
619 with open(fileout, 'w') as f :
621 msg = ' !\n'.join([_(u"Done").decode('utf8'), _(u"Open in a web browser ?").decode('utf8')])
622 dlg = wx.MessageDialog(self.parent, msg, u"Corpus en couleur", wx.NO | wx.YES | wx.NO_DEFAULT | wx.ICON_QUESTION)
624 if dlg.ShowModal() == wx.ID_YES :
625 webbrowser.open(fileout)
628 def OnNavig(self, evt):
629 if 'FrameSearch' not in dir(self.page) :
630 self.page.FrameSearch = SearchFrame(self.parent, -1, _(u"Search ...").decode('utf8'), self.page.corpus)
631 self.page.FrameSearch.Show()
633 def StatClasse(self, evt):
634 dial = PrefSimpleFile(self, self.parent, **{'mask' : '*.csv', 'title': _(u"Clusters statistics").decode('utf8')})
635 dial.fbb.SetValue( os.path.join(os.path.dirname(self.page.dictpathout['ira']), 'stat_par_classe.csv'))
636 dial.CenterOnParent()
637 res = dial.ShowModal()
639 fileout = dial.fbb.GetValue()
641 self.page.corpus.get_stat_by_cluster(fileout)
643 dlg = wx.MessageDialog(self.parent, msg, _(u"Clusters statistics").decode('utf8'), wx.OK | wx.NO_DEFAULT | wx.ICON_INFORMATION)
645 if dlg.ShowModal() == wx.ID_OK :
648 def OpenAntipro(self, evt) :
650 for i in range(0, self.page.TabChdSim.GetPageCount()) :
651 page = self.page.TabChdSim.GetPage(i)
652 if self.page.TabChdSim.GetPageText(i) == _(u"Antiprofiles").decode('utf8') :
653 self.page.TabChdSim.SetSelection(i)
657 open_antiprofil(self.page, self.page.dictpathout['ANTIPRO_OUT'], self.parent.syscoding)
658 self.page.TabChdSim.SetSelection(self.page.TabChdSim.GetPageCount() - 1)
660 def OnRapport(self, evt) :
661 dial = PrefSimpleFile(self, self.parent, **{'mask' : '*.txt', 'title': _(u"Report").decode('utf8')})
662 dial.fbb.SetValue(self.page.dictpathout['rapport'])
663 dial.CenterOnParent()
664 res = dial.ShowModal()
666 fileout = dial.fbb.GetValue()
668 with open(fileout, 'w') as f :
669 f.write(self.page.debtext + '\n' + GetTxtProfile(self.page.DictProfile, self.page.cluster_size))
671 dlg = wx.MessageDialog(self.parent, msg, _(u"Report").decode('utf8'), wx.OK | wx.NO_DEFAULT | wx.ICON_INFORMATION)
678 def OnExportDictionary(self, evt) :
679 corpus = self.page.corpus
680 corpus.export_dictionary(self.page.pathout['dictionary.csv'], self.parent.syscoding)
681 log.info('export dictionary %s' % self.page.pathout['dictionary.csv'])
682 dial = wx.MessageDialog(self.parent, self.page.pathout['dictionary.csv'], 'Export', wx.OK)
686 def OnExportLems(self, evt) :
687 corpus = self.page.corpus
688 corpus.export_lems(self.page.pathout['lemmes.csv'], self.parent.syscoding)
689 log.info('export lemmes %s' % self.page.pathout['lemmes.csv'])
690 dial = wx.MessageDialog(self.parent, self.page.pathout['lemmes.csv'], 'Export', wx.OK)
694 def OnTgenEditor(self, evt):
695 corpus = self.page.corpus
696 tgenpath = os.path.join(self.page.parametres['pathout'], 'tgen.csv')
697 tgen = TGen(path = tgenpath, encoding = self.parent.syscoding)
698 if os.path.exists(tgenpath) :
700 if isinstance(evt, list) :
702 while 'tgen%i' %i in tgen.tgen :
704 tgenname = 'tgen%i' %i
705 tgen.tgen[tgenname] = evt
706 tgenframe = TGenFrame(self.parent, corpus, tgen)
708 if isinstance(evt, list) :
709 tgenframe.OnNewTgen(None, tgen = tgenname)
711 def OnTgenCompute(self, evt):
712 corpus = self.page.corpus
713 tgenpath = os.path.join(self.page.parametres['pathout'], 'tgen.csv')
714 if not os.path.exists(tgenpath) :
715 message = wx.MessageDialog(self.parent, _(u"No TGen yet !"), style = wx.ICON_EXCLAMATION | wx.OK)
719 self.page.parametres['tgenpath'] = tgenpath
720 tgen = TGen(path = tgenpath, encoding = self.parent.syscoding)
721 self.page.parametres['etoiles'] = self.page.etoiles
722 TgenSpec(self.parent, corpus, self.page.parametres)
723 TgenLayout(self.page)
725 def OnExportClasses(self, event):
726 corpus = self.page.corpus
727 if self.page.parametres['classif_mode'] != 2 :
731 busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self.parent)
733 for i in range(1, self.page.parametres['clnb'] + 1) :
734 corpus.export_classe(self.page.pathout['classe_%i_export.txt' % i], i, uci = uci)
736 dial = wx.MessageDialog(self, self.page.pathout['classe_x_export.txt'], u"Export", wx.OK|wx.ICON_INFORMATION)
740 def OnSubCorpusFromClusters(self, evt):
741 self.parent.OnSubText(self.getcorpus(), parametres = {'fromclusters' : True, 'clnb': self.page.parametres['clnb'], 'lc' : self.page.corpus.lc})
743 def OnRename(self, event):
744 pydata = self.itemdict['pydata']
747 def OnItemBackground(self, event):
749 colourdata = wx.ColourData()
750 colourdata.SetColour(self.itemdict["back"])
751 dlg = wx.ColourDialog(self, colourdata)
753 dlg.GetColourData().SetChooseFull(True)
755 if dlg.ShowModal() == wx.ID_OK:
756 data = dlg.GetColourData()
757 col1 = data.GetColour().Get()
758 self.SetItemBackgroundColour(self.current, col1)
762 def OnItemForeground(self, event):
764 colourdata = wx.ColourData()
765 colourdata.SetColour(self.itemdict["fore"])
766 dlg = wx.ColourDialog(self, colourdata)
768 dlg.GetColourData().SetChooseFull(True)
770 if dlg.ShowModal() == wx.ID_OK:
771 data = dlg.GetColourData()
772 col1 = data.GetColour().Get()
773 self.SetItemTextColour(self.current, col1)
777 def OnItemBold(self, event):
779 self.SetItemBold(self.current, not self.itemdict["isbold"])
782 def OnItemFont(self, event):
785 font = self.itemdict["font"]
788 font = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
790 data.SetInitialFont(font)
792 dlg = wx.FontDialog(self, data)
794 if dlg.ShowModal() == wx.ID_OK:
795 data = dlg.GetFontData()
796 font = data.GetChosenFont()
797 self.SetItemFont(self.current, font)
802 def OnItemHyperText(self, event):
804 self.SetItemHyperText(self.current, not self.itemdict["ishtml"])
807 def OnEnableWindow(self, event):
809 enable = self.GetItemWindowEnabled(self.current)
810 self.SetItemWindowEnabled(self.current, not enable)
813 def OnDisableItem(self, event):
815 self.EnableItem(self.current, False)
818 def OnItemIcons(self, event):
820 bitmaps = [self.itemdict["normal"], self.itemdict["selected"],
821 self.itemdict["expanded"], self.itemdict["selexp"]]
824 dlg = TreeIcons(self, -1, bitmaps=bitmaps)
829 def SetNewIcons(self, bitmaps):
831 self.SetItemImage(self.current, bitmaps[0], CT.TreeItemIcon_Normal)
832 self.SetItemImage(self.current, bitmaps[1], CT.TreeItemIcon_Selected)
833 self.SetItemImage(self.current, bitmaps[2], CT.TreeItemIcon_Expanded)
834 self.SetItemImage(self.current, bitmaps[3], CT.TreeItemIcon_SelectedExpanded)
837 def OnItemInfo(self, event):
839 itemtext = self.itemdict["text"]
840 numchildren = str(self.itemdict["children"])
841 itemtype = self.itemdict["itemtype"]
842 pydata = self.itemdict['pydata']
843 #if 'analyses' in pydata :
844 # toshow = dict([[val, pydata[val]] for val in pydata if val not in['analyses', 'isload']])
846 toshow = pydata['ira']
847 toshow = DoConf(toshow).getoptions()
848 txt = DoConf().totext(toshow)
849 parametres = [val.split('\t\t:') for val in txt.splitlines()]
855 itemtype = "CheckBox"
857 itemtype = "RadioButton"
859 dlg = InfoDialog(self, itemtext, parametres)
866 def OnItemDelete(self, event):
868 strs = "Are You Sure You Want To Delete Item " + self.GetItemText(self.current) + "?"
869 dlg = wx.MessageDialog(None, strs, 'Deleting Item', wx.OK | wx.CANCEL | wx.ICON_QUESTION)
871 if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
877 pydata = self.itemdict['pydata']
878 if 'corpus_name' in pydata :
879 self.history.delete(pydata, True)
881 self.history.delete(pydata)
882 self.DeleteChildren(self.current)
883 self.Delete(self.current)
888 def OnItemPrepend(self, event):
890 dlg = wx.TextEntryDialog(self, "Please Enter The New Item Name", 'Item Naming', 'Python')
892 if dlg.ShowModal() == wx.ID_OK:
893 newname = dlg.GetValue()
894 newitem = self.PrependItem(self.current, newname)
895 self.EnsureVisible(newitem)
899 def AddAnalyse(self, parametres, itemParent = None, bold = True) :
900 uuid = parametres.get('corpus', None)
901 if uuid is not None :
902 if itemParent is None :
903 itemParent = self.textroot
904 child, cookie = self.GetFirstChild(itemParent)
907 pydata = self.GetPyData(child)
908 if pydata['uuid'] == uuid :
911 self.GiveFocus(child, uuid)
912 child, cookie = self.GetNextChild(itemParent, cookie)
913 #item = self.AppendItem(child, parametres['name'])
914 if corpus is not None :
915 item = self.AppendItem(corpus, parametres['name'])
917 item = self.AppendItem(self.textroot, parametres['name'])
919 item = self.AppendItem(self.matroot, parametres['name'])
920 self.SetPyData(item, parametres)
921 if parametres['type'] in self.ild :
922 img = self.ild[parametres['type']]
925 self.SetItemImage(item, img, CT.TreeItemIcon_Normal)
926 self.SetItemImage(item, 13, CT.TreeItemIcon_Expanded)
927 self.SetItemBold(item, bold)
928 self.SelectItem(item)
930 def AddMatAnalyse(self, parametres, itemParent = None, bold = True) :
931 uuid = parametres.get('matrix', None)
932 if uuid is not None :
933 if itemParent is None :
934 itemParent = self.matroot
935 child, cookie = self.GetFirstChild(itemParent)
938 pydata = self.GetPyData(child)
939 if pydata['uuid'] == uuid :
942 self.GiveFocus(child, uuid)
943 child, cookie = self.GetNextChild(itemParent, cookie)
944 #item = self.AppendItem(child, parametres['name'])
945 if matrix is not None :
946 item = self.AppendItem(matrix, parametres['name'])
948 item = self.AppendItem(self.matroot, parametres['name'])
949 self.SetPyData(item, parametres)
950 if parametres['type'] in self.ild :
951 img = self.ild[parametres['type']]
954 self.SetItemImage(item, img, CT.TreeItemIcon_Normal)
955 self.SetItemImage(item, 13, CT.TreeItemIcon_Expanded)
956 self.SetItemBold(item, bold)
957 self.SelectItem(item)
959 def OnItemAppend(self, item, select = True):
960 if 'corpus_name' in item :
961 child = self.InsertItem(self.textroot, 0, item['corpus_name'])
963 child = self.InsertItem(self.matroot, 0, item['matrix_name'])
964 self.SetPyData(child, item)
965 if item['type'] in self.ild :
966 img = self.ild[item['type']]
969 self.SetItemImage(child, img, CT.TreeItemIcon_Normal)
970 self.SetItemImage(child, img, CT.TreeItemIcon_Expanded)
972 self.history.addtab(item)
973 self.SetItemBold(child, True)
974 self.SelectItem(child)
976 #dlg = wx.TextEntryDialog(self, "Please Enter The New Item Name", 'Item Naming', 'Python')
978 #if dlg.ShowModal() == wx.ID_OK:
979 # newname = dlg.GetValue()
980 # newitem = self.AppendItem(self.current, newname)
981 # self.EnsureVisible(newitem)
987 def OnBeginEdit(self, event):
989 #self.log.info("OnBeginEdit" + "\n")
990 # show how to prevent edit...
991 item = event.GetItem()
992 if item and self.GetItemText(item) == "The Root Item":
994 #self.log.info("You can't edit this one..." + "\n")
996 # Lets just see what's visible of its children
998 root = event.GetItem()
999 (child, cookie) = self.GetFirstChild(root)
1002 #self.log.info("Child [%s] visible = %d" % (self.GetItemText(child), self.IsVisible(child)) + "\n")
1003 (child, cookie) = self.GetNextChild(root, cookie)
1008 def OnEndEdit(self, event):
1010 #self.log.info("OnEndEdit: %s %s" %(event.IsEditCancelled(), event.GetLabel()))
1011 # show how to reject edit, we'll not allow any digits
1012 for x in event.GetLabel():
1013 if x in string.digits:
1014 #self.log.info(", You can't enter digits..." + "\n")
1021 def OnLeftDClick(self, event):
1022 pt = event.GetPosition()
1023 item, flags = self.HitTest(pt)
1024 if item is not None :
1025 pydata = self.GetPyData(item)
1026 if pydata['uuid'] in self.parent.history.opened :
1027 for i in range(self.parent.nb.GetPageCount()) :
1028 page = self.parent.nb.GetPage(i)
1029 if 'parametres' in dir(page) :
1030 if page.parametres['uuid'] == pydata['uuid'] :
1031 self.parent.nb.SetSelection(i)
1033 elif pydata['uuid'] in ['textroot', 'matroot'] :
1036 if os.path.exists(pydata['ira']) :
1037 busy = wx.BusyInfo(_("Please wait..."), self.parent)
1040 OpenAnalyse(self.parent, pydata)
1042 self.SetItemBold(item, True)
1043 self.OnSelChanged(pydata = pydata)
1048 wx.MessageBox(_(u"This file does not exist : %s" % pydata['ira']).decode('utf8'), 'Information', wx.ICON_EXCLAMATION | wx.STAY_ON_TOP )
1049 #if item and (flags & CT.TREE_HITTEST_ONITEMLABEL):
1050 # if self.GetAGWWindowStyleFlag() & CT.TR_EDIT_LABELS:
1051 # self.log.info("OnLeftDClick: %s (manually starting label edit)"% self.GetItemText(item) + "\n")
1053 #self.EditLabel(item)
1055 # pydata = self.GetPyData(item)
1057 # self.log.info("OnLeftDClick: Cannot Start Manual Editing, Missing Style TR_EDIT_LABELS\n")
1062 def OnItemExpanded(self, event):
1064 item = event.GetItem()
1066 self.log.info("OnItemExpanded: %s" % self.GetItemText(item) + "\n")
1069 def OnItemExpanding(self, event):
1071 item = event.GetItem()
1073 self.log.info("OnItemExpanding: %s" % self.GetItemText(item) + "\n")
1078 def OnItemCollapsed(self, event):
1080 item = event.GetItem()
1082 self.log.info("OnItemCollapsed: %s" % self.GetItemText(item) + "\n")
1085 def OnItemCollapsing(self, event):
1087 item = event.GetItem()
1089 self.log.info("OnItemCollapsing: %s" % self.GetItemText(item) + "\n")
1094 def OnSelChanged(self, event = None, pydata = None):
1095 if event is not None :
1096 item = event.GetItem()
1097 pydata = self.GetPyData(item)
1099 if pydata is not None :
1100 if 'corpus_name' in pydata or 'corpus' in pydata :
1101 self.ira.ShowMenu('text', True)
1102 self.ira.ShowMenu('matrix', False)
1103 if 'matrix_name' in pydata or 'matrix' in pydata:
1104 self.ira.ShowMenu('text', False)
1105 self.ira.ShowMenu('matrix', True)
1106 self.pydata = pydata
1107 if pydata['uuid'] in self.parent.history.opened :
1108 for i in range(self.parent.nb.GetPageCount()) :
1109 self.page = self.parent.nb.GetPage(i)
1110 if 'parametres' in dir(self.page) :
1111 if self.page.parametres['uuid'] == pydata['uuid'] :
1112 self.parent.nb.SetSelection(i)
1114 if event is not None :
1118 def OnSelChanging(self, event):
1120 item = event.GetItem()
1121 olditem = event.GetOldItem()
1125 olditemtext = "None"
1127 olditemtext = self.GetItemText(olditem)
1128 #self.log.info("OnSelChanging: From %s" % olditemtext + " To %s" % self.GetItemText(item) + "\n")
1133 def OnBeginDrag(self, event):
1135 self.item = event.GetItem()
1137 self.log.info("Beginning Drag..." + "\n")
1142 def OnBeginRDrag(self, event):
1144 self.item = event.GetItem()
1146 self.log.info("Beginning Right Drag..." + "\n")
1151 def OnEndDrag(self, event):
1153 self.item = event.GetItem()
1155 self.log.info("Ending Drag!" + "\n")
1160 def OnDeleteItem(self, event):
1162 item = event.GetItem()
1167 self.log.info("Deleting Item: %s" % self.GetItemText(item) + "\n")
1171 def OnItemCheck(self, event):
1173 item = event.GetItem()
1174 self.log.info("Item " + self.GetItemText(item) + " Has Been Checked!\n")
1178 def OnItemChecking(self, event):
1180 item = event.GetItem()
1181 self.log.info("Item " + self.GetItemText(item) + " Is Being Checked...\n")
1185 def OnToolTip(self, event):
1187 item = event.GetItem()
1189 event.SetToolTip(wx.ToolTip(self.GetItemText(item)))
1192 def OnItemMenu(self, event):
1194 item = event.GetItem()
1196 self.log.info("OnItemMenu: %s" % self.GetItemText(item) + "\n")
1201 def OnKey(self, event):
1203 keycode = event.GetKeyCode()
1204 keyname = keyMap.get(keycode, None)
1206 if keycode == wx.WXK_BACK:
1207 self.log.info("OnKeyDown: HAHAHAHA! I Vetoed Your Backspace! HAHAHAHA\n")
1211 if "unicode" in wx.PlatformInfo:
1212 keycode = event.GetUnicodeKey()
1214 keycode = event.GetKeyCode()
1215 keyname = "\"" + unichr(event.GetUnicodeKey()) + "\""
1217 keyname = "Ctrl-%s" % chr(ord('A') + keycode-1)
1223 keyname = "Ctrl-%s" % chr(ord('A') + keycode-1)
1225 keyname = "\"%s\"" % chr(keycode)
1227 keyname = "unknown (%s)" % keycode
1229 self.log.info("OnKeyDown: You Pressed '" + keyname + "'\n")
1234 def OnActivate(self, event):
1237 self.log.info("OnActivate: %s" % self.GetItemText(self.item) + "\n")
1242 def OnHyperLink(self, event):
1244 item = event.GetItem()
1246 self.log.info("OnHyperLink: %s" % self.GetItemText(self.item) + "\n")
1249 def OnTextCtrl(self, event):
1251 char = chr(event.GetKeyCode())
1252 self.log.info("EDITING THE TEXTCTRL: You Wrote '" + char + \
1253 "' (KeyCode = " + str(event.GetKeyCode()) + ")\n")
1257 def OnComboBox(self, event):
1259 selection = event.GetEventObject().GetValue()
1260 self.log.info("CHOICE FROM COMBOBOX: You Chose '" + selection + "'\n")