[meld] ui.cellrenderers: Add a byte size renderer and update dirdiff
- From: Kai Willadsen <kaiw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [meld] ui.cellrenderers: Add a byte size renderer and update dirdiff
- Date: Sat, 16 Dec 2017 02:37:47 +0000 (UTC)
commit aeb5a59c676584a6b51a47d66ffc5eb3d8950714
Author: Kai Willadsen <kai willadsen gmail com>
Date: Sun Oct 23 13:01:46 2016 +1000
ui.cellrenderers: Add a byte size renderer and update dirdiff
meld/dirdiff.py | 24 +++++-------------------
meld/ui/cellrenderers.py | 33 +++++++++++++++++++++++++++++++++
2 files changed, 38 insertions(+), 19 deletions(-)
---
diff --git a/meld/dirdiff.py b/meld/dirdiff.py
index da86c31c..c6f6fc12 100644
--- a/meld/dirdiff.py
+++ b/meld/dirdiff.py
@@ -45,7 +45,7 @@ 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 CellRendererDate
+from meld.ui.cellrenderers import CellRendererByteSize, CellRendererDate
################################################################################
@@ -210,7 +210,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, str, object, str])
+ tree.DiffTreeStore.__init__(self, ntree, [str, object, object, str])
class CanonicalListing(object):
@@ -390,9 +390,9 @@ class DirDiff(melddoc.MeldDoc, gnomeglade.Component):
# Create file size CellRenderer
column = Gtk.TreeViewColumn(_("Size"))
column.set_resizable(True)
- rentext = Gtk.CellRendererText()
+ rentext = CellRendererByteSize()
column.pack_start(rentext, True)
- column.set_attributes(rentext, markup=col_index(COL_SIZE, i))
+ column.set_attributes(rentext, bytesize=col_index(COL_SIZE, i))
self.treeview[i].append_column(column)
self.columns_dict[i]["size"] = column
# Create date-time CellRenderer
@@ -1314,22 +1314,8 @@ class DirDiff(melddoc.MeldDoc, gnomeglade.Component):
TIME = self.model.column_index(COL_TIME, j)
self.model.set_value(it, TIME, mod_times[j])
- def natural_size(bytes):
- suffixes = (
- 'B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'
- )
- size = float(bytes)
- unit = 0
- while size > 1000 and unit < len(suffixes) - 1:
- size /= 1000
- unit += 1
- format_str = "%.1f %s" if unit > 0 else "%d %s"
- return format_str % (size, suffixes[unit])
-
- # A SizeCellRenderer would be nicer, but potentially very slow
SIZE = self.model.column_index(COL_SIZE, j)
- size_str = natural_size(sizes[j])
- self.model.set_value(it, SIZE, size_str)
+ self.model.set_value(it, SIZE, sizes[j])
def format_mode(mode):
perms = []
diff --git a/meld/ui/cellrenderers.py b/meld/ui/cellrenderers.py
index ccd9f901..c4613c6e 100644
--- a/meld/ui/cellrenderers.py
+++ b/meld/ui/cellrenderers.py
@@ -45,4 +45,37 @@ class CellRendererDate(Gtk.CellRendererText):
getter=get_timestamp,
setter=set_timestamp,
)
+
+
+class CellRendererByteSize(Gtk.CellRendererText):
+
+ __gtype_name__ = "CellRendererByteSize"
+
+ def get_bytesize(self):
+ return getattr(self, '_bytesize', None)
+
+ def set_bytesize(self, value):
+ if value == self.get_bytesize():
+ return
+ if value is None:
+ byte_str = ''
+ else:
+ suffixes = (
+ 'B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'
+ )
+ size = float(value)
+ unit = 0
+ while size > 1000 and unit < len(suffixes) - 1:
+ size /= 1000
+ unit += 1
+ format_str = "%.1f %s" if unit > 0 else "%d %s"
+ byte_str = format_str % (size, suffixes[unit])
+ self.props.markup = byte_str
+ self._bytesize = value
+
+ bytesize = GObject.property(
+ type=object,
+ nick="Byte size to display",
+ getter=get_bytesize,
+ setter=set_bytesize,
)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]