X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8fa876ca9ec87e90605808bfcab4d4226965dbad..b4eecebd423df0c6efe86d7658cd3df818d67ed8:/wxPython/demo/XMLtreeview.py?ds=sidebyside diff --git a/wxPython/demo/XMLtreeview.py b/wxPython/demo/XMLtreeview.py index 48edac38e9..36dc81f63f 100644 --- a/wxPython/demo/XMLtreeview.py +++ b/wxPython/demo/XMLtreeview.py @@ -1,114 +1,98 @@ -# 11/22/2003 - Jeff Grimmett (grimmtooth@softhome.net) -# -# o Updated for wx namespace -# import sys import wx -py2 = sys.version[0] == '2' - -try: - if py2: - from xml.parsers import expat - parsermodule = expat - else: - from xml.parsers import pyexpat - parsermodule = pyexpat - haveXML = True -except ImportError: - haveXML = False +from xml.parsers import expat #---------------------------------------------------------------------- -if not haveXML: - def runTest(frame, nb, log): - dlg = wx.MessageDialog( - frame, 'This demo requires the XML package. ' - 'See http://www.python.org/sigs/xml-sig/', - 'Sorry', wx.OK | wx.ICON_INFORMATION - ) - - dlg.ShowModal() - dlg.Destroy() - -else: +class XMLTree(wx.TreeCtrl): + def __init__(self, parent, ID): + wx.TreeCtrl.__init__(self, parent, ID) + self._root = self.AddRoot("Root") + self.nodeStack = [self._root] - class XMLTree(wx.TreeCtrl): - def __init__(self, parent, ID): - wx.TreeCtrl.__init__(self, parent, ID) - self.nodeStack = [self.AddRoot("Root")] + # Trees need an image list to do DnD... + self.il = wx.ImageList(16,16) + self.SetImageList(self.il) - # 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) - # 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() - 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. - 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 - 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 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) + # 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 ): - if py2: - name = name.encode() + # 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) + id = self.AppendItem(self.nodeStack[-1], name) + self.nodeStack.append(id) - def EndElement(self, name ): - self.nodeStack = self.nodeStack[:-1] + def EndElement(self, name ): + self.nodeStack = self.nodeStack[:-1] - def CharacterData(self, data ): - if data.strip(): - if py2: - data = data.encode() + def CharacterData(self, data ): + if data.strip(): + data = data.encode() - self.AppendItem(self.nodeStack[-1], data) + self.AppendItem(self.nodeStack[-1], data) - def LoadTree(self, filename): - # Create a parser - Parser = parsermodule.ParserCreate() + 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 + # 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) + # 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 +def runTest(frame, nb, log): + win = XMLTree(nb, -1) + win.LoadTree("paper.xml") + return win #---------------------------------------------------------------------- @@ -121,4 +105,4 @@ overview = """\ if __name__ == '__main__': import sys,os import run - run.main(['', os.path.basename(sys.argv[0])]) + run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])