summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames E. Blair <corvus@gnu.org>2018-03-30 14:06:30 -0700
committerJames E. Blair <corvus@gnu.org>2018-03-30 14:06:30 -0700
commit51d64be68d8d8b75ff374f207a5bc153f787769e (patch)
tree5a63bfa452279d136f373b550df775fc254a8bb5
parent8384c6de2cd3e170191ed0e90d35648eda179a7c (diff)
Make bulleted lists more robust0.2.1
Errors in pack methods could cause urwid to throw an exception when rendering bullet lists which line-wrapped.
-rw-r--r--presentty/slide.py15
1 files changed, 14 insertions, 1 deletions
diff --git a/presentty/slide.py b/presentty/slide.py
index 4894f45..06860fc 100644
--- a/presentty/slide.py
+++ b/presentty/slide.py
@@ -20,6 +20,10 @@ class SlidePile(urwid.Pile):
20 cols = 0 20 cols = 0
21 rows = 0 21 rows = 0
22 for x in self.contents: 22 for x in self.contents:
23 # If we have no columns to use, we won't render, so don't
24 # erroneously accumulate rows.
25 if not size[0]:
26 continue
23 c,r = x[0].pack((size[0],)) 27 c,r = x[0].pack((size[0],))
24 if c>cols: 28 if c>cols:
25 cols = c 29 cols = c
@@ -35,16 +39,25 @@ class SlidePadding(urwid.Padding):
35 39
36class SlideColumns(urwid.Columns): 40class SlideColumns(urwid.Columns):
37 def pack(self, size, focus=False): 41 def pack(self, size, focus=False):
42 # Unlike the normal Columns widget, find the mininum number of
43 # (character) columns necessary to render. This probably only
44 # works for the limited 2-column case we have for bulleted
45 # lists.
46 # cols is the resulting number of columns needed
38 cols = self.dividechars * (len(self.contents)-1) 47 cols = self.dividechars * (len(self.contents)-1)
39 rows = 0 48 rows = 0
49 # Given our current width, col_budget is the number of columns
50 # remaining available.
51 col_budget = size[0]-cols
40 for widget, packing in self.contents: 52 for widget, packing in self.contents:
41 if packing[0] == 'given': 53 if packing[0] == 'given':
42 allocated_cols = packing[1] 54 allocated_cols = packing[1]
43 else: 55 else:
44 allocated_cols = size[0] 56 allocated_cols = col_budget
45 c,r = widget.pack((allocated_cols,)) 57 c,r = widget.pack((allocated_cols,))
46 if packing[0] == 'given': 58 if packing[0] == 'given':
47 c = allocated_cols 59 c = allocated_cols
60 col_budget -= c
48 if r>rows: 61 if r>rows:
49 rows = r 62 rows = r
50 cols += c 63 cols += c