wxWidgets/utils/wxPython/tests/testTree.py

117 lines
2.7 KiB
Python
Raw Normal View History

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