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
This commit is contained in:
James E. Blair 2015-03-21 20:17:17 -07:00
parent c5472b2e1c
commit 7e85ed3745
2 changed files with 34 additions and 2 deletions

View File

@ -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

View File

@ -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))