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 InfoDialog ( wx.Dialog ):
20 def __init__( self, parent, txt, parametres ):
21 wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"Informations", pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.DEFAULT_DIALOG_STYLE )
23 self.SetSizeHintsSz( wx.Size( 500,200 ), wx.DefaultSize )
25 bSizer1 = wx.BoxSizer( wx.VERTICAL )
27 self.m_panel2 = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
28 bSizer2 = wx.BoxSizer( wx.VERTICAL )
30 self.m_staticText4 = wx.StaticText( self.m_panel2, wx.ID_ANY, txt, wx.DefaultPosition, wx.DefaultSize, 0 )
31 self.m_staticText4.Wrap( -1 )
32 bSizer2.Add( self.m_staticText4, 0, wx.ALL, 5 )
35 self.m_panel2.SetSizer( bSizer2 )
36 self.m_panel2.Layout()
37 bSizer2.Fit( self.m_panel2 )
38 bSizer1.Add( self.m_panel2, 0, wx.EXPAND |wx.ALL, 5 )
40 self.m_panel1 = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
41 fgSizer1 = wx.FlexGridSizer( 0, 2, 0, 0 )
42 fgSizer1.SetFlexibleDirection( wx.BOTH )
43 fgSizer1.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED )
46 for val in parametres :
47 fgSizer1.Add( wx.StaticText( self.m_panel1, wx.ID_ANY, val[0], wx.DefaultPosition, wx.DefaultSize, 0 ), 0, wx.ALL, 0)
48 #fgSizer1.Add( wx.StaticText( self.m_panel1, wx.ID_ANY, val[1], wx.DefaultPosition, wx.DefaultSize, 0 ), 0, wx.ALL, 0)
49 txtctrl.append( wx.TextCtrl( self.m_panel1, wx.ID_ANY, val[1], wx.DefaultPosition, (500, 20), wx.TE_READONLY ) )
50 txtctrl[-1].SetBackgroundColour('#DDE8EB')
51 #wx.SystemSettings.GetColour(wx.SYS_COLOUR_GRAYTEXT))
52 fgSizer1.Add( txtctrl[-1], 0, wx.ALL|wx.EXPAND, 0)
53 fgSizer1.Add( wx.StaticLine( self.m_panel1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ), 0, wx.EXPAND |wx.ALL, 0)
54 fgSizer1.Add( wx.StaticLine( self.m_panel1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ), 0, wx.EXPAND|wx.ALL, 0)
56 self.m_panel1.SetSizer( fgSizer1 )
57 self.m_panel1.Layout()
58 fgSizer1.Fit( self.m_panel1 )
59 bSizer1.Add( self.m_panel1, 0, wx.EXPAND|wx.ALL, 3 )
61 m_sdbSizer1 = wx.StdDialogButtonSizer()
62 self.m_sdbSizer1OK = wx.Button( self, wx.ID_OK )
63 m_sdbSizer1.AddButton( self.m_sdbSizer1OK )
64 m_sdbSizer1.Realize();
66 bSizer1.Add( m_sdbSizer1, 0, wx.EXPAND, 5 )
69 self.SetSizer( bSizer1 )
73 self.Centre( wx.BOTH )
79 class LeftTree(CT.CustomTreeCtrl):
81 def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition,
83 style=wx.SUNKEN_BORDER|wx.WANTS_CHARS,
84 agwStyle=CT.TR_HAS_BUTTONS|CT.TR_HAS_VARIABLE_ROW_HEIGHT):
86 CT.CustomTreeCtrl.__init__(self, parent, id, pos, size, style, agwStyle)
92 if data.startswith("TR_"):
93 treestyles.append(data)
94 elif data.startswith("EVT_"):
98 self.styles = treestyles
101 il = wx.ImageList(16, 16)
103 # for items in ArtIDs[1:-1]:
104 # bmp = wx.ArtProvider_GetBitmap(eval(items), wx.ART_TOOLBAR, (16, 16))
107 # smileidx = il.Add(images.Smiles.GetBitmap())
108 # numicons = il.GetImageCount()
110 #self.AssignImageList(il)
114 self.history = parent.history
115 self.h = self.history.history
116 self.root = self.AddRoot("Iramuteq")
118 if not(self.GetAGWWindowStyleFlag() & CT.TR_HIDE_ROOT):
119 self.SetPyData(self.root, None)
120 self.SetItemImage(self.root, 24, CT.TreeItemIcon_Normal)
121 self.SetItemImage(self.root, 13, CT.TreeItemIcon_Expanded)
123 #textctrl = wx.TextCtrl(self, -1, "I Am A Simple\nMultiline wx.TexCtrl", style=wx.TE_MULTILINE)
124 #self.gauge = wx.Gauge(self, -1, 50, style=wx.GA_HORIZONTAL|wx.GA_SMOOTH)
125 #self.gauge.SetValue(0)
126 #combobox = wx.ComboBox(self, -1, choices=["That", "Was", "A", "Nice", "Holyday!"], style=wx.CB_READONLY|wx.CB_DROPDOWN)
128 #textctrl.Bind(wx.EVT_CHAR, self.OnTextCtrl)
129 #combobox.Bind(wx.EVT_COMBOBOX, self.OnComboBox)
130 #lenArtIds = len(ArtIDs) - 2
131 for corpus in self.h :
132 #if 'corpus_name' in self.h[self.history.order[x]] :
133 # key = 'corpus_name'
136 child = self.AppendItem(self.root, corpus['corpus_name'])
138 # child = self.AppendItem(self.root, "Item %d" % x + "\nHello World\nHappy wxPython-ing!")
139 # self.SetItemBold(child, True)
141 # child = self.AppendItem(self.root, "Item %d" % x)
142 self.SetPyData(child, corpus)
143 self.SetItemImage(child, 24, CT.TreeItemIcon_Normal)
144 self.SetItemImage(child, 13, CT.TreeItemIcon_Expanded)
146 #if random.randint(0, 3) == 0:
147 # self.SetItemLeftImage(child, random.randint(0, lenArtIds))
150 # if y == 0 and x == 1:
151 # last = self.AppendItem(child, "item %d-%s" % (x, chr(ord("a")+y)), ct_type=2, wnd=self.gauge)
152 # elif y == 1 and x == 2:
153 # last = self.AppendItem(child, "Item %d-%s" % (x, chr(ord("a")+y)), ct_type=1, wnd=textctrl)
154 # if random.randint(0, 3) == 1:
155 # self.SetItem3State(last, True)
158 # last = self.AppendItem(child, "item %d-%s" % (x, chr(ord("a")+y)))
159 # elif y == 4 and x == 1:
160 # last = self.AppendItem(child, "item %d-%s" % (x, chr(ord("a")+y)), wnd=combobox)
162 # if 'corpus_name' in self.h[self.history.order[x]] :
163 if 'analyses' in corpus :
164 for y in corpus['analyses'] :
165 last = self.AppendItem(child, y['name'], ct_type=0)
167 self.SetPyData(last, y)
168 self.SetItemImage(last, 24, CT.TreeItemIcon_Normal)
169 self.SetItemImage(last, 13, CT.TreeItemIcon_Expanded)
171 # if random.randint(0, 3) == 0:
172 # self.SetItemLeftImage(last, random.randint(0, lenArtIds))
174 #for z in range(len(self.history[x]) - 1):
177 # item = self.AppendItem(last, "item %d-%s-%d" % (x, chr(ord("a")+y), z), ct_type=0)
178 # #if random.randint(0, 3) == 1:
179 # # self.SetItem3State(item, True)
181 # item = self.AppendItem(last, "item %d-%s-%d" % (x, chr(ord("a")+y), z), ct_type=0)
183 # item = self.AppendItem(last, "item %d-%s-%d" % (x, chr(ord("a")+y), z))
184 # #self.SetItemHyperText(item, True)
185 # self.SetPyData(item, None)
186 # self.SetItemImage(item, 28, CT.TreeItemIcon_Normal)
187 # self.SetItemImage(item, 28, CT.TreeItemIcon_Selected)
189 # if random.randint(0, 3) == 0:
190 # self.SetItemLeftImage(item, random.randint(0, lenArtIds))
192 self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDClick)
193 #self.Bind(wx.EVT_IDLE, self.OnIdle)
195 self.eventdict = {'EVT_TREE_BEGIN_DRAG': self.OnBeginDrag, 'EVT_TREE_BEGIN_LABEL_EDIT': self.OnBeginEdit,
196 'EVT_TREE_BEGIN_RDRAG': self.OnBeginRDrag, 'EVT_TREE_DELETE_ITEM': self.OnDeleteItem,
197 'EVT_TREE_END_DRAG': self.OnEndDrag, 'EVT_TREE_END_LABEL_EDIT': self.OnEndEdit,
198 'EVT_TREE_ITEM_ACTIVATED': self.OnActivate, 'EVT_TREE_ITEM_CHECKED': self.OnItemCheck,
199 'EVT_TREE_ITEM_CHECKING': self.OnItemChecking, 'EVT_TREE_ITEM_COLLAPSED': self.OnItemCollapsed,
200 'EVT_TREE_ITEM_COLLAPSING': self.OnItemCollapsing, 'EVT_TREE_ITEM_EXPANDED': self.OnItemExpanded,
201 'EVT_TREE_ITEM_EXPANDING': self.OnItemExpanding, 'EVT_TREE_ITEM_GETTOOLTIP': self.OnToolTip,
202 'EVT_TREE_ITEM_MENU': self.OnItemMenu, 'EVT_TREE_ITEM_RIGHT_CLICK': self.OnRightDown,
203 'EVT_TREE_KEY_DOWN': self.OnKey, 'EVT_TREE_SEL_CHANGED': self.OnSelChanged,
204 'EVT_TREE_SEL_CHANGING': self.OnSelChanging, "EVT_TREE_ITEM_HYPERLINK": self.OnHyperLink}
206 mainframe = wx.GetTopLevelParent(self)
208 if not hasattr(mainframe, "leftpanel"):
209 self.Bind(CT.EVT_TREE_ITEM_EXPANDED, self.OnItemExpanded)
210 self.Bind(CT.EVT_TREE_ITEM_COLLAPSED, self.OnItemCollapsed)
211 self.Bind(CT.EVT_TREE_SEL_CHANGED, self.OnSelChanged)
212 self.Bind(CT.EVT_TREE_SEL_CHANGING, self.OnSelChanging)
213 self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
214 self.Bind(wx.EVT_RIGHT_UP, self.OnRightUp)
216 for combos in mainframe.treeevents:
217 self.BindEvents(combos)
219 if hasattr(mainframe, "leftpanel"):
220 self.ChangeStyle(mainframe.treestyles)
222 if not(self.GetAGWWindowStyleFlag() & CT.TR_HIDE_ROOT):
223 self.SelectItem(self.root)
224 self.Expand(self.root)
227 def BindEvents(self, choice, recreate=False):
229 value = choice.GetValue()
230 text = choice.GetLabel()
233 binder = self.eventdict[text]
236 if evt == "CT.EVT_TREE_BEGIN_RDRAG":
237 self.Bind(wx.EVT_RIGHT_DOWN, None)
238 self.Bind(wx.EVT_RIGHT_UP, None)
239 self.Bind(eval(evt), binder)
241 self.Bind(eval(evt), None)
242 if evt == "CT.EVT_TREE_BEGIN_RDRAG":
243 self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
244 self.Bind(wx.EVT_RIGHT_UP, self.OnRightUp)
247 def ChangeStyle(self, combos):
251 if combo.GetValue() == 1:
252 style = style | eval("CT." + combo.GetLabel())
254 if self.GetAGWWindowStyleFlag() != style:
255 self.SetAGWWindowStyleFlag(style)
258 def OnCompareItems(self, item1, item2):
260 t1 = self.GetItemText(item1)
261 t2 = self.GetItemText(item2)
272 def OnIdle(self, event):
276 # if self.gauge.IsEnabled() and self.gauge.IsShown():
277 # self.count = self.count + 1
279 # if self.count >= 50:
282 # self.gauge.SetValue(self.count)
290 def CloseItem(self, itemParent = None, uuid = None) :
291 if itemParent is None :
292 itemParent = self.root
293 child, cookie = self.GetFirstChild(itemParent)
295 pydata = self.GetPyData(child)
296 if pydata['uuid'] == uuid :
297 self.SetItemBold(child, False)
299 self.CloseItem(child, uuid)
300 child, cookie = self.GetNextChild(itemParent, cookie)
302 def GiveFocus(self, itemParent = None, uuid = None) :
303 if itemParent is None :
304 itemParent = self.root
305 child, cookie = self.GetFirstChild(itemParent)
307 pydata = self.GetPyData(child)
308 if pydata['uuid'] == uuid :
309 self.SelectItem(child)
311 self.GiveFocus(child, uuid)
312 child, cookie = self.GetNextChild(itemParent, cookie)
314 def OnRightDown(self, event):
316 pt = event.GetPosition()
317 item, flags = self.HitTest(pt)
321 #self.log.info("OnRightClick: %s, %s, %s" % (self.GetItemText(item), type(item), item.__class__) + "\n")
322 self.SelectItem(item)
325 def OnRightUp(self, event):
333 if not self.IsItemEnabled(item):
337 # Item Text Appearance
338 ishtml = self.IsItemHyperText(item)
339 back = self.GetItemBackgroundColour(item)
340 fore = self.GetItemTextColour(item)
341 isbold = self.IsBold(item)
342 font = self.GetItemFont(item)
345 normal = self.GetItemImage(item, CT.TreeItemIcon_Normal)
346 selected = self.GetItemImage(item, CT.TreeItemIcon_Selected)
347 expanded = self.GetItemImage(item, CT.TreeItemIcon_Expanded)
348 selexp = self.GetItemImage(item, CT.TreeItemIcon_SelectedExpanded)
350 # Enabling/Disabling Windows Associated To An Item
351 haswin = self.GetItemWindow(item)
353 # Enabling/Disabling Items
354 enabled = self.IsItemEnabled(item)
356 # Generic Item's Info
357 children = self.GetChildrenCount(item)
358 itemtype = self.GetItemType(item)
359 text = self.GetItemText(item)
360 pydata = self.GetPyData(item)
363 self.itemdict = {"ishtml": ishtml, "back": back, "fore": fore, "isbold": isbold,
364 "font": font, "normal": normal, "selected": selected, "expanded": expanded,
365 "selexp": selexp, "haswin": haswin, "children": children,
366 "itemtype": itemtype, "text": text, "pydata": pydata, "enabled": enabled}
369 info = menu.Append(wx.ID_ANY, "Informations")
370 menu.AppendSeparator()
372 if 'corpus_name' in pydata :
373 stat = menu.Append(wx.ID_ANY, u"Statistiques")
374 spec = menu.Append(wx.ID_ANY, u"Spécificté et AFC")
375 classification = wx.Menu()
376 alceste = classification.Append(wx.ID_ANY, u"Méthode ALCESTE")
377 pam = classification.Append(wx.ID_ANY, u"Par matrice des distances")
378 menu.AppendMenu(-1, u"Classification", classification)
379 simi = menu.Append(wx.ID_ANY, u"Analyse de similitude")
380 wdc = menu.Append(wx.ID_ANY, u"Nuage de mots")
381 menu.AppendSeparator()
382 self.Bind(wx.EVT_MENU, self.OnAlceste, alceste)
383 self.Bind(wx.EVT_MENU, self.OnPam, pam)
384 self.Bind(wx.EVT_MENU, self.OnStat, stat)
385 self.Bind(wx.EVT_MENU, self.OnSpec, spec)
386 self.Bind(wx.EVT_MENU, self.OnSimiTxt, simi)
387 self.Bind(wx.EVT_MENU, self.OnWordCloud, wdc)
389 itemdelete = menu.Append(wx.ID_ANY, "Supprimer de l'historique")
390 if item == self.GetRootItem():
391 itemdelete.Enable(False)
392 #item11 = menu.Append(wx.ID_ANY, "Prepend An Item")
393 #item12 = menu.Append(wx.ID_ANY, "Append An Item")
395 #self.Bind(wx.EVT_MENU, self.OnItemBackground, item1)
396 #self.Bind(wx.EVT_MENU, self.OnItemForeground, item2)
397 #self.Bind(wx.EVT_MENU, self.OnItemBold, item3)
398 #self.Bind(wx.EVT_MENU, self.OnItemFont, item4)
399 #self.Bind(wx.EVT_MENU, self.OnItemHyperText, item5)
400 #self.Bind(wx.EVT_MENU, self.OnEnableWindow, item6)
401 #self.Bind(wx.EVT_MENU, self.OnDisableItem, item7)
402 #self.Bind(wx.EVT_MENU, self.OnItemIcons, item8)
403 self.Bind(wx.EVT_MENU, self.OnItemInfo, info)
404 self.Bind(wx.EVT_MENU, self.OnItemDelete, itemdelete)
405 #self.Bind(wx.EVT_MENU, self.OnItemPrepend, item11)
406 #self.Bind(wx.EVT_MENU, self.OnItemAppend, item12)
411 def getcorpus(self, itemdict):
412 if itemdict['pydata']['uuid'] in self.parent.history.openedcorpus :
413 return copycorpus(self.parent.history.openedcorpus[itemdict['pydata']['uuid']])
415 return Corpus(self.parent, parametres = DoConf(itemdict['pydata']['ira']).getoptions('corpus'), read = True)
417 def OnSpec(self, evt) :
418 self.parent.OnTextSpec(evt, self.getcorpus(self.itemdict))
420 def OnStat(self, evt) :
421 self.parent.OnTextStat(evt, self.getcorpus(self.itemdict))
423 def OnAlceste(self, evt) :
424 self.parent.OnTextAlceste(evt, self.getcorpus(self.itemdict))
426 def OnPam(self, evt) :
429 def OnSimiTxt(self, evt) :
430 self.parent.OnSimiTxt(evt, self.getcorpus(self.itemdict))
432 def OnWordCloud(self, evt) :
433 self.parent.OnWordCloud(evt, self.getcorpus(self.itemdict))
435 def OnItemBackground(self, event):
437 colourdata = wx.ColourData()
438 colourdata.SetColour(self.itemdict["back"])
439 dlg = wx.ColourDialog(self, colourdata)
441 dlg.GetColourData().SetChooseFull(True)
443 if dlg.ShowModal() == wx.ID_OK:
444 data = dlg.GetColourData()
445 col1 = data.GetColour().Get()
446 self.SetItemBackgroundColour(self.current, col1)
450 def OnItemForeground(self, event):
452 colourdata = wx.ColourData()
453 colourdata.SetColour(self.itemdict["fore"])
454 dlg = wx.ColourDialog(self, colourdata)
456 dlg.GetColourData().SetChooseFull(True)
458 if dlg.ShowModal() == wx.ID_OK:
459 data = dlg.GetColourData()
460 col1 = data.GetColour().Get()
461 self.SetItemTextColour(self.current, col1)
465 def OnItemBold(self, event):
467 self.SetItemBold(self.current, not self.itemdict["isbold"])
470 def OnItemFont(self, event):
473 font = self.itemdict["font"]
476 font = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
478 data.SetInitialFont(font)
480 dlg = wx.FontDialog(self, data)
482 if dlg.ShowModal() == wx.ID_OK:
483 data = dlg.GetFontData()
484 font = data.GetChosenFont()
485 self.SetItemFont(self.current, font)
490 def OnItemHyperText(self, event):
492 self.SetItemHyperText(self.current, not self.itemdict["ishtml"])
495 def OnEnableWindow(self, event):
497 enable = self.GetItemWindowEnabled(self.current)
498 self.SetItemWindowEnabled(self.current, not enable)
501 def OnDisableItem(self, event):
503 self.EnableItem(self.current, False)
506 def OnItemIcons(self, event):
508 bitmaps = [self.itemdict["normal"], self.itemdict["selected"],
509 self.itemdict["expanded"], self.itemdict["selexp"]]
512 dlg = TreeIcons(self, -1, bitmaps=bitmaps)
517 def SetNewIcons(self, bitmaps):
519 self.SetItemImage(self.current, bitmaps[0], CT.TreeItemIcon_Normal)
520 self.SetItemImage(self.current, bitmaps[1], CT.TreeItemIcon_Selected)
521 self.SetItemImage(self.current, bitmaps[2], CT.TreeItemIcon_Expanded)
522 self.SetItemImage(self.current, bitmaps[3], CT.TreeItemIcon_SelectedExpanded)
525 def OnItemInfo(self, event):
527 itemtext = self.itemdict["text"]
528 numchildren = str(self.itemdict["children"])
529 itemtype = self.itemdict["itemtype"]
530 pydata = self.itemdict['pydata']
531 #if 'analyses' in pydata :
532 # toshow = dict([[val, pydata[val]] for val in pydata if val not in['analyses', 'isload']])
534 toshow = pydata['ira']
535 toshow = DoConf(toshow).getoptions()
536 txt = DoConf().totext(toshow)
537 parametres = [val.split('\t\t:') for val in txt.splitlines()]
543 itemtype = "CheckBox"
545 itemtype = "RadioButton"
547 dlg = InfoDialog(self, itemtext, parametres)
553 def OnItemDelete(self, event):
555 strs = "Are You Sure You Want To Delete Item " + self.GetItemText(self.current) + "?"
556 dlg = wx.MessageDialog(None, strs, 'Deleting Item', wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_QUESTION)
558 if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
564 pydata = self.itemdict['pydata']
565 if 'corpus_name' in pydata :
566 self.history.delete(pydata, True)
568 self.history.delete(pydata)
569 self.DeleteChildren(self.current)
570 self.Delete(self.current)
575 def OnItemPrepend(self, event):
577 dlg = wx.TextEntryDialog(self, "Please Enter The New Item Name", 'Item Naming', 'Python')
579 if dlg.ShowModal() == wx.ID_OK:
580 newname = dlg.GetValue()
581 newitem = self.PrependItem(self.current, newname)
582 self.EnsureVisible(newitem)
586 def AddAnalyse(self, parametres, itemParent = None, bold = True) :
587 uuid = parametres['corpus']
588 if itemParent is None :
589 itemParent = self.root
590 child, cookie = self.GetFirstChild(itemParent)
593 pydata = self.GetPyData(child)
594 if pydata['uuid'] == uuid :
597 self.GiveFocus(child, uuid)
598 child, cookie = self.GetNextChild(itemParent, cookie)
599 #item = self.AppendItem(child, parametres['name'])
600 if corpus is not None :
601 item = self.AppendItem(corpus, parametres['name'])
603 item = self.AppendItem(self.root, parametres['name'])
604 self.SetPyData(item, parametres)
605 self.SetItemImage(item, 24, CT.TreeItemIcon_Normal)
606 self.SetItemImage(item, 13, CT.TreeItemIcon_Expanded)
607 self.SetItemBold(item, bold)
609 def OnItemAppend(self, item):
610 child = self.AppendItem(self.root, item['corpus_name'])
611 self.SetPyData(child, item)
612 self.history.addtab(item)
613 self.SetItemImage(child, 24, CT.TreeItemIcon_Normal)
614 self.SetItemImage(child, 13, CT.TreeItemIcon_Expanded)
615 self.SetItemBold(child, True)
617 #dlg = wx.TextEntryDialog(self, "Please Enter The New Item Name", 'Item Naming', 'Python')
619 #if dlg.ShowModal() == wx.ID_OK:
620 # newname = dlg.GetValue()
621 # newitem = self.AppendItem(self.current, newname)
622 # self.EnsureVisible(newitem)
628 def OnBeginEdit(self, event):
630 #self.log.info("OnBeginEdit" + "\n")
631 # show how to prevent edit...
632 item = event.GetItem()
633 if item and self.GetItemText(item) == "The Root Item":
635 #self.log.info("You can't edit this one..." + "\n")
637 # Lets just see what's visible of its children
639 root = event.GetItem()
640 (child, cookie) = self.GetFirstChild(root)
643 #self.log.info("Child [%s] visible = %d" % (self.GetItemText(child), self.IsVisible(child)) + "\n")
644 (child, cookie) = self.GetNextChild(root, cookie)
649 def OnEndEdit(self, event):
651 #self.log.info("OnEndEdit: %s %s" %(event.IsEditCancelled(), event.GetLabel()))
652 # show how to reject edit, we'll not allow any digits
653 for x in event.GetLabel():
654 if x in string.digits:
655 #self.log.info(", You can't enter digits..." + "\n")
662 def OnLeftDClick(self, event):
664 pt = event.GetPosition()
665 item, flags = self.HitTest(pt)
666 pydata = self.GetPyData(item)
667 if pydata['uuid'] in self.parent.history.opened :
668 for i in range(self.parent.nb.GetPageCount()) :
669 page = self.parent.nb.GetPage(i)
670 if 'parametres' in dir(page) :
671 if page.parametres['uuid'] == pydata['uuid'] :
672 self.parent.nb.SetSelection(i)
675 OpenAnalyse(self.parent, pydata)
676 self.SetItemBold(item, True)
677 #if item and (flags & CT.TREE_HITTEST_ONITEMLABEL):
678 # if self.GetAGWWindowStyleFlag() & CT.TR_EDIT_LABELS:
679 # self.log.info("OnLeftDClick: %s (manually starting label edit)"% self.GetItemText(item) + "\n")
681 #self.EditLabel(item)
683 # pydata = self.GetPyData(item)
685 # self.log.info("OnLeftDClick: Cannot Start Manual Editing, Missing Style TR_EDIT_LABELS\n")
690 def OnItemExpanded(self, event):
692 item = event.GetItem()
694 self.log.info("OnItemExpanded: %s" % self.GetItemText(item) + "\n")
697 def OnItemExpanding(self, event):
699 item = event.GetItem()
701 self.log.info("OnItemExpanding: %s" % self.GetItemText(item) + "\n")
706 def OnItemCollapsed(self, event):
708 item = event.GetItem()
710 self.log.info("OnItemCollapsed: %s" % self.GetItemText(item) + "\n")
713 def OnItemCollapsing(self, event):
715 item = event.GetItem()
717 self.log.info("OnItemCollapsing: %s" % self.GetItemText(item) + "\n")
722 def OnSelChanged(self, event):
723 item = event.GetItem()
724 pydata = self.GetPyData(item)
725 if pydata is not None :
726 if pydata['uuid'] in self.parent.history.opened :
727 for i in range(self.parent.nb.GetPageCount()) :
728 page = self.parent.nb.GetPage(i)
729 if 'parametres' in dir(page) :
730 if page.parametres['uuid'] == pydata['uuid'] :
731 self.parent.nb.SetSelection(i)
734 #self.item = event.GetItem()
737 #self.log.info("OnSelChanged: %s" % self.GetItemText(self.item))
738 # if wx.Platform == '__WXMSW__':
739 # self.log.info(", BoundingRect: %s" % self.GetBoundingRect(self.item, True) + "\n")
744 def OnSelChanging(self, event):
746 item = event.GetItem()
747 olditem = event.GetOldItem()
753 olditemtext = self.GetItemText(olditem)
754 self.log.info("OnSelChanging: From %s" % olditemtext + " To %s" % self.GetItemText(item) + "\n")
759 def OnBeginDrag(self, event):
761 self.item = event.GetItem()
763 self.log.info("Beginning Drag..." + "\n")
768 def OnBeginRDrag(self, event):
770 self.item = event.GetItem()
772 self.log.info("Beginning Right Drag..." + "\n")
777 def OnEndDrag(self, event):
779 self.item = event.GetItem()
781 self.log.info("Ending Drag!" + "\n")
786 def OnDeleteItem(self, event):
788 item = event.GetItem()
793 self.log.info("Deleting Item: %s" % self.GetItemText(item) + "\n")
797 def OnItemCheck(self, event):
799 item = event.GetItem()
800 self.log.info("Item " + self.GetItemText(item) + " Has Been Checked!\n")
804 def OnItemChecking(self, event):
806 item = event.GetItem()
807 self.log.info("Item " + self.GetItemText(item) + " Is Being Checked...\n")
811 def OnToolTip(self, event):
813 item = event.GetItem()
815 event.SetToolTip(wx.ToolTip(self.GetItemText(item)))
818 def OnItemMenu(self, event):
820 item = event.GetItem()
822 self.log.info("OnItemMenu: %s" % self.GetItemText(item) + "\n")
827 def OnKey(self, event):
829 keycode = event.GetKeyCode()
830 keyname = keyMap.get(keycode, None)
832 if keycode == wx.WXK_BACK:
833 self.log.info("OnKeyDown: HAHAHAHA! I Vetoed Your Backspace! HAHAHAHA\n")
837 if "unicode" in wx.PlatformInfo:
838 keycode = event.GetUnicodeKey()
840 keycode = event.GetKeyCode()
841 keyname = "\"" + unichr(event.GetUnicodeKey()) + "\""
843 keyname = "Ctrl-%s" % chr(ord('A') + keycode-1)
849 keyname = "Ctrl-%s" % chr(ord('A') + keycode-1)
851 keyname = "\"%s\"" % chr(keycode)
853 keyname = "unknown (%s)" % keycode
855 self.log.info("OnKeyDown: You Pressed '" + keyname + "'\n")
860 def OnActivate(self, event):
863 self.log.info("OnActivate: %s" % self.GetItemText(self.item) + "\n")
868 def OnHyperLink(self, event):
870 item = event.GetItem()
872 self.log.info("OnHyperLink: %s" % self.GetItemText(self.item) + "\n")
875 def OnTextCtrl(self, event):
877 char = chr(event.GetKeyCode())
878 self.log.info("EDITING THE TEXTCTRL: You Wrote '" + char + \
879 "' (KeyCode = " + str(event.GetKeyCode()) + ")\n")
883 def OnComboBox(self, event):
885 selection = event.GetEventObject().GetValue()
886 self.log.info("CHOICE FROM COMBOBOX: You Chose '" + selection + "'\n")