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 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']
755 def OnItemBackground(self, event):
757 colourdata = wx.ColourData()
758 colourdata.SetColour(self.itemdict["back"])
759 dlg = wx.ColourDialog(self, colourdata)
761 dlg.GetColourData().SetChooseFull(True)
763 if dlg.ShowModal() == wx.ID_OK:
764 data = dlg.GetColourData()
765 col1 = data.GetColour().Get()
766 self.SetItemBackgroundColour(self.current, col1)
770 def OnItemForeground(self, event):
772 colourdata = wx.ColourData()
773 colourdata.SetColour(self.itemdict["fore"])
774 dlg = wx.ColourDialog(self, colourdata)
776 dlg.GetColourData().SetChooseFull(True)
778 if dlg.ShowModal() == wx.ID_OK:
779 data = dlg.GetColourData()
780 col1 = data.GetColour().Get()
781 self.SetItemTextColour(self.current, col1)
785 def OnItemBold(self, event):
787 self.SetItemBold(self.current, not self.itemdict["isbold"])
790 def OnItemFont(self, event):
793 font = self.itemdict["font"]
796 font = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
798 data.SetInitialFont(font)
800 dlg = wx.FontDialog(self, data)
802 if dlg.ShowModal() == wx.ID_OK:
803 data = dlg.GetFontData()
804 font = data.GetChosenFont()
805 self.SetItemFont(self.current, font)
810 def OnItemHyperText(self, event):
812 self.SetItemHyperText(self.current, not self.itemdict["ishtml"])
815 def OnEnableWindow(self, event):
817 enable = self.GetItemWindowEnabled(self.current)
818 self.SetItemWindowEnabled(self.current, not enable)
821 def OnDisableItem(self, event):
823 self.EnableItem(self.current, False)
826 def OnItemIcons(self, event):
828 bitmaps = [self.itemdict["normal"], self.itemdict["selected"],
829 self.itemdict["expanded"], self.itemdict["selexp"]]
832 dlg = TreeIcons(self, -1, bitmaps=bitmaps)
837 def SetNewIcons(self, bitmaps):
839 self.SetItemImage(self.current, bitmaps[0], CT.TreeItemIcon_Normal)
840 self.SetItemImage(self.current, bitmaps[1], CT.TreeItemIcon_Selected)
841 self.SetItemImage(self.current, bitmaps[2], CT.TreeItemIcon_Expanded)
842 self.SetItemImage(self.current, bitmaps[3], CT.TreeItemIcon_SelectedExpanded)
845 def OnItemInfo(self, event):
847 itemtext = self.itemdict["text"]
848 numchildren = str(self.itemdict["children"])
849 itemtype = self.itemdict["itemtype"]
850 pydata = self.itemdict['pydata']
851 #if 'analyses' in pydata :
852 # toshow = dict([[val, pydata[val]] for val in pydata if val not in['analyses', 'isload']])
854 toshow = pydata['ira']
855 toshow = DoConf(toshow).getoptions()
856 txt = DoConf().totext(toshow)
857 parametres = [val.split('\t\t:') for val in txt.splitlines()]
863 itemtype = "CheckBox"
865 itemtype = "RadioButton"
867 dlg = InfoDialog(self, itemtext, parametres)
874 def OnItemDelete(self, event):
876 strs = "Are You Sure You Want To Delete Item " + self.GetItemText(self.current) + "?"
877 dlg = wx.MessageDialog(None, strs, 'Deleting Item', wx.OK | wx.CANCEL | wx.ICON_QUESTION)
879 if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
885 pydata = self.itemdict['pydata']
886 if 'corpus_name' in pydata :
887 self.history.delete(pydata, True)
889 self.history.delete(pydata)
890 self.DeleteChildren(self.current)
891 self.Delete(self.current)
896 def OnItemPrepend(self, event):
898 dlg = wx.TextEntryDialog(self, "Please Enter The New Item Name", 'Item Naming', 'Python')
900 if dlg.ShowModal() == wx.ID_OK:
901 newname = dlg.GetValue()
902 newitem = self.PrependItem(self.current, newname)
903 self.EnsureVisible(newitem)
907 def AddAnalyse(self, parametres, itemParent = None, bold = True) :
908 uuid = parametres.get('corpus', None)
909 if uuid is not None :
910 if itemParent is None :
911 itemParent = self.textroot
912 child, cookie = self.GetFirstChild(itemParent)
915 pydata = self.GetPyData(child)
916 if pydata['uuid'] == uuid :
919 self.GiveFocus(child, uuid)
920 child, cookie = self.GetNextChild(itemParent, cookie)
921 #item = self.AppendItem(child, parametres['name'])
922 if corpus is not None :
923 item = self.AppendItem(corpus, parametres['name'])
925 item = self.AppendItem(self.textroot, parametres['name'])
927 item = self.AppendItem(self.matroot, parametres['name'])
928 self.SetPyData(item, parametres)
929 if parametres['type'] in self.ild :
930 img = self.ild[parametres['type']]
933 self.SetItemImage(item, img, CT.TreeItemIcon_Normal)
934 self.SetItemImage(item, 13, CT.TreeItemIcon_Expanded)
935 self.SetItemBold(item, bold)
936 self.SelectItem(item)
938 def AddMatAnalyse(self, parametres, itemParent = None, bold = True) :
939 uuid = parametres.get('matrix', None)
940 if uuid is not None :
941 if itemParent is None :
942 itemParent = self.matroot
943 child, cookie = self.GetFirstChild(itemParent)
946 pydata = self.GetPyData(child)
947 if pydata['uuid'] == uuid :
950 self.GiveFocus(child, uuid)
951 child, cookie = self.GetNextChild(itemParent, cookie)
952 #item = self.AppendItem(child, parametres['name'])
953 if matrix is not None :
954 item = self.AppendItem(matrix, parametres['name'])
956 item = self.AppendItem(self.matroot, parametres['name'])
957 self.SetPyData(item, parametres)
958 if parametres['type'] in self.ild :
959 img = self.ild[parametres['type']]
962 self.SetItemImage(item, img, CT.TreeItemIcon_Normal)
963 self.SetItemImage(item, 13, CT.TreeItemIcon_Expanded)
964 self.SetItemBold(item, bold)
965 self.SelectItem(item)
967 def OnItemAppend(self, item, select = True):
968 if 'corpus_name' in item :
969 child = self.InsertItem(self.textroot, 0, item['corpus_name'])
971 child = self.InsertItem(self.matroot, 0, item['matrix_name'])
972 self.SetPyData(child, item)
973 if item['type'] in self.ild :
974 img = self.ild[item['type']]
977 self.SetItemImage(child, img, CT.TreeItemIcon_Normal)
978 self.SetItemImage(child, img, CT.TreeItemIcon_Expanded)
980 self.history.addtab(item)
981 self.SetItemBold(child, True)
982 self.SelectItem(child)
984 #dlg = wx.TextEntryDialog(self, "Please Enter The New Item Name", 'Item Naming', 'Python')
986 #if dlg.ShowModal() == wx.ID_OK:
987 # newname = dlg.GetValue()
988 # newitem = self.AppendItem(self.current, newname)
989 # self.EnsureVisible(newitem)
995 def OnBeginEdit(self, event):
997 #self.log.info("OnBeginEdit" + "\n")
998 # show how to prevent edit...
999 item = event.GetItem()
1000 if item and self.GetItemText(item) == "The Root Item":
1002 #self.log.info("You can't edit this one..." + "\n")
1004 # Lets just see what's visible of its children
1006 root = event.GetItem()
1007 (child, cookie) = self.GetFirstChild(root)
1010 #self.log.info("Child [%s] visible = %d" % (self.GetItemText(child), self.IsVisible(child)) + "\n")
1011 (child, cookie) = self.GetNextChild(root, cookie)
1016 def OnEndEdit(self, event):
1018 #self.log.info("OnEndEdit: %s %s" %(event.IsEditCancelled(), event.GetLabel()))
1019 # show how to reject edit, we'll not allow any digits
1020 for x in event.GetLabel():
1021 if x in string.digits:
1022 #self.log.info(", You can't enter digits..." + "\n")
1029 def OnLeftDClick(self, event):
1030 pt = event.GetPosition()
1031 item, flags = self.HitTest(pt)
1032 if item is not None :
1033 pydata = self.GetPyData(item)
1034 if pydata['uuid'] in self.parent.history.opened :
1035 for i in range(self.parent.nb.GetPageCount()) :
1036 page = self.parent.nb.GetPage(i)
1037 if 'parametres' in dir(page) :
1038 if page.parametres['uuid'] == pydata['uuid'] :
1039 self.parent.nb.SetSelection(i)
1041 elif pydata['uuid'] in ['textroot', 'matroot'] :
1044 if os.path.exists(pydata['ira']) :
1045 busy = wx.BusyInfo(_("Please wait..."), self.parent)
1048 OpenAnalyse(self.parent, pydata)
1050 self.SetItemBold(item, True)
1051 self.OnSelChanged(pydata = pydata)
1056 wx.MessageBox(_(u"This file does not exist : %s" % pydata['ira']).decode('utf8'), 'Information', wx.ICON_EXCLAMATION | wx.STAY_ON_TOP )
1057 #if item and (flags & CT.TREE_HITTEST_ONITEMLABEL):
1058 # if self.GetAGWWindowStyleFlag() & CT.TR_EDIT_LABELS:
1059 # self.log.info("OnLeftDClick: %s (manually starting label edit)"% self.GetItemText(item) + "\n")
1061 #self.EditLabel(item)
1063 # pydata = self.GetPyData(item)
1065 # self.log.info("OnLeftDClick: Cannot Start Manual Editing, Missing Style TR_EDIT_LABELS\n")
1070 def OnItemExpanded(self, event):
1072 item = event.GetItem()
1074 self.log.info("OnItemExpanded: %s" % self.GetItemText(item) + "\n")
1077 def OnItemExpanding(self, event):
1079 item = event.GetItem()
1081 self.log.info("OnItemExpanding: %s" % self.GetItemText(item) + "\n")
1086 def OnItemCollapsed(self, event):
1088 item = event.GetItem()
1090 self.log.info("OnItemCollapsed: %s" % self.GetItemText(item) + "\n")
1093 def OnItemCollapsing(self, event):
1095 item = event.GetItem()
1097 self.log.info("OnItemCollapsing: %s" % self.GetItemText(item) + "\n")
1102 def OnSelChanged(self, event = None, pydata = None):
1103 if event is not None :
1104 item = event.GetItem()
1105 pydata = self.GetPyData(item)
1107 if pydata is not None :
1108 if 'corpus_name' in pydata or 'corpus' in pydata :
1109 self.ira.ShowMenu('text', True)
1110 self.ira.ShowMenu('matrix', False)
1111 if 'matrix_name' in pydata or 'matrix' in pydata:
1112 self.ira.ShowMenu('text', False)
1113 self.ira.ShowMenu('matrix', True)
1114 self.pydata = pydata
1115 if pydata['uuid'] in self.parent.history.opened :
1116 for i in range(self.parent.nb.GetPageCount()) :
1117 self.page = self.parent.nb.GetPage(i)
1118 if 'parametres' in dir(self.page) :
1119 if self.page.parametres['uuid'] == pydata['uuid'] :
1120 self.parent.nb.SetSelection(i)
1122 if event is not None :
1126 def OnSelChanging(self, event):
1128 item = event.GetItem()
1129 olditem = event.GetOldItem()
1133 olditemtext = "None"
1135 olditemtext = self.GetItemText(olditem)
1136 #self.log.info("OnSelChanging: From %s" % olditemtext + " To %s" % self.GetItemText(item) + "\n")
1141 def OnBeginDrag(self, event):
1143 self.item = event.GetItem()
1145 self.log.info("Beginning Drag..." + "\n")
1150 def OnBeginRDrag(self, event):
1152 self.item = event.GetItem()
1154 self.log.info("Beginning Right Drag..." + "\n")
1159 def OnEndDrag(self, event):
1161 self.item = event.GetItem()
1163 self.log.info("Ending Drag!" + "\n")
1168 def OnDeleteItem(self, event):
1170 item = event.GetItem()
1175 self.log.info("Deleting Item: %s" % self.GetItemText(item) + "\n")
1179 def OnItemCheck(self, event):
1181 item = event.GetItem()
1182 self.log.info("Item " + self.GetItemText(item) + " Has Been Checked!\n")
1186 def OnItemChecking(self, event):
1188 item = event.GetItem()
1189 self.log.info("Item " + self.GetItemText(item) + " Is Being Checked...\n")
1193 def OnToolTip(self, event):
1195 item = event.GetItem()
1197 event.SetToolTip(wx.ToolTip(self.GetItemText(item)))
1200 def OnItemMenu(self, event):
1202 item = event.GetItem()
1204 self.log.info("OnItemMenu: %s" % self.GetItemText(item) + "\n")
1209 def OnKey(self, event):
1211 keycode = event.GetKeyCode()
1212 keyname = keyMap.get(keycode, None)
1214 if keycode == wx.WXK_BACK:
1215 self.log.info("OnKeyDown: HAHAHAHA! I Vetoed Your Backspace! HAHAHAHA\n")
1219 if "unicode" in wx.PlatformInfo:
1220 keycode = event.GetUnicodeKey()
1222 keycode = event.GetKeyCode()
1223 keyname = "\"" + unichr(event.GetUnicodeKey()) + "\""
1225 keyname = "Ctrl-%s" % chr(ord('A') + keycode-1)
1231 keyname = "Ctrl-%s" % chr(ord('A') + keycode-1)
1233 keyname = "\"%s\"" % chr(keycode)
1235 keyname = "unknown (%s)" % keycode
1237 self.log.info("OnKeyDown: You Pressed '" + keyname + "'\n")
1242 def OnActivate(self, event):
1245 self.log.info("OnActivate: %s" % self.GetItemText(self.item) + "\n")
1250 def OnHyperLink(self, event):
1252 item = event.GetItem()
1254 self.log.info("OnHyperLink: %s" % self.GetItemText(self.item) + "\n")
1257 def OnTextCtrl(self, event):
1259 char = chr(event.GetKeyCode())
1260 self.log.info("EDITING THE TEXTCTRL: You Wrote '" + char + \
1261 "' (KeyCode = " + str(event.GetKeyCode()) + ")\n")
1265 def OnComboBox(self, event):
1267 selection = event.GetEventObject().GetValue()
1268 self.log.info("CHOICE FROM COMBOBOX: You Chose '" + selection + "'\n")