create a helper to create a common screen layout

This commit is contained in:
Michael Hudson-Doyle 2018-04-09 14:30:59 +12:00
parent 0fc83c4bc1
commit a723d25a4c
6 changed files with 44 additions and 65 deletions

View File

@ -24,15 +24,13 @@ import logging
from urwid import connect_signal, Text, WidgetDisable
from subiquitycore.ui.buttons import delete_btn
from subiquitycore.ui.container import ListBox, Pile
from subiquitycore.ui.form import (
Form,
FormField,
IntegerField,
)
from subiquitycore.ui.interactive import StringEditor
from subiquitycore.ui.selector import Option, Selector
from subiquitycore.ui.utils import Color, Padding, button_pile
from subiquitycore.ui.utils import Color, button_pile, screen
from subiquitycore.view import BaseView
from subiquity.models.filesystem import (
@ -136,7 +134,7 @@ class PartitionFormatView(BaseView):
form_cls = PartitionForm
def __init__(self, size, existing, initial, back):
def __init__(self, size, existing, initial, back, focus_buttons=False):
mountpoint_to_devpath_mapping = self.model.get_mountpoint_to_devpath_mapping()
if existing is not None:
@ -157,14 +155,7 @@ class PartitionFormatView(BaseView):
connect_signal(self.form, 'submit', self.done)
connect_signal(self.form, 'cancel', self.cancel)
partition_box = Padding.center_79(ListBox(self.make_body()))
super().__init__(Pile([
('pack', Text("")),
partition_box,
('pack', Text("")),
('pack', self.form.buttons),
('pack', Text("")),
]))
super().__init__(screen(self.make_body(), self.form.buttons, focus_buttons=focus_buttons))
def make_body(self):
return self.form.as_rows(self)
@ -207,7 +198,7 @@ class PartitionView(PartitionFormatView):
initial['mount'] = None
else:
label = _("Save")
super().__init__(max_size, partition, initial, lambda : self.controller.partition_disk(disk))
super().__init__(max_size, partition, initial, lambda : self.controller.partition_disk(disk), focus_buttons=label is None)
if label is not None:
self.form.buttons.base_widget[0].set_label(label)
else:
@ -224,7 +215,6 @@ class PartitionView(PartitionFormatView):
self.form.mount.enabled = False
self.form.fstype.enabled = False
self.form.size.enabled = False
self._w.focus_position = 2
def make_body(self):
body = super().make_body()

View File

@ -18,8 +18,6 @@ import re
from urwid import (
connect_signal,
Text,
WidgetWrap,
)
from subiquitycore.ui.interactive import (
@ -28,7 +26,6 @@ from subiquitycore.ui.interactive import (
)
from subiquitycore.ui.container import (
ListBox,
Pile,
)
from subiquitycore.ui.form import (
ChoiceField,
@ -36,8 +33,7 @@ from subiquitycore.ui.form import (
simple_field,
WantsToKnowFormField,
)
from subiquitycore.ui.selector import Selector
from subiquitycore.ui.utils import button_pile, Padding
from subiquitycore.ui.utils import button_pile, screen
from subiquitycore.view import BaseView
@ -161,18 +157,12 @@ class IdentityView(BaseView):
self.ssh_import_confirmed = True
self.form_rows = ListBox(self.form.as_rows(self))
body = Pile([
('pack', Text("")),
Padding.center_90(self.form_rows),
#('pack', Pile([
('pack', Text("")),
('pack', button_pile([self.form.done_btn])),
('pack', Text("")),
])
#])
super().__init__(body)
super().__init__(
screen(
self.form.as_rows(self),
button_pile([self.form.done_btn]),
focus_buttons=False))
self.form_rows = self._w[1]
def _check_password(self, sender, new_text):
password = self.form.password.value

View File

@ -24,7 +24,7 @@ from urwid import connect_signal, Text
from subiquitycore.ui.buttons import back_btn, forward_btn
from subiquitycore.ui.interactive import StringEditor
from subiquitycore.ui.utils import Padding, button_pile
from subiquitycore.ui.utils import Padding, button_pile, screen
from subiquitycore.ui.container import ListBox, Pile
from subiquitycore.view import BaseView
from subiquity.ui.views.identity import UsernameField, PasswordField, USERNAME_MAXLEN
@ -138,14 +138,7 @@ class MAASView(BaseView):
connect_signal(self.form, 'submit', self.done)
connect_signal(self.form, 'cancel', self.cancel)
body = Pile([
('pack', Text("")),
Padding.center_90(ListBox(self.form.as_rows(self))),
('pack', Text("")),
('pack', self.form.buttons),
('pack', Text("")),
], focus_item=3)
super().__init__(body)
super().__init__(screen(self.form.as_rows(self), self.form.buttons, focus_buttons=False))
def done(self, result):
log.debug("User input: {}".format(result.as_data()))

View File

@ -39,7 +39,7 @@ from subiquitycore.ui.form import (
Form,
)
from subiquitycore.ui.selector import Selector, Option
from subiquitycore.ui.utils import button_pile, Color, Padding
from subiquitycore.ui.utils import button_pile, Color, Padding, screen
from subiquitycore.view import BaseView
from subiquity.models.keyboard import KeyboardSetting
@ -386,16 +386,7 @@ class KeyboardView(BaseView):
button_pile([
other_btn(label=_("Identify keyboard"), on_press=self.detect)]),
])
lb = ListBox(lb_contents)
pile = Pile([
('pack', Text("")),
Padding.center_90(lb),
('pack', Text("")),
('pack', self.form.buttons),
('pack', Text("")),
])
pile.focus_position = 3
super().__init__(pile)
super().__init__(screen(lb_contents, self.form.buttons))
def detect(self, sender):
detector = Detector(self)

View File

@ -17,7 +17,7 @@
from functools import partialmethod
from subiquitycore.ui.container import Pile
from subiquitycore.ui.container import ListBox, Pile
from urwid import (
AttrMap,
@ -202,3 +202,28 @@ def button_pile(buttons):
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):
"""Helper to create a common screen layout.
The commonest screen layout in subiquity is:
[ 1 line padding ]
Listbox()
[ 1 line padding ]
a button_pile
[ 1 line padding ]
This helper makes creating this a 1-liner.
"""
screen = Pile([
('pack', Text("")),
Padding.center_79(ListBox(rows)),
('pack', Text("")),
('pack', buttons),
('pack', Text("")),
])
if focus_buttons:
screen.focus_position = 3
return screen

View File

@ -20,8 +20,7 @@ from urwid import connect_signal, Text
from subiquitycore.view import BaseView
from subiquitycore.ui.buttons import menu_btn
from subiquitycore.ui.container import ListBox, Pile
from subiquitycore.ui.utils import Padding
from subiquitycore.ui.utils import screen
from subiquitycore.ui.interactive import RestrictedEditor, StringEditor
from subiquitycore.ui.form import Form, FormField, StringField
@ -133,17 +132,8 @@ class BaseNetworkConfigureManualView(BaseView):
self.form.nameservers.value = ', '.join(self.dev.configured_nameservers)
self.form.searchdomains.value = ', '.join(self.dev.configured_searchdomains)
self.error = Text("", align='center')
#self.set_as_default_gw_button = Pile(self._build_set_as_default_gw_button())
body = Pile([
('pack', Text("")),
Padding.center_79(ListBox(self.form.as_rows(self))),
#Padding.line_break(""),
#Padding.center_79(self.set_as_default_gw_button),
('pack', Text("")),
('pack', self.form.buttons),
('pack', Text("")),
])
super().__init__(body)
super().__init__(screen(self.form.as_rows(self), self.form.buttons, focus_buttons=False))
def refresh_model_inputs(self):
try: