From c35848bce6c8ca846b0871637a445a53ed551df9 Mon Sep 17 00:00:00 2001
From: "James E. Blair" <jeblair@hp.com>
Date: Sun, 17 Aug 2014 15:45:50 -0700
Subject: [PATCH] Support 80 column terminals in change view

The change view has assumed a very wide display.  Use a gridflow
widget to achieve a similar layout on wide displays but fold the
right-hand side data underneath in 80 column displays.

Technically, the change info, commit message, and votes sections
go into N 80-char columns depending on how wide the display is.

Change-Id: I0d55a8a51c0d918e608b892e94cf9cb38d2b3547
---
 gertty/view/change.py | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/gertty/view/change.py b/gertty/view/change.py
index 69c2bb7..f211719 100644
--- a/gertty/view/change.py
+++ b/gertty/view/change.py
@@ -336,27 +336,25 @@ class ChangeView(urwid.WidgetWrap):
         self.depends_on_rows = {}
         self.needed_by = urwid.Pile([])
         self.needed_by_rows = {}
-        self.left_column = urwid.Pile([('pack', change_info),
-                                       ('pack', urwid.Divider()),
-                                       ('pack', votes),
-                                       ('pack', urwid.Divider()),
-                                       ('pack', self.depends_on),
-                                       ('pack', self.needed_by)])
-        top = urwid.Columns([self.left_column, ('weight', 1, self.commit_message)])
+        self.related_changes = urwid.Pile([self.depends_on, self.needed_by])
+        self.grid = urwid.GridFlow([change_info, self.commit_message, votes],
+                                   cell_width=80, h_sep=2, v_sep=1, align='left')
         self.listbox = urwid.ListBox(urwid.SimpleFocusListWalker([]))
         self._w.contents.append((self.app.header, ('pack', 1)))
         self._w.contents.append((urwid.Divider(), ('pack', 1)))
         self._w.contents.append((self.listbox, ('weight', 1)))
         self._w.set_focus(2)
 
-        self.listbox.body.append(top)
+        self.listbox.body.append(self.grid)
+        self.listbox.body.append(urwid.Divider())
+        self.listbox.body.append(self.related_changes)
         self.listbox.body.append(urwid.Divider())
         self.listbox_patchset_start = len(self.listbox.body)
 
         self.checkGitRepo()
         self.refresh()
         self.listbox.set_focus(0)
-        top.set_focus(0)
+        self.grid.set_focus(1)
 
     def checkGitRepo(self):
         missing_revisions = set()
@@ -459,7 +457,7 @@ class ChangeView(urwid.WidgetWrap):
             # TODO: update the existing table rather than replacing it
             # wholesale.  It will become more important if the table
             # gets selectable items (like clickable names).
-            self.left_column.contents[2] = (votes, ('pack', None))
+            self.grid.contents[2] = (votes, ('given', 80))
 
             self.refreshDependencies(session, change)
 
@@ -511,10 +509,10 @@ class ChangeView(urwid.WidgetWrap):
                 row = urwid.AttrMap(urwid.Padding(ChangeButton(self, key, subject), width='pack'),
                                     'link', focus_map={None: 'focused-link'})
                 widget.contents.insert(i, (row, widget.options('pack')))
-                if not widget.focus.selectable():
+                if not widget.selectable():
                     widget.set_focus(i)
-                if not self.left_column.focus.selectable():
-                    self.left_column.set_focus(widget)
+                if not self.related_changes.selectable():
+                    self.related_changes.set_focus(widget)
                 widget_rows[key] = row
             else:
                 row.original_widget.original_widget.set_label(subject)