+++ /dev/null
-
-import sys
-import wx
-
-from xml.parsers import expat
-
-#----------------------------------------------------------------------
-
-class XMLTree(wx.TreeCtrl):
- def __init__(self, parent, ID):
- wx.TreeCtrl.__init__(self, parent, ID)
- self._root = self.AddRoot("Root")
- self.nodeStack = [self._root]
-
- # Trees need an image list to do DnD...
- self.il = wx.ImageList(16,16)
- self.SetImageList(self.il)
-
- # event handlers for DnD
- self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnBeginDrag)
- self.Bind(wx.EVT_TREE_END_DRAG, self.OnEndDrag)
-
-
- def OnBeginDrag(self, event):
- item = event.GetItem()
-
- if item != self.GetRootItem():
- self.draggingItem = item
- event.Allow() # if DnD of this item is okay Allow it.
-
- def IsDescendant(self, firstItem, secondItem):
- "Recursive check if firstItem is a descendant of a secondItem."
- if firstItem == self._root:
- return False
- parentItem = self.GetItemParent(firstItem)
- if parentItem == secondItem:
- return True
- else:
- return self.IsDescendant(parentItem, secondItem)
-
- def OnEndDrag(self, evt):
- itemSrc = self.draggingItem
- itemDst = evt.GetItem()
- self.draggingItem = None
-
- if not itemDst.IsOk():
- print "Can't drag to here..."
- return
-
- if self.IsDescendant(itemDst, itemSrc):
- print "Can't move item to its descendant"
- return
-
- # For this simple example just take the text of the source item
- # and append it to the destination item. In real life you would
- # possibly want to copy subtrees...
- text = self.GetItemText(itemSrc)
- self.AppendItem(itemDst, text)
- self.Delete(itemSrc)
-
-
- # Define a handler for start element events
- def StartElement(self, name, attrs ):
- name = name.encode()
-
- id = self.AppendItem(self.nodeStack[-1], name)
- self.nodeStack.append(id)
-
- def EndElement(self, name ):
- self.nodeStack = self.nodeStack[:-1]
-
- def CharacterData(self, data ):
- if data.strip():
- data = data.encode()
-
- self.AppendItem(self.nodeStack[-1], data)
-
-
- def LoadTree(self, filename):
- # Create a parser
- Parser = expat.ParserCreate()
-
- # Tell the parser what the start element handler is
- Parser.StartElementHandler = self.StartElement
- Parser.EndElementHandler = self.EndElement
- Parser.CharacterDataHandler = self.CharacterData
-
- # Parse the XML File
- ParserStatus = Parser.Parse(open(filename,'r').read(), 1)
-
-
-def runTest(frame, nb, log):
- win = XMLTree(nb, -1)
- win.LoadTree("paper.xml")
- return win
-
-#----------------------------------------------------------------------
-
-
-
-overview = """\
-"""
-
-
-if __name__ == '__main__':
- import sys,os
- import run
- run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])