]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/demo/pyTree.py
Don't decref if the interpreter is not initialized, (eg. it's in its
[wxWidgets.git] / wxPython / demo / pyTree.py
index 4af73e3c666d34dd8ece7890e83182c64b699883..24892a90b1887df8d8d8800d84d2c7e20ad47ba9 100644 (file)
@@ -23,8 +23,10 @@ sample not because it's used, but because it's so
 beautifully documented...
 """
 
-from wxPython import wx
-import sys, string # Don't use it, but it's fun expanding :-)
+import  string  # Used for demo purposes, nothing more. :-)
+import  sys
+
+import  wx
 
 #----------------------------------------------------------------------
 
@@ -47,8 +49,10 @@ def _sourcefinder(func):
 
     for i in range(func.co_firstlineno):
         line = f.readline()
+
     ind = _getindent(line)
     msg = ""
+
     while line:
         msg = msg + line
         line = f.readline()
@@ -56,13 +60,14 @@ def _sourcefinder(func):
         # confused by multiline docstrings. Using == works most of
         # the time... but not always!
         if _getindent(line) == ind: break
+
     return msg
 
 #----------------------------------------------------------------------
 
-class pyTree(wx.wxTreeCtrl):
+class pyTree(wx.TreeCtrl):
     """
-    This wxTreeCtrl derivative displays a tree view of a Python namespace.
+    This wx.TreeCtrl derivative displays a tree view of a Python namespace.
     Anything from which the dir() command returns a non-empty list is a branch
     in this tree.
     """
@@ -75,14 +80,18 @@ class pyTree(wx.wxTreeCtrl):
         SEL_CHANGED handler attempts to display interesting
         information about the selected object.
         """
-        wx.wxTreeCtrl.__init__(self, parent, id)
-        self.root = self.AddRoot(str(root), -1, -1, wx.wxTreeItemData(root))
+        wx.TreeCtrl.__init__(self, parent, id)
+        self.root = self.AddRoot(str(root), -1, -1, wx.TreeItemData(root))
+
         if dir(root):
-            self.SetItemHasChildren(self.root, wx.TRUE)
-        wx.EVT_TREE_ITEM_EXPANDING(self, self.GetId(), self.OnItemExpanding)
-        wx.EVT_TREE_ITEM_COLLAPSED(self, self.GetId(), self.OnItemCollapsed)
-        wx.EVT_TREE_SEL_CHANGED(self, self.GetId(), self.OnSelChanged)
+            self.SetItemHasChildren(self.root, True)
+
+        self.Bind(wx.EVT_TREE_ITEM_EXPANDING, self.OnItemExpanding, id=self.GetId())
+        self.Bind(wx.EVT_TREE_ITEM_COLLAPSED, self.OnItemCollapsed, id=self.GetId())
+        self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged, id=self.GetId())
+
         self.output = None
+        self.Expand(self.root)
 
 
     def SetOutput(self, output):
@@ -111,14 +120,20 @@ class pyTree(wx.wxTreeCtrl):
         will again figure out what the offspring is.
         """
         item = event.GetItem()
+
+        if self.IsExpanded(item):  # This event can happen twice in the self.Expand call
+            return
+            
         obj = self.GetPyData( item )
         lst = dir(obj)
+
         for key in lst:
             new_obj = getattr(obj,key)
             new_item = self.AppendItem( item, key, -1, -1,
-                                        wx.wxTreeItemData(new_obj) )
+                                        wx.TreeItemData(new_obj) )
+
             if dir(new_obj):
-                self.SetItemHasChildren(new_item, wx.TRUE)
+                self.SetItemHasChildren(new_item, True)
 
     def OnItemCollapsed(self, event):
         """
@@ -137,16 +152,22 @@ class pyTree(wx.wxTreeCtrl):
         """
         if not self.output:
             return
+
         obj = self.GetPyData( event.GetItem() )
         msg = str(obj)
+
         if hasattr(obj, '__doc__'):
             msg = msg+"\n\nDocumentation string:\n\n%s" % ( getattr(obj, '__doc__'),)
+
         # Is it a function?
         func = None
+
         if hasattr(obj, "func_code"): # normal function
             func = getattr(obj, "func_code")
+
         elif hasattr(obj, "im_func"): # unbound class method
             func = getattr(getattr(obj, "im_func"), "func_code")
+
         if func: # if we found one, let's try to print the source
             msg = msg+"\n\nFunction source:\n\n" + _sourcefinder(func)
 
@@ -161,17 +182,15 @@ def runTest(frame, nb, log):
     This method is used by the wxPython Demo Framework for integrating
     this demo with the rest.
     """
-    #thisModule = __import__(__name__, globals())
     thisModule = sys.modules[__name__]
-    win = wx.wxFrame(frame, -1, "PyTreeItemData Test")
-    split = wx.wxSplitterWindow(win, -1)
+    win = wx.Frame(frame, -1, "PyTreeItemData Test")
+    split = wx.SplitterWindow(win, -1)
     tree = pyTree(split, -1, thisModule)
-    text = wx.wxTextCtrl(split, -1, "", wx.wxDefaultPosition,
-                         wx.wxDefaultSize, wx.wxTE_MULTILINE)
+    text = wx.TextCtrl(split, -1, "", style=wx.TE_MULTILINE)
     split.SplitVertically(tree, text, 200)
     tree.SetOutput(text.SetValue)
     tree.SelectItem(tree.root)
-    win.SetSize(wx.wxSize(800,500))
+    win.SetSize((800,500))
     frame.otherWin = win
     win.Show(1)
 
@@ -180,33 +199,31 @@ def runTest(frame, nb, log):
 #----------------------------------------------------------------------
 if __name__ == '__main__':
 
-    class MyFrame(wx.wxFrame):
+    class MyFrame(wx.Frame):
         """Very standard Frame class. Nothing special here!"""
 
         def __init__(self):
             """Make a splitter window; left a tree, right a textctrl. Wow."""
             import __main__
-            wx.wxFrame.__init__(self, wx.NULL, -1, "PyTreeItemData Test",
-                                wx.wxDefaultPosition, wx.wxSize(800,500))
-            split = wx.wxSplitterWindow(self, -1)
+            wx.Frame.__init__(self, None, -1, "PyTreeItemData Test", size=(800,500))
+            split = wx.SplitterWindow(self, -1)
             tree = pyTree(split, -1, __main__)
-            text = wx.wxTextCtrl(split, -1, "", wx.wxDefaultPosition,
-                                 wx.wxDefaultSize, wx.wxTE_MULTILINE)
+            text = wx.TextCtrl(split, -1, "", style=wx.TE_MULTILINE)
             split.SplitVertically(tree, text, 200)
             tree.SetOutput(text.SetValue)
             tree.SelectItem(tree.root)
 
-    class MyApp(wx.wxApp):
+    class MyApp(wx.App):
         """This class is even less interesting than MyFrame."""
 
         def OnInit(self):
             """OnInit. Boring, boring, boring!"""
             frame = MyFrame()
-            frame.Show(wx.TRUE)
+            frame.Show(True)
             self.SetTopWindow(frame)
-            return wx.TRUE
+            return True
 
-    app = MyApp(0)
+    app = MyApp(False)
     app.MainLoop()