]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/demo/pyTree.py
Faster Deselect
[wxWidgets.git] / wxPython / demo / pyTree.py
index 47283527f113682690a5eef78742a88f28e23ea2..24892a90b1887df8d8d8800d84d2c7e20ad47ba9 100644 (file)
@@ -23,8 +23,10 @@ sample not because it's used, but because it's so
 beautifully documented...
 """
 
 beautifully documented...
 """
 
-from wxPython import wx
-import 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()
 
     for i in range(func.co_firstlineno):
         line = f.readline()
+
     ind = _getindent(line)
     msg = ""
     ind = _getindent(line)
     msg = ""
+
     while line:
         msg = msg + line
         line = f.readline()
     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
         # confused by multiline docstrings. Using == works most of
         # the time... but not always!
         if _getindent(line) == ind: break
+
     return msg
 
 #----------------------------------------------------------------------
 
     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.
     """
     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.
         """
         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):
         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.output = None
+        self.Expand(self.root)
 
 
     def SetOutput(self, output):
 
 
     def SetOutput(self, output):
@@ -111,14 +120,20 @@ class pyTree(wx.wxTreeCtrl):
         will again figure out what the offspring is.
         """
         item = event.GetItem()
         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)
         obj = self.GetPyData( item )
         lst = dir(obj)
+
         for key in lst:
             new_obj = getattr(obj,key)
             new_item = self.AppendItem( item, key, -1, -1,
         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):
             if dir(new_obj):
-                self.SetItemHasChildren(new_item, wx.TRUE)
+                self.SetItemHasChildren(new_item, True)
 
     def OnItemCollapsed(self, event):
         """
 
     def OnItemCollapsed(self, event):
         """
@@ -137,16 +152,22 @@ class pyTree(wx.wxTreeCtrl):
         """
         if not self.output:
             return
         """
         if not self.output:
             return
+
         obj = self.GetPyData( event.GetItem() )
         msg = str(obj)
         obj = self.GetPyData( event.GetItem() )
         msg = str(obj)
+
         if hasattr(obj, '__doc__'):
             msg = msg+"\n\nDocumentation string:\n\n%s" % ( getattr(obj, '__doc__'),)
         if hasattr(obj, '__doc__'):
             msg = msg+"\n\nDocumentation string:\n\n%s" % ( getattr(obj, '__doc__'),)
+
         # Is it a function?
         func = None
         # Is it a function?
         func = None
+
         if hasattr(obj, "func_code"): # normal function
             func = getattr(obj, "func_code")
         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")
         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)
 
         if func: # if we found one, let's try to print the source
             msg = msg+"\n\nFunction source:\n\n" + _sourcefinder(func)
 
@@ -161,16 +182,15 @@ def runTest(frame, nb, log):
     This method is used by the wxPython Demo Framework for integrating
     this demo with the rest.
     """
     This method is used by the wxPython Demo Framework for integrating
     this demo with the rest.
     """
-    thisModule = __import__(__name__, globals())
-    win = wx.wxFrame(frame, -1, "PyTreeItemData Test")
-    split = wx.wxSplitterWindow(win, -1)
+    thisModule = sys.modules[__name__]
+    win = wx.Frame(frame, -1, "PyTreeItemData Test")
+    split = wx.SplitterWindow(win, -1)
     tree = pyTree(split, -1, thisModule)
     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)
     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)
 
     frame.otherWin = win
     win.Show(1)
 
@@ -179,33 +199,31 @@ def runTest(frame, nb, log):
 #----------------------------------------------------------------------
 if __name__ == '__main__':
 
 #----------------------------------------------------------------------
 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__
         """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__)
             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)
 
             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()
         """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)
             self.SetTopWindow(frame)
-            return wx.TRUE
+            return True
 
 
-    app = MyApp(0)
+    app = MyApp(False)
     app.MainLoop()
 
 
     app.MainLoop()