From 7e85ed374531474de277d521393a1af54a8ad42a Mon Sep 17 00:00:00 2001 From: "James E. Blair" <jeblair@hp.com> Date: Sat, 21 Mar 2015 20:17:17 -0700 Subject: [PATCH] Highlight starred changes in list Leave a space for flags immediately to the left of the subject in change lists. If the change is starred, place an asterisk there and highlight the row. Also permit toggling whether a change is starred from within the list. Change-Id: I221efa72921adf980db07f93ad1264e8ec1db7b1 --- gertty/palette.py | 2 ++ gertty/view/change_list.py | 34 ++++++++++++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/gertty/palette.py b/gertty/palette.py index f7c210e..cbca463 100644 --- a/gertty/palette.py +++ b/gertty/palette.py @@ -79,6 +79,8 @@ DEFAULT_PALETTE={ 'reviewed-change': ['dark gray', ''], 'focused-unreviewed-change': ['default,standout', ''], 'focused-reviewed-change': ['dark gray,standout', ''], + 'starred-change': ['light cyan', ''], + 'focused-starred-change': ['light cyan,standout', ''], } # A delta from the default palette diff --git a/gertty/view/change_list.py b/gertty/view/change_list.py index 5ff2bc5..d7b17ce 100644 --- a/gertty/view/change_list.py +++ b/gertty/view/change_list.py @@ -51,6 +51,7 @@ class ChangeRow(urwid.Button): change_focus_map = {None: 'focused', 'unreviewed-change': 'focused-unreviewed-change', 'reviewed-change': 'focused-reviewed-change', + 'starred-change': 'focused-starred-change', 'positive-label': 'focused-positive-label', 'negative-label': 'focused-negative-label', 'min-label': 'focused-min-label', @@ -88,11 +89,17 @@ class ChangeRow(urwid.Button): style = 'reviewed-change' else: style = 'unreviewed-change' - self.row_style.set_attr_map({None: style}) if hasattr(change, '_subject'): subject = change._subject else: subject = change.subject + flag = ' ' + color = None + if change.starred: + flag = '*' + style = 'starred-change' + subject = flag + subject + self.row_style.set_attr_map({None: style}) self.subject.set_text(subject) self.number.set_text(str(change.number)) self.project.set_text(change.project.name.split('/')[-1]) @@ -125,7 +132,7 @@ class ChangeRow(urwid.Button): class ChangeListHeader(urwid.WidgetWrap): def __init__(self, project=False, owner=False, updated=False): - cols = [(6, urwid.Text(u'Number')), ('weight', 4, urwid.Text(u'Subject'))] + cols = [(6, urwid.Text(u'Number')), ('weight', 4, urwid.Text(u' Subject'))] if project: cols.append(('weight', 1, urwid.Text(u'Project'))) if owner: @@ -151,6 +158,8 @@ class ChangeListView(urwid.WidgetWrap): "Toggle whether only unreviewed or all changes are displayed"), (key(keymap.TOGGLE_REVIEWED), "Toggle the reviewed flag for the currently selected change"), + (key(keymap.TOGGLE_STARRED), + "Toggle the starred flag for the currently selected change"), (key(keymap.REFRESH), "Sync all projects"), (key(keymap.SORT_BY_NUMBER), @@ -349,6 +358,16 @@ class ChangeListView(urwid.WidgetWrap): self.log.debug("Set change %s to %s", change_key, reviewed_str) return ret + def toggleStarred(self, change_key): + with self.app.db.getSession() as session: + change = session.getChange(change_key) + change.starred = not change.starred + ret = change.starred + change.pending_starred = True + self.app.sync.submitTask( + sync.ChangeStarredTask(change_key, sync.HIGH_PRIORITY)) + return ret + def toggleHidden(self, change_key): with self.app.db.getSession() as session: change = session.getChange(change_key) @@ -401,6 +420,17 @@ class ChangeListView(urwid.WidgetWrap): # where we're not just popping a row from the list of changes. self.refresh() return None + if keymap.TOGGLE_STARRED in commands: + if not len(self.listbox.body): + return None + pos = self.listbox.focus_position + change_key = self.listbox.body[pos].change_key + starred = self.toggleStarred(change_key) + row = self.change_rows[change_key] + with self.app.db.getSession() as session: + change = session.getChange(change_key) + row.update(change, self.categories) + return None if keymap.REFRESH in commands: self.app.sync.submitTask( sync.SyncSubscribedProjectsTask(sync.HIGH_PRIORITY))