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