Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/filelisting.py
diff options
context:
space:
mode:
Diffstat (limited to 'filelisting.py')
-rwxr-xr-xfilelisting.py168
1 files changed, 168 insertions, 0 deletions
diff --git a/filelisting.py b/filelisting.py
new file mode 100755
index 0000000..f0a1aa0
--- /dev/null
+++ b/filelisting.py
@@ -0,0 +1,168 @@
+#!/usr/bin/env python
+
+import os, stat, time
+import pygtk
+pygtk.require('2.0')
+import gtk
+
+folderxpm = [
+ "17 16 7 1",
+ " c #000000",
+ ". c #808000",
+ "X c yellow",
+ "o c #808080",
+ "O c #c0c0c0",
+ "+ c white",
+ "@ c None",
+ "@@@@@@@@@@@@@@@@@",
+ "@@@@@@@@@@@@@@@@@",
+ "@@+XXXX.@@@@@@@@@",
+ "@+OOOOOO.@@@@@@@@",
+ "@+OXOXOXOXOXOXO. ",
+ "@+XOXOXOXOXOXOX. ",
+ "@+OXOXOXOXOXOXO. ",
+ "@+XOXOXOXOXOXOX. ",
+ "@+OXOXOXOXOXOXO. ",
+ "@+XOXOXOXOXOXOX. ",
+ "@+OXOXOXOXOXOXO. ",
+ "@+XOXOXOXOXOXOX. ",
+ "@+OOOOOOOOOOOOO. ",
+ "@ ",
+ "@@@@@@@@@@@@@@@@@",
+ "@@@@@@@@@@@@@@@@@"
+ ]
+folderpb = gtk.gdk.pixbuf_new_from_xpm_data(folderxpm)
+
+filexpm = [
+ "12 12 3 1",
+ " c #000000",
+ ". c #ffff04",
+ "X c #b2c0dc",
+ "X XXX",
+ "X ...... XXX",
+ "X ...... X",
+ "X . ... X",
+ "X ........ X",
+ "X . .... X",
+ "X ........ X",
+ "X . .. X",
+ "X ........ X",
+ "X . .. X",
+ "X ........ X",
+ "X X"
+ ]
+filepb = gtk.gdk.pixbuf_new_from_xpm_data(filexpm)
+
+class FileListingCellDataExample:
+ column_names = ['Name', 'Size', 'Mode', 'Last Changed']
+
+ def delete_event(self, widget, event, data=None):
+ gtk.main_quit()
+ return False
+
+ def __init__(self, dname = None):
+ cell_data_funcs = (None, self.file_size, self.file_mode,
+ self.file_last_changed)
+
+ # Create a new window
+ self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
+
+ self.window.set_size_request(400, 300)
+
+ self.window.connect("delete_event", self.delete_event)
+
+ listmodel = self.make_list(dname)
+
+ # create the TreeView
+ self.treeview = gtk.TreeView()
+
+ # create the TreeViewColumns to display the data
+ self.tvcolumn = [None] * len(self.column_names)
+ cellpb = gtk.CellRendererPixbuf()
+ self.tvcolumn[0] = gtk.TreeViewColumn(self.column_names[0], cellpb)
+ self.tvcolumn[0].set_cell_data_func(cellpb, self.file_pixbuf)
+ cell = gtk.CellRendererText()
+ self.tvcolumn[0].pack_start(cell, False)
+ self.tvcolumn[0].set_cell_data_func(cell, self.file_name)
+ self.treeview.append_column(self.tvcolumn[0])
+ for n in range(1, len(self.column_names)):
+ cell = gtk.CellRendererText()
+ self.tvcolumn[n] = gtk.TreeViewColumn(self.column_names[n], cell)
+ if n == 1:
+ cell.set_property('xalign', 1.0)
+ self.tvcolumn[n].set_cell_data_func(cell, cell_data_funcs[n])
+ self.treeview.append_column(self.tvcolumn[n])
+
+ self.treeview.connect('row-activated', self.open_file)
+ self.scrolledwindow = gtk.ScrolledWindow()
+ self.scrolledwindow.add(self.treeview)
+ self.window.add(self.scrolledwindow)
+ self.treeview.set_model(listmodel)
+
+ self.window.show_all()
+ return
+
+ def make_list(self, dname=None):
+ if not dname:
+ self.dirname = os.path.expanduser('~')
+ else:
+ self.dirname = os.path.abspath(dname)
+ self.window.set_title(self.dirname)
+ files = [f for f in os.listdir(self.dirname) if f[0] <> '.']
+ files.sort()
+ files = ['..'] + files
+ listmodel = gtk.ListStore(object)
+ for f in files:
+ listmodel.append([f])
+ return listmodel
+
+ def open_file(self, treeview, path, column):
+ model = treeview.get_model()
+ iter = model.get_iter(path)
+ filename = os.path.join(self.dirname, model.get_value(iter, 0))
+ filestat = os.stat(filename)
+ if stat.S_ISDIR(filestat.st_mode):
+ new_model = self.make_list(filename)
+ treeview.set_model(new_model)
+ return
+
+ def file_pixbuf(self, column, cell, model, iter):
+ filename = os.path.join(self.dirname, model.get_value(iter, 0))
+ filestat = os.stat(filename)
+ if stat.S_ISDIR(filestat.st_mode):
+ pb = folderpb
+ else:
+ pb = filepb
+ cell.set_property('pixbuf', pb)
+ return
+
+ def file_name(self, column, cell, model, iter):
+ cell.set_property('text', model.get_value(iter, 0))
+ return
+
+ def file_size(self, column, cell, model, iter):
+ filename = os.path.join(self.dirname, model.get_value(iter, 0))
+ filestat = os.stat(filename)
+ cell.set_property('text', filestat.st_size)
+ return
+
+ def file_mode(self, column, cell, model, iter):
+ filename = os.path.join(self.dirname, model.get_value(iter, 0))
+ filestat = os.stat(filename)
+ cell.set_property('text', oct(stat.S_IMODE(filestat.st_mode)))
+ return
+
+
+ def file_last_changed(self, column, cell, model, iter):
+ filename = os.path.join(self.dirname, model.get_value(iter, 0))
+ filestat = os.stat(filename)
+ cell.set_property('text', time.ctime(filestat.st_mtime))
+ return
+
+def main():
+ gtk.main()
+
+if __name__ == "__main__":
+ flcdexample = FileListingCellDataExample()
+ main()
+