From c320a48c2a6a63cdb24f44f8e19d0c87bbc78dfb Mon Sep 17 00:00:00 2001 From: "James E. Blair" Date: Wed, 21 Jan 2015 17:29:20 +1300 Subject: [PATCH] Use category min/max in change list colors When colorizing the votes on the change list, look up the category min and max values to use the stronger versions of those colors only if the min or max values are present. Change-Id: I37525f0d9cda09b644a4a9dac5266cb6d56ca346 --- gertty/db.py | 16 ++++++++++++++++ gertty/palette.py | 4 ++++ gertty/view/change.py | 11 +++-------- gertty/view/change_list.py | 24 ++++++++++++++++++------ 4 files changed, 41 insertions(+), 14 deletions(-) diff --git a/gertty/db.py b/gertty/db.py index f8d024d..d894de9 100644 --- a/gertty/db.py +++ b/gertty/db.py @@ -231,6 +231,22 @@ class Change(object): cat_value[approval.category] = cur_value self._approval_cache = cat_value + def getMinMaxPermittedForCategory(self, category): + if not hasattr(self, '_permitted_cache'): + self._updatePermittedCache() + return self._permitted_cache.get(category, (0,0)) + + def _updatePermittedCache(self): + cache = {} + for label in self.labels: + if label.category not in cache: + cache[label.category] = [0, 0] + if label.value > cache[label.category][1]: + cache[label.category][1] = label.value + if label.value < cache[label.category][0]: + cache[label.category][0] = label.value + self._permitted_cache = cache + def createRevision(self, *args, **kw): session = Session.object_session(self) args = [self] + list(args) diff --git a/gertty/palette.py b/gertty/palette.py index 760c9a1..f7c210e 100644 --- a/gertty/palette.py +++ b/gertty/palette.py @@ -23,6 +23,10 @@ DEFAULT_PALETTE={ 'negative-label': ['dark red', ''], 'max-label': ['light green', ''], 'min-label': ['light red', ''], + 'focused-positive-label': ['dark green,standout', ''], + 'focused-negative-label': ['dark red,standout', ''], + 'focused-max-label': ['light green,standout', ''], + 'focused-min-label': ['light red,standout', ''], 'link': ['dark blue', ''], 'focused-link': ['light blue', ''], # Diff diff --git a/gertty/view/change.py b/gertty/view/change.py index 06364e2..bd23122 100644 --- a/gertty/view/change.py +++ b/gertty/view/change.py @@ -569,14 +569,8 @@ class ChangeView(urwid.WidgetWrap): self.commit_message.set_text(change.revisions[-1].message) categories = [] - max_values = {} - min_values = {} approval_headers = [urwid.Text(('table-header', 'Name'))] for label in change.labels: - if label.value > max_values.get(label.category, 0): - max_values[label.category] = label.value - if label.value < min_values.get(label.category, 0): - min_values[label.category] = label.value if label.category in categories: continue approval_headers.append(urwid.Text(('table-header', label.category))) @@ -600,15 +594,16 @@ class ChangeView(urwid.WidgetWrap): approvals_for_name[approval.reviewer.name] = approvals votes.addRow(row) if str(approval.value) != '0': + cat_min, cat_max = change.getMinMaxPermittedForCategory(approval.category) if approval.value > 0: val = '+%i' % approval.value - if approval.value == max_values.get(approval.category): + if approval.value == cat_max: val = ('max-label', val) else: val = ('positive-label', val) else: val = '%i' % approval.value - if approval.value == min_values.get(approval.category): + if approval.value == cat_min: val = ('min-label', val) else: val = ('negative-label', val) diff --git a/gertty/view/change_list.py b/gertty/view/change_list.py index 7b72371..2ba7a04 100644 --- a/gertty/view/change_list.py +++ b/gertty/view/change_list.py @@ -50,6 +50,10 @@ class ChangeRow(urwid.Button): change_focus_map = {None: 'focused', 'unreviewed-change': 'focused-unreviewed-change', 'reviewed-change': 'focused-reviewed-change', + 'positive-label': 'focused-positive-label', + 'negative-label': 'focused-negative-label', + 'min-label': 'focused-min-label', + 'max-label': 'focused-max-label', } def selectable(self): @@ -100,14 +104,22 @@ class ChangeRow(urwid.Button): del self.columns.contents[self.num_columns:] for category in categories: v = change.getMaxForCategory(category) + cat_min, cat_max = change.getMinMaxPermittedForCategory(category) if v == 0: - v = '' - elif v < 0: - v = ('min-label', '%2i' % v) + val = '' elif v > 0: - v = ('max-label', '%2i' % v) - - self.columns.contents.append((urwid.Text(v), self.columns.options('given', 2))) + val = '%2i' % v + if v == cat_max: + val = ('max-label', val) + else: + val = ('positive-label', val) + else: + val = '%i' % v + if v == cat_min: + val = ('min-label', val) + else: + val = ('negative-label', val) + self.columns.contents.append((urwid.Text(val), self.columns.options('given', 2))) class ChangeListHeader(urwid.WidgetWrap): def __init__(self, project=False, owner=False, updated=False):