[Ocfs2-tools-commits] manish commits r825 -
trunk/ocfs2console/ocfs2interface
svn-commits at oss.oracle.com
svn-commits at oss.oracle.com
Tue Apr 19 04:45:40 CDT 2005
Author: manish
Date: 2005-04-19 04:45:38 -0500 (Tue, 19 Apr 2005)
New Revision: 825
Modified:
trunk/ocfs2console/ocfs2interface/bosa.py
Log:
Flesh out further
Modified: trunk/ocfs2console/ocfs2interface/bosa.py
===================================================================
--- trunk/ocfs2console/ocfs2interface/bosa.py 2005-04-19 09:45:28 UTC (rev 824)
+++ trunk/ocfs2console/ocfs2interface/bosa.py 2005-04-19 09:45:38 UTC (rev 825)
@@ -36,8 +36,6 @@
COLUMN_ITALIC
) = range(4)
-sample = ('-rw-r--r--', '1', 'manish', 'manish', '133194', '262144', 'Sep 29 12:46', 'closobo.c')
-
STOCK_LOADING = gtk.STOCK_REFRESH
STOCK_EMPTY = gtk.STOCK_STOP
STOCK_ERROR = gtk.STOCK_DIALOG_ERROR
@@ -52,6 +50,8 @@
except AttributeError:
STOCK_DIRECTORY = gtk.STOCK_OPEN
+INVALID_DENTRY = 'poop'
+
class InfoLabel(gtk.Label):
def __init__(self, field_type):
gtk.Label.__init__(self)
@@ -69,6 +69,9 @@
field = self.field_type(dentry, dinode)
self.set_text(field.text)
+ def clear(self):
+ self.set_text('')
+
class Browser(gtk.VBox):
def __init__(self, device=None):
self.device = device
@@ -85,23 +88,50 @@
self.scrl_win.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
self.add(self.scrl_win)
- self.store = gtk.TreeStore(str, gobject.TYPE_PYOBJECT,
- str, gobject.TYPE_BOOLEAN)
-
+ self.make_dentry_store()
self.make_file_view()
-
self.make_ls_fields()
self.connect('destroy', self.destroy_handler)
self.refresh()
+ def make_dentry_store(self):
+ def tree_compare(store, a, b):
+ d1 = self.get_dentry(store, a)
+ d2 = self.get_dentry(store, b)
+
+ if d1 is d2:
+ return 0
+ elif d1 is INVALID_DENTRY:
+ return 1
+ elif d2 is INVALID_DENTRY:
+ return -1
+ elif d1 and not d2:
+ return 1
+ elif not d1 and d2:
+ return -1
+ elif d1.file_type != d2.file_type:
+ if d1.file_type == ocfs2.FT_DIR:
+ return -1
+ elif d2.file_type == ocfs2.FT_DIR:
+ return 1
+ else:
+ return cmp(d1.name, d2.name)
+ else:
+ return cmp(d1.name, d2.name)
+
+ self.store = gtk.TreeStore(str, gobject.TYPE_PYOBJECT,
+ str, gobject.TYPE_BOOLEAN)
+
+ self.store.set_sort_func(COLUMN_NAME, tree_compare)
+ self.store.set_sort_column_id(COLUMN_NAME, gtk.SORT_ASCENDING)
+
def make_file_view(self):
tv = gtk.TreeView(self.store)
self.scrl_win.add(tv)
- set_props(tv, headers_visible=False,
- rules_hint=True)
+ set_props(tv, headers_visible=False)
column = gtk.TreeViewColumn()
@@ -119,10 +149,9 @@
tv.connect('test_expand_row', self.tree_expand_row)
tv.connect('test_collapse_row', self.tree_collapse_row)
- #tv.connect('row_activated', self.tree_row_activated)
- #sel = tv.get_selection()
- #sel.connect('changed', self.select)
+ sel = tv.get_selection()
+ sel.connect('changed', self.select_dentry)
def make_ls_fields(self):
table = gtk.Table(rows=2, columns=7)
@@ -167,7 +196,7 @@
self.store.append(parent, ('Empty', None, STOCK_EMPTY, True))
def make_error_node(self, parent=None):
- self.store.append(parent, ('Error', None, STOCK_ERROR, True))
+ self.store.append(parent, ('Error', INVALID_DENTRY, STOCK_ERROR, True))
def cleanup(self):
if hasattr(self, 'levels'):
@@ -194,7 +223,6 @@
else:
self.make_empty_node()
-
def add_level(self, dentry=None, parent=None):
if parent:
iter = self.store.iter_children(parent)
@@ -226,12 +254,9 @@
try:
dentry = level.diriter.next()
except (StopIteration, ocfs2.error), e:
- print e
self.destroy_level(level, isinstance(e, ocfs2.error))
return False
- print dentry
-
if dentry.file_type == ocfs2.FT_DIR:
self.make_dir_node(dentry, level.parent)
else:
@@ -275,7 +300,40 @@
level.collapsed = True
level.background()
-
+
+ def select_dentry(self, sel):
+ store, iter = sel.get_selected()
+
+ if store and iter:
+ dentry = self.get_dentry(store, iter)
+ else:
+ dentry = None
+
+ if dentry:
+ self.display_dentry(dentry)
+ else:
+ self.display_clear()
+
+ def display_dentry(self, dentry):
+ dinode = self.fs.read_cached_inode(dentry.inode)
+
+ for label in self.info_labels:
+ label.update(dentry, dinode)
+
+ def display_clear(self):
+ for label in self.info_labels:
+ label.clear()
+
+ def get_dentry(self, store, iter):
+ info_obj = store[iter][COLUMN_INFO_OBJECT]
+
+ if isinstance(info_obj, ocfs2.DirEntry):
+ return info_obj
+ elif isinstance(info_obj, TreeLevel):
+ return info_obj.dentry
+ else:
+ return None
+
class TreeLevel(gidle.Idle):
def __init__(self, diriter, dentry=None, parent=None):
gidle.Idle.__init__(self)
More information about the Ocfs2-tools-commits
mailing list