[meld] ui.cellrenderers: Add a file perms cell renderer and update dirdiff



commit 3524f3cfd9d3c87477b66fa01ef0843665f0ab87
Author: Kai Willadsen <kai willadsen gmail com>
Date:   Sun Oct 23 13:54:19 2016 +1000

    ui.cellrenderers: Add a file perms cell renderer and update dirdiff

 meld/dirdiff.py          | 20 ++++++--------------
 meld/ui/cellrenderers.py | 32 ++++++++++++++++++++++++++++++++
 2 files changed, 38 insertions(+), 14 deletions(-)
---
diff --git a/meld/dirdiff.py b/meld/dirdiff.py
index c6f6fc12..7b85bcff 100644
--- a/meld/dirdiff.py
+++ b/meld/dirdiff.py
@@ -45,7 +45,8 @@ from meld.misc import all_same
 from meld.recent import RecentType
 from meld.settings import bind_settings, meldsettings, settings
 from meld.treehelpers import refocus_deleted_path
-from meld.ui.cellrenderers import CellRendererByteSize, CellRendererDate
+from meld.ui.cellrenderers import (
+    CellRendererByteSize, CellRendererDate, CellRendererFileMode)
 
 
 ################################################################################
@@ -210,7 +211,7 @@ COL_EMBLEM, COL_SIZE, COL_TIME, COL_PERMS, COL_END = \
 
 class DirDiffTreeStore(tree.DiffTreeStore):
     def __init__(self, ntree):
-        tree.DiffTreeStore.__init__(self, ntree, [str, object, object, str])
+        tree.DiffTreeStore.__init__(self, ntree, [str, object, object, object])
 
 
 class CanonicalListing(object):
@@ -406,9 +407,9 @@ class DirDiff(melddoc.MeldDoc, gnomeglade.Component):
             # Create permissions CellRenderer
             column = Gtk.TreeViewColumn(_("Permissions"))
             column.set_resizable(True)
-            rentext = Gtk.CellRendererText()
+            rentext = CellRendererFileMode()
             column.pack_start(rentext, False)
-            column.set_attributes(rentext, markup=col_index(COL_PERMS, i))
+            column.set_attributes(rentext, file_mode=col_index(COL_PERMS, i))
             self.treeview[i].append_column(column)
             self.columns_dict[i]["permissions"] = column
 
@@ -1317,17 +1318,8 @@ class DirDiff(melddoc.MeldDoc, gnomeglade.Component):
                 SIZE = self.model.column_index(COL_SIZE, j)
                 self.model.set_value(it, SIZE, sizes[j])
 
-                def format_mode(mode):
-                    perms = []
-                    rwx = ((4, 'r'), (2, 'w'), (1, 'x'))
-                    for group_index in (6, 3, 0):
-                        group = mode >> group_index & 7
-                        perms.extend([p if group & i else '-' for i, p in rwx])
-                    return "".join(perms)
-
                 PERMS = self.model.column_index(COL_PERMS, j)
-                perm_str = format_mode(perms[j])
-                self.model.set_value(it, PERMS, perm_str)
+                self.model.set_value(it, PERMS, perms[j])
 
         for j in range(self.model.ntree):
             if not mod_times[j]:
diff --git a/meld/ui/cellrenderers.py b/meld/ui/cellrenderers.py
index c4613c6e..18089e3f 100644
--- a/meld/ui/cellrenderers.py
+++ b/meld/ui/cellrenderers.py
@@ -79,3 +79,35 @@ class CellRendererByteSize(Gtk.CellRendererText):
         getter=get_bytesize,
         setter=set_bytesize,
     )
+
+
+class CellRendererFileMode(Gtk.CellRendererText):
+
+    __gtype_name__ = "CellRendererFileMode"
+
+    DATETIME_FORMAT = "%a %d %b %Y %H:%M:%S"
+
+    def get_file_mode(self):
+        return getattr(self, '_file_mode', None)
+
+    def set_file_mode(self, value):
+        if value == self.get_file_mode():
+            return
+        if value is None:
+            mode_str = ''
+        else:
+            perms = []
+            rwx = ((4, 'r'), (2, 'w'), (1, 'x'))
+            for group_index in (6, 3, 0):
+                group = value >> group_index & 7
+                perms.extend([p if group & i else '-' for i, p in rwx])
+            mode_str = "".join(perms)
+        self.props.markup = mode_str
+        self._file_mode = value
+
+    file_mode = GObject.property(
+        type=object,
+        nick="Byte size to display",
+        getter=get_file_mode,
+        setter=set_file_mode,
+    )


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]