]> git.saurik.com Git - wxWidgets.git/blame - wxPython/demo/XMLtreeview.py
* wxPrintDialog no longer derives from wxDialog.
[wxWidgets.git] / wxPython / demo / XMLtreeview.py
CommitLineData
8bf5d46e 1
8fa876ca
RD
2import sys
3import wx
c368d904 4
c4ef95da 5from xml.parsers import expat
8bf5d46e
RD
6
7#----------------------------------------------------------------------
8
c4ef95da
RD
9class 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]
14
15 # Trees need an image list to do DnD...
16 self.il = wx.ImageList(16,16)
17 self.SetImageList(self.il)
18
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)
22
23
24 def OnBeginDrag(self, event):
25 item = event.GetItem()
26
27 if item != self.GetRootItem():
28 self.draggingItem = item
29 event.Allow() # if DnD of this item is okay Allow it.
30
31 def IsDescendant(self, firstItem, secondItem):
32 "Recursive check if firstItem is a descendant of a secondItem."
33 if firstItem == self._root:
34 return False
35 parentItem = self.GetItemParent(firstItem)
36 if parentItem == secondItem:
37 return True
38 else:
39 return self.IsDescendant(parentItem, secondItem)
8fa876ca 40
c4ef95da
RD
41 def OnEndDrag(self, evt):
42 itemSrc = self.draggingItem
43 itemDst = evt.GetItem()
44 self.draggingItem = None
8bf5d46e 45
c4ef95da
RD
46 if not itemDst.IsOk():
47 print "Can't drag to here..."
48 return
8bf5d46e 49
c4ef95da
RD
50 if self.IsDescendant(itemDst, itemSrc):
51 print "Can't move item to its descendant"
52 return
53
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)
59 self.Delete(itemSrc)
60
61
62 # Define a handler for start element events
63 def StartElement(self, name, attrs ):
64 if py2:
65 name = name.encode()
66
67 id = self.AppendItem(self.nodeStack[-1], name)
68 self.nodeStack.append(id)
69
70 def EndElement(self, name ):
71 self.nodeStack = self.nodeStack[:-1]
72
73 def CharacterData(self, data ):
74 if data.strip():
75 if py2:
76 data = data.encode()
8fa876ca 77
c4ef95da 78 self.AppendItem(self.nodeStack[-1], data)
8bf5d46e
RD
79
80
c4ef95da
RD
81 def LoadTree(self, filename):
82 # Create a parser
83 Parser = expat.ParserCreate()
8bf5d46e 84
c4ef95da
RD
85 # Tell the parser what the start element handler is
86 Parser.StartElementHandler = self.StartElement
87 Parser.EndElementHandler = self.EndElement
88 Parser.CharacterDataHandler = self.CharacterData
8bf5d46e 89
c4ef95da
RD
90 # Parse the XML File
91 ParserStatus = Parser.Parse(open(filename,'r').read(), 1)
8bf5d46e
RD
92
93
c4ef95da
RD
94def runTest(frame, nb, log):
95 win = XMLTree(nb, -1)
96 win.LoadTree("paper.xml")
97 return win
8bf5d46e
RD
98
99#----------------------------------------------------------------------
100
101
102
8bf5d46e
RD
103overview = """\
104"""
105
1fded56b 106
1fded56b
RD
107if __name__ == '__main__':
108 import sys,os
109 import run
8eca4fef 110 run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])