]> git.saurik.com Git - wxWidgets.git/blobdiff - utils/wxPython/tests/testTree.py
Some minor tweaks
[wxWidgets.git] / utils / wxPython / tests / testTree.py
diff --git a/utils/wxPython/tests/testTree.py b/utils/wxPython/tests/testTree.py
new file mode 100644 (file)
index 0000000..e445371
--- /dev/null
@@ -0,0 +1,116 @@
+#!/usr/bin/env python
+
+from wxPython import wx
+import sys, os
+from stat import *
+
+GlobalObjList = []
+
+class Obj:
+       def __init__(self, obj):
+               self.obj = obj
+               # Uncomment next line to eliminate crash.
+               # GlobalObjList.append(self)
+
+       def Name(self):
+               head, tail = os.path.split(self.obj)
+               if tail:
+                       return tail
+               else:
+                       return head
+               
+       def HasChildren(self):
+               return os.path.isdir(self.obj)
+       
+       def Children(self):
+               objList = os.listdir(self.obj)
+               objList.sort()
+               objList = map(lambda obj,parent=self.obj: os.path.join(parent,obj),
+                                         objList)
+               objectList = map(Obj, objList)
+               return objectList
+       
+       def __str__(self):
+               return self.obj
+       
+       def __repr__(self):
+               return self.obj
+
+       def __del__(self):
+               print 'del', self.obj
+               
+
+#----------------------------------------------------------------------
+
+class pyTree(wx.wxTreeCtrl):
+
+       def __init__(self, parent, id, obj):
+               wx.wxTreeCtrl.__init__(self, parent, id)
+               self.root = self.AddRoot(obj.Name(), -1, -1, wx.wxTreeItemData(''))
+               self.SetPyData(self.root, obj)
+               if obj.HasChildren():
+                       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.output = None
+
+       def SetOutput(self, output):
+               self.output = output
+
+       def OnItemExpanding(self,event):
+               item = event.GetItem()
+               obj = self.GetPyData(item)
+               children = obj.Children()
+               for child in children:
+                       new_item = self.AppendItem(item, child.Name(), -1, -1,
+                                                                          wx.wxTreeItemData(''))
+                       self.SetPyData(new_item, child)
+                       if child.HasChildren():
+                               self.SetItemHasChildren(new_item, wx.TRUE)
+
+       def OnItemCollapsed(self, event):
+               item = event.GetItem()
+               self.DeleteChildren(item)
+
+       def OnSelChanged(self, event):
+               if not self.output:
+                       return
+               obj = self.GetPyData( event.GetItem() )
+               apply(self.output, (`obj`,))
+
+
+
+#----------------------------------------------------------------------
+if __name__ == '__main__':
+
+       class MyFrame(wx.wxFrame):
+
+               def __init__(self):
+                       wx.wxFrame.__init__(self, wx.NULL, -1, 'PyTreeItemData Test',
+                                                               wx.wxDefaultPosition, wx.wxSize(600,500))
+                       split = wx.wxSplitterWindow(self, -1)
+                       
+                       if sys.platform == 'win32':
+                               tree = pyTree(split, -1, Obj('C:\\'))
+                       else:
+                               tree = pyTree(split, -1, Obj('/'))
+                               
+                       text = wx.wxTextCtrl(split, -1, '', wx.wxDefaultPosition,
+                                                                wx.wxDefaultSize, wx.wxTE_MULTILINE)
+                       split.SplitVertically(tree, text, 200)
+                       tree.SetOutput(text.SetValue)
+                       tree.SelectItem(tree.root)
+
+       class MyApp(wx.wxApp):
+                
+               def OnInit(self):
+                       frame = MyFrame()
+                       frame.Show(wx.TRUE)
+                       self.SetTopWindow(frame)
+                       return wx.TRUE
+
+       app = MyApp(0)
+       app.MainLoop()
+
+