]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/demo/XMLtreeview.py
added wxVaCopy() and use it to fix wxVsnprintf() crash (see bug 1017651)
[wxWidgets.git] / wxPython / demo / XMLtreeview.py
index 081ac5f0f6dc74d1941a87df12a18a9a50a86875..91a624e179dad82ee619ed1cbf3a701b21d55e73 100644 (file)
@@ -1,9 +1,9 @@
 
-import sys
+import  sys
+import  wx
 
 py2 = sys.version[0] == '2'
 
-from wxPython.wx import *
 try:
     if py2:
         from xml.parsers import expat
@@ -19,34 +19,48 @@ except ImportError:
 
 if not haveXML:
     def runTest(frame, nb, log):
-        dlg = wxMessageDialog(frame, 'This demo requires the XML package.  '
-                              'See http://www.python.org/sigs/xml-sig/',
-                          'Sorry', wxOK | wxICON_INFORMATION)
+        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(wxTreeCtrl):
+    class XMLTree(wx.TreeCtrl):
         def __init__(self, parent, ID):
-            wxTreeCtrl.__init__(self, parent, ID)
-            self.nodeStack = [self.AddRoot("Root")]
+            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 = wxImageList(16,16)
+            self.il = wx.ImageList(16,16)
             self.SetImageList(self.il)
 
             # event handlers for DnD
-            EVT_TREE_BEGIN_DRAG(self, ID, self.OnBeginDrag)
-            EVT_TREE_END_DRAG(self, ID, self.OnEndDrag)
+            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
@@ -57,6 +71,10 @@ else:
                 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...
@@ -69,6 +87,7 @@ else:
         def StartElement(self, name, attrs ):
             if py2:
                 name = name.encode()
+
             id = self.AppendItem(self.nodeStack[-1], name)
             self.nodeStack.append(id)
 
@@ -79,6 +98,7 @@ else:
             if data.strip():
                 if py2:
                     data = data.encode()
+
                 self.AppendItem(self.nodeStack[-1], data)
 
 
@@ -104,17 +124,11 @@ else:
 
 
 
-
-
-
 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:])