add a helper to pad a pile of buttons just enough

This commit is contained in:
Michael Hudson-Doyle 2017-09-20 14:55:02 +12:00
parent fad28977af
commit f000fc24eb
2 changed files with 23 additions and 6 deletions

View File

@ -15,12 +15,16 @@
""" UI utilities """
from functools import partialmethod
from subiquitycore.ui.container import Pile
from urwid import (
AttrMap,
Button,
Padding as _Padding,
Text,
)
from functools import partialmethod
def apply_padders(cls):
@ -187,3 +191,14 @@ class Color:
"""
pass
def button_pile(buttons):
max_label = 10
for button in buttons:
button = button.base_widget
if not isinstance(button, Button):
raise RuntimeError("button_pile takes a list of buttons, not %s", button)
max_label = max(len(button.label), max_label)
width = max_label + 4
return _Padding(Pile(buttons), min_width=width, width=width, align='center')

View File

@ -31,7 +31,7 @@ from urwid import (
from subiquitycore.ui.buttons import back_btn, cancel_btn, done_btn, menu_btn
from subiquitycore.ui.container import Columns, ListBox, Pile
from subiquitycore.ui.utils import Padding, Color
from subiquitycore.ui.utils import button_pile, Color, Padding
from subiquitycore.view import BaseView
@ -122,7 +122,7 @@ class NetworkView(BaseView):
self.lb = ListBox(self.body)
self.footer = Pile([
Text(""),
Padding.fixed_10(self._build_buttons()),
self._build_buttons(),
Text(""),
])
self.frame = Pile([
@ -134,10 +134,12 @@ class NetworkView(BaseView):
def _build_buttons(self):
back = back_btn(on_press=self.cancel)
done = done_btn(on_press=self.done)
self.default_focus = done
buttons = [done, back]
return Pile(buttons, focus_item=done)
buttons = button_pile([done, back])
buttons.base_widget.focus_position = 0
return buttons
def _build_model_inputs(self):
netdevs = self.model.get_all_netdevs()