# HG changeset patch # User Björn Ricks # Date 1351765775 -3600 # Node ID dafff6c3fa123465cf027a4a9806de42d1d8d518 # Parent 7413197aba450bb268e6ba89e04e9b435b3fce4d Add code to be able to sort the project list Currently it is possible to sort the projects in the project list by id, key and description. diff -r 7413197aba45 -r dafff6c3fa12 getan/view.py --- a/getan/view.py Thu Nov 01 11:28:07 2012 +0100 +++ b/getan/view.py Thu Nov 01 11:29:35 2012 +0100 @@ -203,12 +203,20 @@ class ProjectList(ListWidget): + + PROJECT_MODES = { + 0: "id", + 1: "key", + 2: "desc" + } + def __init__(self, controller, rows): self.selection = [] self.focused = 0 self.size = () self.top = 0 self.controller = controller + self.project_mode = 0 self.load_rows(rows) self.header = urwid.LineBox(urwid.AttrWrap(urwid.Text("\n%s\n" % @@ -223,9 +231,17 @@ def load_rows(self, rows): self.raw_rows = rows - self.rows = [ProjectNode(x) for x in rows] + self.update_rows() + + def update_rows(self): + rows = self.raw_rows + self.rows = [ProjectNode(x) for x in \ + sorted(rows, key=lambda row: self._get_project_sort_key(row))] self.listbox = urwid.ListBox(urwid.SimpleListWalker(self.rows)) + def _get_project_sort_key(self, proj): + return getattr(proj, self.PROJECT_MODES[self.project_mode]) + def _total_time(self): if not self.rows: return @@ -281,6 +297,14 @@ self.select() break + def switch_project_order(self): + self.project_mode += 1 + if self.project_mode >= len(self.PROJECT_MODES): + self.project_mode = 0 + self.update_rows() + self.controller.update_project_list() + self.update_focus(0) + class EntryNode(urwid.WidgetWrap):