]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/demo/XMLtreeview.py
Added possibility of 2-step initialisation, and wxWIZARD_EX_HELPBUTTON style.
[wxWidgets.git] / wxPython / demo / XMLtreeview.py
index 853bd40b8e076a15597c18fbd61cbd14f1f868b9..ce14928ce89516653dfef978f2f72c4939181702 100644 (file)
@@ -1,9 +1,16 @@
 
-import string
+import string, sys
+
+py2 = sys.version[0] == '2'
 
 from wxPython.wx import *
 try:
-    from xml.parsers import pyexpat
+    if py2:
+        from xml.parsers import expat
+        parsermodule = expat
+    else:
+        from xml.parsers import pyexpat
+        parsermodule = pyexpat
     haveXML = true
 except ImportError:
     haveXML = false
@@ -12,7 +19,8 @@ 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/',
+        dlg = wxMessageDialog(frame, 'This demo requires the XML package.  '
+                              'See http://www.python.org/sigs/xml-sig/',
                           'Sorry', wxOK | wxICON_INFORMATION)
         dlg.ShowModal()
         dlg.Destroy()
@@ -24,8 +32,43 @@ else:
             wxTreeCtrl.__init__(self, parent, ID)
             self.nodeStack = [self.AddRoot("Root")]
 
+            # Trees need an image list to do DnD...
+            self.il = wxImageList(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)
+
+
+        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 OnEndDrag(self, evt):
+            itemSrc = self.draggingItem
+            itemDst = evt.GetItem()
+            self.draggingItem = None
+
+            if not itemDst.IsOk():
+                print "Can't drag to here..."
+                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 ):
+            if py2:
+                name = name.encode()
             id = self.AppendItem(self.nodeStack[-1], name)
             self.nodeStack.append(id)
 
@@ -34,12 +77,14 @@ else:
 
         def CharacterData(self, data ):
             if string.strip(data):
+                if py2:
+                    data = data.encode()
                 self.AppendItem(self.nodeStack[-1], data)
 
 
         def LoadTree(self, filename):
             # Create a parser
-            Parser = pyexpat.ParserCreate()
+            Parser = parsermodule.ParserCreate()
 
             # Tell the parser what the start element handler is
             Parser.StartElementHandler = self.StartElement