-#!/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()
-
-