change button_pile to use widget_width
This commit is contained in:
parent
8854e7aaaa
commit
1ae09926ca
|
@ -18,11 +18,8 @@
|
|||
from functools import partialmethod
|
||||
import logging
|
||||
|
||||
from subiquitycore.ui.container import ListBox, Pile
|
||||
|
||||
from urwid import (
|
||||
AttrMap,
|
||||
Button,
|
||||
CompositeCanvas,
|
||||
Padding as _Padding,
|
||||
Text,
|
||||
|
@ -30,6 +27,9 @@ from urwid import (
|
|||
WidgetDisable,
|
||||
)
|
||||
|
||||
from subiquitycore.ui.container import ListBox, Pile
|
||||
from subiquitycore.ui.width import widget_width
|
||||
|
||||
|
||||
log = logging.getLogger("subiquitycore.ui.utils")
|
||||
|
||||
|
@ -207,16 +207,11 @@ def disabled(w):
|
|||
|
||||
|
||||
def button_pile(buttons):
|
||||
max_label = 10
|
||||
width = 14
|
||||
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')
|
||||
width = max(widget_width(button), width)
|
||||
return _Padding(
|
||||
Pile(buttons), min_width=width, width=width, align='center')
|
||||
|
||||
|
||||
def screen(rows, buttons, focus_buttons=True, excerpt=None, narrow_rows=False):
|
||||
|
|
|
@ -21,6 +21,11 @@ size_neutral_decorations = (
|
|||
urwid.WidgetDisable,
|
||||
)
|
||||
|
||||
size_neutral_widget_wraps = (
|
||||
urwid.Button,
|
||||
urwid.CheckBox,
|
||||
)
|
||||
|
||||
|
||||
def widget_width(w):
|
||||
"""Return the natural width of the widget w."""
|
||||
|
@ -29,7 +34,7 @@ def widget_width(w):
|
|||
return widget_width(w.original_widget)
|
||||
if hasattr(w, 'get_natural_width'):
|
||||
return w.get_natural_width()
|
||||
if isinstance(w, urwid.CheckBox):
|
||||
if isinstance(w, size_neutral_widget_wraps):
|
||||
return widget_width(w._wrapped_widget)
|
||||
elif isinstance(w, size_neutral_decorations):
|
||||
return widget_width(w.original_widget)
|
||||
|
|
Loading…
Reference in New Issue