]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/XMLtreeview.py
5 from xml
.parsers
import expat
7 #----------------------------------------------------------------------
9 class XMLTree(wx
.TreeCtrl
):
10 def __init__(self
, parent
, ID
):
11 wx
.TreeCtrl
.__init
__(self
, parent
, ID
)
12 self
._root
= self
.AddRoot("Root")
13 self
.nodeStack
= [self
._root
]
15 # Trees need an image list to do DnD...
16 self
.il
= wx
.ImageList(16,16)
17 self
.SetImageList(self
.il
)
19 # event handlers for DnD
20 self
.Bind(wx
.EVT_TREE_BEGIN_DRAG
, self
.OnBeginDrag
)
21 self
.Bind(wx
.EVT_TREE_END_DRAG
, self
.OnEndDrag
)
24 def OnBeginDrag(self
, event
):
25 item
= event
.GetItem()
27 if item
!= self
.GetRootItem():
28 self
.draggingItem
= item
29 event
.Allow() # if DnD of this item is okay Allow it.
31 def IsDescendant(self
, firstItem
, secondItem
):
32 "Recursive check if firstItem is a descendant of a secondItem."
33 if firstItem
== self
._root
:
35 parentItem
= self
.GetItemParent(firstItem
)
36 if parentItem
== secondItem
:
39 return self
.IsDescendant(parentItem
, secondItem
)
41 def OnEndDrag(self
, evt
):
42 itemSrc
= self
.draggingItem
43 itemDst
= evt
.GetItem()
44 self
.draggingItem
= None
46 if not itemDst
.IsOk():
47 print "Can't drag to here..."
50 if self
.IsDescendant(itemDst
, itemSrc
):
51 print "Can't move item to its descendant"
54 # For this simple example just take the text of the source item
55 # and append it to the destination item. In real life you would
56 # possibly want to copy subtrees...
57 text
= self
.GetItemText(itemSrc
)
58 self
.AppendItem(itemDst
, text
)
62 # Define a handler for start element events
63 def StartElement(self
, name
, attrs
):
66 id = self
.AppendItem(self
.nodeStack
[-1], name
)
67 self
.nodeStack
.append(id)
69 def EndElement(self
, name
):
70 self
.nodeStack
= self
.nodeStack
[:-1]
72 def CharacterData(self
, data
):
76 self
.AppendItem(self
.nodeStack
[-1], data
)
79 def LoadTree(self
, filename
):
81 Parser
= expat
.ParserCreate()
83 # Tell the parser what the start element handler is
84 Parser
.StartElementHandler
= self
.StartElement
85 Parser
.EndElementHandler
= self
.EndElement
86 Parser
.CharacterDataHandler
= self
.CharacterData
89 ParserStatus
= Parser
.Parse(open(filename
,'r').read(), 1)
92 def runTest(frame
, nb
, log
):
94 win
.LoadTree("paper.xml")
97 #----------------------------------------------------------------------
105 if __name__
== '__main__':
108 run
.main(['', os
.path
.basename(sys
.argv
[0])] + sys
.argv
[1:])