summaryrefslogtreecommitdiff
path: root/fs/browsewin.py
diff options
context:
space:
mode:
authorwillmcgugan <willmcgugan@67cdc799-7952-0410-af00-57a81ceafa0f>2008-07-20 19:39:10 +0000
committerwillmcgugan <willmcgugan@67cdc799-7952-0410-af00-57a81ceafa0f>2008-07-20 19:39:10 +0000
commit5fb65f3f12a07c75e9e863fea0224ea8e56eff2d (patch)
tree72debfd3c0ba53f845c6b0ba029f579695c46743 /fs/browsewin.py
parent569bd74fea7a3d91b94d1d6fecc4a30474ca9364 (diff)
downloadpyfilesystem-5fb65f3f12a07c75e9e863fea0224ea8e56eff2d.tar.gz
First check-in, lots of work to do!
git-svn-id: http://pyfilesystem.googlecode.com/svn/trunk@2 67cdc799-7952-0410-af00-57a81ceafa0f
Diffstat (limited to 'fs/browsewin.py')
-rw-r--r--fs/browsewin.py94
1 files changed, 94 insertions, 0 deletions
diff --git a/fs/browsewin.py b/fs/browsewin.py
new file mode 100644
index 0000000..5faa435
--- /dev/null
+++ b/fs/browsewin.py
@@ -0,0 +1,94 @@
+#!/usr/bin/env python
+
+import wx
+
+import fs
+
+
+
+class BrowseFrame(wx.Frame):
+
+ def __init__(self, fs):
+ wx.Frame.__init__(self, None)
+
+ self.fs = fs
+ self.SetTitle("FS Browser - "+str(fs))
+
+ self.tree = wx.TreeCtrl(self, -1)
+ self.root_id = self.tree.AddRoot(str(fs), data=wx.TreeItemData( {'path':"/", 'expanded':False} ))
+
+ isz = (16, 16)
+ il = wx.ImageList(isz[0], isz[1])
+ self.fldridx = il.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, isz))
+ self.fldropenidx = il.Add(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN, wx.ART_OTHER, isz))
+ self.fileidx = il.Add(wx.ArtProvider_GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, isz))
+
+ self.tree.SetImageList(il)
+ self.il = il
+
+ self.tree.SetItemImage(self.root_id, self.fldridx, wx.TreeItemIcon_Normal)
+ self.tree.SetItemImage(self.root_id, self.fldropenidx, wx.TreeItemIcon_Expanded)
+
+ self.Bind(wx.EVT_TREE_ITEM_EXPANDED, self.OnItemExpanded)
+
+ self.expand(self.root_id)
+
+
+ def expand(self, item_id):
+
+ item_data = self.tree.GetItemData(item_id).GetData()
+
+ path = item_data["path"]
+
+ if not self.fs.isdir(path):
+ return
+
+ if item_data['expanded']:
+ self.tree.Expand(item_id)
+ return
+
+ paths = self.fs.listdir(path, absolute=True)
+
+ if not paths:
+ self.tree.SetItemHasChildren(item_id, False)
+ self.tree.Collapse(item_id)
+ return
+
+
+ paths.sort(key=lambda p:(not self.fs.isdir(p), p.lower()))
+
+
+ for new_path in paths:
+
+ is_dir = self.fs.isdir(new_path)
+ name = fs.pathsplit(new_path)[-1]
+ new_item = self.tree.AppendItem(item_id, name, data=wx.TreeItemData( {'path':new_path, 'expanded':False}))
+
+ if is_dir:
+ self.tree.SetItemHasChildren(new_item)
+ self.tree.SetItemImage(new_item, self.fldridx, wx.TreeItemIcon_Normal)
+ self.tree.SetItemImage(new_item, self.fldropenidx, wx.TreeItemIcon_Expanded)
+ else:
+ self.tree.SetItemImage(new_item, self.fileidx, wx.TreeItemIcon_Normal)
+
+
+ item_data['expanded'] = True
+ self.tree.Expand(item_id)
+
+
+ def OnItemExpanded(self, e):
+
+ self.expand(e.GetItem())
+
+
+def browse(fs):
+
+ app = wx.PySimpleApp()
+ frame = BrowseFrame(fs)
+ frame.Show()
+ app.MainLoop()
+
+if __name__ == "__main__":
+
+ home_fs = fs.OSFS("~/")
+ browse(home_fs)