2 # -*- coding: utf-8 -*-
3 #Author: Pierre Ratinaud
4 #Copyright (c) 2012, Pierre Ratinaud
8 import wx.lib.agw.customtreectrl as CT
10 from openanalyse import OpenAnalyse
11 from corpusNG import Corpus, copycorpus
12 from functions import DoConf
15 log = logging.getLogger('iramuteq.tree')
16 #from agw import customtreectrl as CT
18 class LeftTree(CT.CustomTreeCtrl):
20 def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition,
22 style=wx.SUNKEN_BORDER|wx.WANTS_CHARS,
23 agwStyle=CT.TR_HAS_BUTTONS|CT.TR_HAS_VARIABLE_ROW_HEIGHT):
25 CT.CustomTreeCtrl.__init__(self, parent, id, pos, size, style, agwStyle)
31 if data.startswith("TR_"):
32 treestyles.append(data)
33 elif data.startswith("EVT_"):
37 self.styles = treestyles
40 il = wx.ImageList(16, 16)
42 # for items in ArtIDs[1:-1]:
43 # bmp = wx.ArtProvider_GetBitmap(eval(items), wx.ART_TOOLBAR, (16, 16))
46 # smileidx = il.Add(images.Smiles.GetBitmap())
47 # numicons = il.GetImageCount()
49 self.AssignImageList(il)
53 # NOTE: For some reason tree items have to have a data object in
54 # order to be sorted. Since our compare just uses the labels
55 # we don't need any real data, so we'll just use None below for
57 self.history = parent.history
58 self.h = self.history.history
59 self.root = self.AddRoot("Iramuteq")
61 if not(self.GetAGWWindowStyleFlag() & CT.TR_HIDE_ROOT):
62 self.SetPyData(self.root, None)
63 self.SetItemImage(self.root, 24, CT.TreeItemIcon_Normal)
64 self.SetItemImage(self.root, 13, CT.TreeItemIcon_Expanded)
66 #textctrl = wx.TextCtrl(self, -1, "I Am A Simple\nMultiline wx.TexCtrl", style=wx.TE_MULTILINE)
67 #self.gauge = wx.Gauge(self, -1, 50, style=wx.GA_HORIZONTAL|wx.GA_SMOOTH)
68 #self.gauge.SetValue(0)
69 #combobox = wx.ComboBox(self, -1, choices=["That", "Was", "A", "Nice", "Holyday!"], style=wx.CB_READONLY|wx.CB_DROPDOWN)
71 #textctrl.Bind(wx.EVT_CHAR, self.OnTextCtrl)
72 #combobox.Bind(wx.EVT_COMBOBOX, self.OnComboBox)
73 #lenArtIds = len(ArtIDs) - 2
74 for x in range(len(self.h)) :
75 if 'corpus_name' in self.h[self.history.order[x]] :
79 child = self.AppendItem(self.root, self.h[self.history.order[x]][key])
81 # child = self.AppendItem(self.root, "Item %d" % x + "\nHello World\nHappy wxPython-ing!")
82 # self.SetItemBold(child, True)
84 # child = self.AppendItem(self.root, "Item %d" % x)
85 self.SetPyData(child, self.h[self.history.order[x]])
86 self.SetItemImage(child, 24, CT.TreeItemIcon_Normal)
87 self.SetItemImage(child, 13, CT.TreeItemIcon_Expanded)
89 #if random.randint(0, 3) == 0:
90 # self.SetItemLeftImage(child, random.randint(0, lenArtIds))
93 # if y == 0 and x == 1:
94 # last = self.AppendItem(child, "item %d-%s" % (x, chr(ord("a")+y)), ct_type=2, wnd=self.gauge)
95 # elif y == 1 and x == 2:
96 # last = self.AppendItem(child, "Item %d-%s" % (x, chr(ord("a")+y)), ct_type=1, wnd=textctrl)
97 # if random.randint(0, 3) == 1:
98 # self.SetItem3State(last, True)
101 # last = self.AppendItem(child, "item %d-%s" % (x, chr(ord("a")+y)))
102 # elif y == 4 and x == 1:
103 # last = self.AppendItem(child, "item %d-%s" % (x, chr(ord("a")+y)), wnd=combobox)
105 if 'corpus_name' in self.h[self.history.order[x]] :
106 if 'analyses' in self.h[self.history.order[x]] :
107 for y in self.h[self.history.order[x]]['analyses'] :
108 last = self.AppendItem(child, y['name'], ct_type=0)
110 self.SetPyData(last, y)
111 self.SetItemImage(last, 24, CT.TreeItemIcon_Normal)
112 self.SetItemImage(last, 13, CT.TreeItemIcon_Expanded)
114 # if random.randint(0, 3) == 0:
115 # self.SetItemLeftImage(last, random.randint(0, lenArtIds))
117 #for z in range(len(self.history[x]) - 1):
120 # item = self.AppendItem(last, "item %d-%s-%d" % (x, chr(ord("a")+y), z), ct_type=0)
121 # #if random.randint(0, 3) == 1:
122 # # self.SetItem3State(item, True)
124 # item = self.AppendItem(last, "item %d-%s-%d" % (x, chr(ord("a")+y), z), ct_type=0)
126 # item = self.AppendItem(last, "item %d-%s-%d" % (x, chr(ord("a")+y), z))
127 # #self.SetItemHyperText(item, True)
128 # self.SetPyData(item, None)
129 # self.SetItemImage(item, 28, CT.TreeItemIcon_Normal)
130 # self.SetItemImage(item, 28, CT.TreeItemIcon_Selected)
132 # if random.randint(0, 3) == 0:
133 # self.SetItemLeftImage(item, random.randint(0, lenArtIds))
135 self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDClick)
136 #self.Bind(wx.EVT_IDLE, self.OnIdle)
138 self.eventdict = {'EVT_TREE_BEGIN_DRAG': self.OnBeginDrag, 'EVT_TREE_BEGIN_LABEL_EDIT': self.OnBeginEdit,
139 'EVT_TREE_BEGIN_RDRAG': self.OnBeginRDrag, 'EVT_TREE_DELETE_ITEM': self.OnDeleteItem,
140 'EVT_TREE_END_DRAG': self.OnEndDrag, 'EVT_TREE_END_LABEL_EDIT': self.OnEndEdit,
141 'EVT_TREE_ITEM_ACTIVATED': self.OnActivate, 'EVT_TREE_ITEM_CHECKED': self.OnItemCheck,
142 'EVT_TREE_ITEM_CHECKING': self.OnItemChecking, 'EVT_TREE_ITEM_COLLAPSED': self.OnItemCollapsed,
143 'EVT_TREE_ITEM_COLLAPSING': self.OnItemCollapsing, 'EVT_TREE_ITEM_EXPANDED': self.OnItemExpanded,
144 'EVT_TREE_ITEM_EXPANDING': self.OnItemExpanding, 'EVT_TREE_ITEM_GETTOOLTIP': self.OnToolTip,
145 'EVT_TREE_ITEM_MENU': self.OnItemMenu, 'EVT_TREE_ITEM_RIGHT_CLICK': self.OnRightDown,
146 'EVT_TREE_KEY_DOWN': self.OnKey, 'EVT_TREE_SEL_CHANGED': self.OnSelChanged,
147 'EVT_TREE_SEL_CHANGING': self.OnSelChanging, "EVT_TREE_ITEM_HYPERLINK": self.OnHyperLink}
149 mainframe = wx.GetTopLevelParent(self)
151 if not hasattr(mainframe, "leftpanel"):
152 self.Bind(CT.EVT_TREE_ITEM_EXPANDED, self.OnItemExpanded)
153 self.Bind(CT.EVT_TREE_ITEM_COLLAPSED, self.OnItemCollapsed)
154 self.Bind(CT.EVT_TREE_SEL_CHANGED, self.OnSelChanged)
155 self.Bind(CT.EVT_TREE_SEL_CHANGING, self.OnSelChanging)
156 self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
157 self.Bind(wx.EVT_RIGHT_UP, self.OnRightUp)
159 for combos in mainframe.treeevents:
160 self.BindEvents(combos)
162 if hasattr(mainframe, "leftpanel"):
163 self.ChangeStyle(mainframe.treestyles)
165 if not(self.GetAGWWindowStyleFlag() & CT.TR_HIDE_ROOT):
166 self.SelectItem(self.root)
167 self.Expand(self.root)
170 def BindEvents(self, choice, recreate=False):
172 value = choice.GetValue()
173 text = choice.GetLabel()
176 binder = self.eventdict[text]
179 if evt == "CT.EVT_TREE_BEGIN_RDRAG":
180 self.Bind(wx.EVT_RIGHT_DOWN, None)
181 self.Bind(wx.EVT_RIGHT_UP, None)
182 self.Bind(eval(evt), binder)
184 self.Bind(eval(evt), None)
185 if evt == "CT.EVT_TREE_BEGIN_RDRAG":
186 self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
187 self.Bind(wx.EVT_RIGHT_UP, self.OnRightUp)
190 def ChangeStyle(self, combos):
194 if combo.GetValue() == 1:
195 style = style | eval("CT." + combo.GetLabel())
197 if self.GetAGWWindowStyleFlag() != style:
198 self.SetAGWWindowStyleFlag(style)
201 def OnCompareItems(self, item1, item2):
203 t1 = self.GetItemText(item1)
204 t2 = self.GetItemText(item2)
215 def OnIdle(self, event):
219 # if self.gauge.IsEnabled() and self.gauge.IsShown():
220 # self.count = self.count + 1
222 # if self.count >= 50:
225 # self.gauge.SetValue(self.count)
233 def CloseItem(self, itemParent = None, uuid = None) :
234 if itemParent is None :
235 itemParent = self.root
236 child, cookie = self.GetFirstChild(itemParent)
238 pydata = self.GetPyData(child)
239 if pydata['uuid'] == uuid :
240 self.SetItemBold(child, False)
242 self.CloseItem(child, uuid)
243 child, cookie = self.GetNextChild(itemParent, cookie)
245 def GiveFocus(self, itemParent = None, uuid = None) :
246 if itemParent is None :
247 itemParent = self.root
248 child, cookie = self.GetFirstChild(itemParent)
250 pydata = self.GetPyData(child)
251 if pydata['uuid'] == uuid :
252 self.SelectItem(child)
254 self.GiveFocus(child, uuid)
255 child, cookie = self.GetNextChild(itemParent, cookie)
257 def OnRightDown(self, event):
259 pt = event.GetPosition()
260 item, flags = self.HitTest(pt)
264 #self.log.info("OnRightClick: %s, %s, %s" % (self.GetItemText(item), type(item), item.__class__) + "\n")
265 self.SelectItem(item)
268 def OnRightUp(self, event):
276 if not self.IsItemEnabled(item):
280 # Item Text Appearance
281 ishtml = self.IsItemHyperText(item)
282 back = self.GetItemBackgroundColour(item)
283 fore = self.GetItemTextColour(item)
284 isbold = self.IsBold(item)
285 font = self.GetItemFont(item)
288 normal = self.GetItemImage(item, CT.TreeItemIcon_Normal)
289 selected = self.GetItemImage(item, CT.TreeItemIcon_Selected)
290 expanded = self.GetItemImage(item, CT.TreeItemIcon_Expanded)
291 selexp = self.GetItemImage(item, CT.TreeItemIcon_SelectedExpanded)
293 # Enabling/Disabling Windows Associated To An Item
294 haswin = self.GetItemWindow(item)
296 # Enabling/Disabling Items
297 enabled = self.IsItemEnabled(item)
299 # Generic Item's Info
300 children = self.GetChildrenCount(item)
301 itemtype = self.GetItemType(item)
302 text = self.GetItemText(item)
303 pydata = self.GetPyData(item)
306 self.itemdict = {"ishtml": ishtml, "back": back, "fore": fore, "isbold": isbold,
307 "font": font, "normal": normal, "selected": selected, "expanded": expanded,
308 "selexp": selexp, "haswin": haswin, "children": children,
309 "itemtype": itemtype, "text": text, "pydata": pydata, "enabled": enabled}
312 info = menu.Append(wx.ID_ANY, "Informations")
313 menu.AppendSeparator()
315 if 'corpus_name' in pydata :
316 stat = menu.Append(wx.ID_ANY, u"Statistiques")
317 spec = menu.Append(wx.ID_ANY, u"Spécificté et AFC")
318 classification = wx.Menu()
319 alceste = classification.Append(wx.ID_ANY, u"Méthode ALCESTE")
320 pam = classification.Append(wx.ID_ANY, u"Par matrice des distances")
321 menu.AppendMenu(-1, u"Classification", classification)
322 menu.AppendSeparator()
323 self.Bind(wx.EVT_MENU, self.OnAlceste, alceste)
324 self.Bind(wx.EVT_MENU, self.OnPam, pam)
325 self.Bind(wx.EVT_MENU, self.OnStat, stat)
326 self.Bind(wx.EVT_MENU, self.OnSpec, spec)
328 item10 = menu.Append(wx.ID_ANY, "Supprimer de l'historique")
329 if item == self.GetRootItem():
331 #item11 = menu.Append(wx.ID_ANY, "Prepend An Item")
332 #item12 = menu.Append(wx.ID_ANY, "Append An Item")
334 #self.Bind(wx.EVT_MENU, self.OnItemBackground, item1)
335 #self.Bind(wx.EVT_MENU, self.OnItemForeground, item2)
336 #self.Bind(wx.EVT_MENU, self.OnItemBold, item3)
337 #self.Bind(wx.EVT_MENU, self.OnItemFont, item4)
338 #self.Bind(wx.EVT_MENU, self.OnItemHyperText, item5)
339 #self.Bind(wx.EVT_MENU, self.OnEnableWindow, item6)
340 #self.Bind(wx.EVT_MENU, self.OnDisableItem, item7)
341 #self.Bind(wx.EVT_MENU, self.OnItemIcons, item8)
342 self.Bind(wx.EVT_MENU, self.OnItemInfo, info)
343 #self.Bind(wx.EVT_MENU, self.OnItemDelete, item10)
344 #self.Bind(wx.EVT_MENU, self.OnItemPrepend, item11)
345 #self.Bind(wx.EVT_MENU, self.OnItemAppend, item12)
350 def getcorpus(self, itemdict):
351 if itemdict['pydata']['uuid'] in self.parent.history.openedcorpus :
352 return copycorpus(self.parent.history.openedcorpus[itemdict['pydata']['uuid']])
354 return Corpus(self.parent, parametres = DoConf(itemdict['pydata']['ira']).getoptions('corpus'), read = True)
356 def OnSpec(self, evt) :
357 self.parent.OnTextSpec(evt, self.getcorpus(self.itemdict))
359 def OnStat(self, evt) :
360 self.parent.OnTextStat(evt, self.getcorpus(self.itemdict))
362 def OnAlceste(self, evt) :
363 self.parent.OnTextAlceste(evt, self.getcorpus(self.itemdict))
365 def OnPam(self, evt) :
368 def OnItemBackground(self, event):
370 colourdata = wx.ColourData()
371 colourdata.SetColour(self.itemdict["back"])
372 dlg = wx.ColourDialog(self, colourdata)
374 dlg.GetColourData().SetChooseFull(True)
376 if dlg.ShowModal() == wx.ID_OK:
377 data = dlg.GetColourData()
378 col1 = data.GetColour().Get()
379 self.SetItemBackgroundColour(self.current, col1)
383 def OnItemForeground(self, event):
385 colourdata = wx.ColourData()
386 colourdata.SetColour(self.itemdict["fore"])
387 dlg = wx.ColourDialog(self, colourdata)
389 dlg.GetColourData().SetChooseFull(True)
391 if dlg.ShowModal() == wx.ID_OK:
392 data = dlg.GetColourData()
393 col1 = data.GetColour().Get()
394 self.SetItemTextColour(self.current, col1)
398 def OnItemBold(self, event):
400 self.SetItemBold(self.current, not self.itemdict["isbold"])
403 def OnItemFont(self, event):
406 font = self.itemdict["font"]
409 font = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
411 data.SetInitialFont(font)
413 dlg = wx.FontDialog(self, data)
415 if dlg.ShowModal() == wx.ID_OK:
416 data = dlg.GetFontData()
417 font = data.GetChosenFont()
418 self.SetItemFont(self.current, font)
423 def OnItemHyperText(self, event):
425 self.SetItemHyperText(self.current, not self.itemdict["ishtml"])
428 def OnEnableWindow(self, event):
430 enable = self.GetItemWindowEnabled(self.current)
431 self.SetItemWindowEnabled(self.current, not enable)
434 def OnDisableItem(self, event):
436 self.EnableItem(self.current, False)
439 def OnItemIcons(self, event):
441 bitmaps = [self.itemdict["normal"], self.itemdict["selected"],
442 self.itemdict["expanded"], self.itemdict["selexp"]]
445 dlg = TreeIcons(self, -1, bitmaps=bitmaps)
450 def SetNewIcons(self, bitmaps):
452 self.SetItemImage(self.current, bitmaps[0], CT.TreeItemIcon_Normal)
453 self.SetItemImage(self.current, bitmaps[1], CT.TreeItemIcon_Selected)
454 self.SetItemImage(self.current, bitmaps[2], CT.TreeItemIcon_Expanded)
455 self.SetItemImage(self.current, bitmaps[3], CT.TreeItemIcon_SelectedExpanded)
458 def OnItemInfo(self, event):
460 itemtext = self.itemdict["text"]
461 numchildren = str(self.itemdict["children"])
462 itemtype = self.itemdict["itemtype"]
463 pydata = self.itemdict['pydata']
464 if 'analyses' in pydata :
465 toshow = dict([[val, pydata[val]] for val in pydata if val not in['analyses', 'isload']])
468 pydata = DoConf().totext(toshow)
473 itemtype = "CheckBox"
475 itemtype = "RadioButton"
477 strs = "Information On Selected Item:\n\n" + "Text: " + itemtext + "\n" \
478 "Number Of Children: " + numchildren + "\n" \
479 "Item Type: " + itemtype + "\n" \
480 "Item Data Type: " + pydata + "\n"
482 dlg = wx.MessageDialog(self, strs, "CustomTreeCtrlDemo Info", wx.OK | wx.ICON_INFORMATION)
488 def OnItemDelete(self, event):
490 strs = "Are You Sure You Want To Delete Item " + self.GetItemText(self.current) + "?"
491 dlg = wx.MessageDialog(None, strs, 'Deleting Item', wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_QUESTION)
493 if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
499 self.DeleteChildren(self.current)
500 self.Delete(self.current)
505 def OnItemPrepend(self, event):
507 dlg = wx.TextEntryDialog(self, "Please Enter The New Item Name", 'Item Naming', 'Python')
509 if dlg.ShowModal() == wx.ID_OK:
510 newname = dlg.GetValue()
511 newitem = self.PrependItem(self.current, newname)
512 self.EnsureVisible(newitem)
516 def AddAnalyse(self, parametres, itemParent = None) :
517 uuid = parametres['corpus']
518 if itemParent is None :
519 itemParent = self.root
520 child, cookie = self.GetFirstChild(itemParent)
522 pydata = self.GetPyData(child)
523 if pydata['uuid'] == uuid :
526 self.GiveFocus(child, uuid)
527 child, cookie = self.GetNextChild(itemParent, cookie)
528 item = self.AppendItem(corpus, parametres['name'])
529 self.SetPyData(item, parametres)
530 self.SetItemImage(item, 24, CT.TreeItemIcon_Normal)
531 self.SetItemImage(item, 13, CT.TreeItemIcon_Expanded)
532 self.SetItemBold(item, True)
534 def OnItemAppend(self, item):
535 child = self.AppendItem(self.root, item['corpus_name'])
536 self.SetPyData(child, item)
537 self.history.addtab(item)
538 self.SetItemImage(child, 24, CT.TreeItemIcon_Normal)
539 self.SetItemImage(child, 13, CT.TreeItemIcon_Expanded)
540 self.SetItemBold(child, True)
542 #dlg = wx.TextEntryDialog(self, "Please Enter The New Item Name", 'Item Naming', 'Python')
544 #if dlg.ShowModal() == wx.ID_OK:
545 # newname = dlg.GetValue()
546 # newitem = self.AppendItem(self.current, newname)
547 # self.EnsureVisible(newitem)
553 def OnBeginEdit(self, event):
555 #self.log.info("OnBeginEdit" + "\n")
556 # show how to prevent edit...
557 item = event.GetItem()
558 if item and self.GetItemText(item) == "The Root Item":
560 #self.log.info("You can't edit this one..." + "\n")
562 # Lets just see what's visible of its children
564 root = event.GetItem()
565 (child, cookie) = self.GetFirstChild(root)
568 #self.log.info("Child [%s] visible = %d" % (self.GetItemText(child), self.IsVisible(child)) + "\n")
569 (child, cookie) = self.GetNextChild(root, cookie)
574 def OnEndEdit(self, event):
576 #self.log.info("OnEndEdit: %s %s" %(event.IsEditCancelled(), event.GetLabel()))
577 # show how to reject edit, we'll not allow any digits
578 for x in event.GetLabel():
579 if x in string.digits:
580 #self.log.info(", You can't enter digits..." + "\n")
587 def OnLeftDClick(self, event):
589 pt = event.GetPosition()
590 item, flags = self.HitTest(pt)
591 pydata = self.GetPyData(item)
592 if pydata['uuid'] in self.parent.history.opened :
593 for i in range(self.parent.nb.GetPageCount()) :
594 page = self.parent.nb.GetPage(i)
595 if 'parametres' in dir(page) :
596 if page.parametres['uuid'] == pydata['uuid'] :
597 self.parent.nb.SetSelection(i)
600 OpenAnalyse(self.parent, pydata)
601 self.SetItemBold(item, True)
602 #if item and (flags & CT.TREE_HITTEST_ONITEMLABEL):
603 # if self.GetAGWWindowStyleFlag() & CT.TR_EDIT_LABELS:
604 # self.log.info("OnLeftDClick: %s (manually starting label edit)"% self.GetItemText(item) + "\n")
606 #self.EditLabel(item)
608 # pydata = self.GetPyData(item)
610 # self.log.info("OnLeftDClick: Cannot Start Manual Editing, Missing Style TR_EDIT_LABELS\n")
615 def OnItemExpanded(self, event):
617 item = event.GetItem()
619 self.log.info("OnItemExpanded: %s" % self.GetItemText(item) + "\n")
622 def OnItemExpanding(self, event):
624 item = event.GetItem()
626 self.log.info("OnItemExpanding: %s" % self.GetItemText(item) + "\n")
631 def OnItemCollapsed(self, event):
633 item = event.GetItem()
635 self.log.info("OnItemCollapsed: %s" % self.GetItemText(item) + "\n")
638 def OnItemCollapsing(self, event):
640 item = event.GetItem()
642 self.log.info("OnItemCollapsing: %s" % self.GetItemText(item) + "\n")
647 def OnSelChanged(self, event):
648 item = event.GetItem()
649 pydata = self.GetPyData(item)
650 if pydata['uuid'] in self.parent.history.opened :
651 for i in range(self.parent.nb.GetPageCount()) :
652 page = self.parent.nb.GetPage(i)
653 if 'parametres' in dir(page) :
654 if page.parametres['uuid'] == pydata['uuid'] :
655 self.parent.nb.SetSelection(i)
658 #self.item = event.GetItem()
661 #self.log.info("OnSelChanged: %s" % self.GetItemText(self.item))
662 # if wx.Platform == '__WXMSW__':
663 # self.log.info(", BoundingRect: %s" % self.GetBoundingRect(self.item, True) + "\n")
668 def OnSelChanging(self, event):
670 item = event.GetItem()
671 olditem = event.GetOldItem()
677 olditemtext = self.GetItemText(olditem)
678 self.log.info("OnSelChanging: From %s" % olditemtext + " To %s" % self.GetItemText(item) + "\n")
683 def OnBeginDrag(self, event):
685 self.item = event.GetItem()
687 self.log.info("Beginning Drag..." + "\n")
692 def OnBeginRDrag(self, event):
694 self.item = event.GetItem()
696 self.log.info("Beginning Right Drag..." + "\n")
701 def OnEndDrag(self, event):
703 self.item = event.GetItem()
705 self.log.info("Ending Drag!" + "\n")
710 def OnDeleteItem(self, event):
712 item = event.GetItem()
717 self.log.info("Deleting Item: %s" % self.GetItemText(item) + "\n")
721 def OnItemCheck(self, event):
723 item = event.GetItem()
724 self.log.info("Item " + self.GetItemText(item) + " Has Been Checked!\n")
728 def OnItemChecking(self, event):
730 item = event.GetItem()
731 self.log.info("Item " + self.GetItemText(item) + " Is Being Checked...\n")
735 def OnToolTip(self, event):
737 item = event.GetItem()
739 event.SetToolTip(wx.ToolTip(self.GetItemText(item)))
742 def OnItemMenu(self, event):
744 item = event.GetItem()
746 self.log.info("OnItemMenu: %s" % self.GetItemText(item) + "\n")
751 def OnKey(self, event):
753 keycode = event.GetKeyCode()
754 keyname = keyMap.get(keycode, None)
756 if keycode == wx.WXK_BACK:
757 self.log.info("OnKeyDown: HAHAHAHA! I Vetoed Your Backspace! HAHAHAHA\n")
761 if "unicode" in wx.PlatformInfo:
762 keycode = event.GetUnicodeKey()
764 keycode = event.GetKeyCode()
765 keyname = "\"" + unichr(event.GetUnicodeKey()) + "\""
767 keyname = "Ctrl-%s" % chr(ord('A') + keycode-1)
773 keyname = "Ctrl-%s" % chr(ord('A') + keycode-1)
775 keyname = "\"%s\"" % chr(keycode)
777 keyname = "unknown (%s)" % keycode
779 self.log.info("OnKeyDown: You Pressed '" + keyname + "'\n")
784 def OnActivate(self, event):
787 self.log.info("OnActivate: %s" % self.GetItemText(self.item) + "\n")
792 def OnHyperLink(self, event):
794 item = event.GetItem()
796 self.log.info("OnHyperLink: %s" % self.GetItemText(self.item) + "\n")
799 def OnTextCtrl(self, event):
801 char = chr(event.GetKeyCode())
802 self.log.info("EDITING THE TEXTCTRL: You Wrote '" + char + \
803 "' (KeyCode = " + str(event.GetKeyCode()) + ")\n")
807 def OnComboBox(self, event):
809 selection = event.GetEventObject().GetValue()
810 self.log.info("CHOICE FROM COMBOBOX: You Chose '" + selection + "'\n")