This commit is contained in:
Dimitri John Ledkov 2017-09-15 21:47:12 +01:00
parent ac3e375868
commit 648d7d4086
No known key found for this signature in database
GPG Key ID: CAC2D8B9CD2CA5F9
16 changed files with 78 additions and 114 deletions

View File

@ -91,12 +91,9 @@ class IdentityView(BaseView):
return Pile(sl) return Pile(sl)
def _build_buttons(self): def _build_buttons(self):
cancel = cancel_btn(on_press=self.cancel)
done = done_btn(on_press=self.done)
buttons = [ buttons = [
Color.button(done), done_btn(on_press=self.done),
Color.button(cancel), cancel_btn(on_press=self.cancel),
] ]
return Pile(buttons) return Pile(buttons)

View File

@ -22,9 +22,9 @@ import logging
from urwid import Text from urwid import Text
from subiquitycore.ui.buttons import finish_btn from subiquitycore.ui.buttons import done_btn
from subiquitycore.ui.container import ListBox, Pile from subiquitycore.ui.container import ListBox, Pile
from subiquitycore.ui.utils import Padding, Color from subiquitycore.ui.utils import Padding
from subiquitycore.view import BaseView from subiquitycore.view import BaseView
log = logging.getLogger("subiquitycore.views.login") log = logging.getLogger("subiquitycore.views.login")
@ -46,7 +46,7 @@ class LoginView(BaseView):
def _build_buttons(self): def _build_buttons(self):
self.buttons = [ self.buttons = [
Color.button(finish_btn(on_press=self.done)), done_btn(on_press=self.done),
] ]
return Pile(self.buttons) return Pile(self.buttons)

View File

@ -21,7 +21,7 @@ Welcome provides user with language selection
import logging import logging
from subiquitycore.ui.buttons import ok_btn from subiquitycore.ui.buttons import ok_btn
from subiquitycore.ui.container import ListBox, Pile from subiquitycore.ui.container import ListBox, Pile
from subiquitycore.ui.utils import Padding, Color from subiquitycore.ui.utils import Padding
from subiquitycore.view import BaseView from subiquitycore.view import BaseView
log = logging.getLogger("console_conf.views.welcome") log = logging.getLogger("console_conf.views.welcome")
@ -37,7 +37,7 @@ class WelcomeView(BaseView):
def _build_buttons(self): def _build_buttons(self):
self.buttons = [ self.buttons = [
Color.button(ok_btn(on_press=self.confirm)), ok_btn(on_press=self.confirm),
] ]
return Pile(self.buttons) return Pile(self.buttons)

View File

@ -114,12 +114,9 @@ class BcacheView(BaseView):
def _build_buttons(self): def _build_buttons(self):
log.debug('bcache: _build_buttons') log.debug('bcache: _build_buttons')
cancel = cancel_btn(on_press=self.cancel)
done = done_btn(on_press=self.done)
buttons = [ buttons = [
Color.button(done), done_btn(on_press=self.done),
Color.button(cancel) cancel_btn(on_press=self.cancel),
] ]
return Pile(buttons) return Pile(buttons)

View File

@ -68,12 +68,9 @@ class CephDiskView(BaseView):
return Pile(items) return Pile(items)
def _build_buttons(self): def _build_buttons(self):
cancel = cancel_btn(on_press=self.cancel)
done = done_btn(on_press=self.done)
buttons = [ buttons = [
Color.button(done), done_btn(on_press=self.done),
Color.button(cancel) cancel_btn(on_press=self.cancel),
] ]
return Pile(buttons) return Pile(buttons)

View File

@ -58,7 +58,7 @@ class FilesystemConfirmationView(WidgetWrap):
pile = Pile([ pile = Pile([
UrwidPadding(Text(confirmation_text), left=2, right=2), UrwidPadding(Text(confirmation_text), left=2, right=2),
Padding.fixed_15(cancel_btn(label="No", on_press=self.cancel)), Padding.fixed_15(cancel_btn(label="No", on_press=self.cancel)),
Padding.fixed_15(danger_btn(label="Continue", on_press=self.ok)), Padding.fixed_15(danger_btn(on_press=self.ok)),
Text(""), Text(""),
]) ])
lb = LineBox(pile, title="Confirm destructive action") lb = LineBox(pile, title="Confirm destructive action")

View File

@ -22,7 +22,7 @@ configuration.
import logging import logging
from urwid import connect_signal, Text from urwid import connect_signal, Text
from subiquitycore.ui.buttons import danger_btn from subiquitycore.ui.buttons import delete_btn
from subiquitycore.ui.container import ListBox from subiquitycore.ui.container import ListBox
from subiquitycore.ui.form import ( from subiquitycore.ui.form import (
Form, Form,
@ -162,10 +162,10 @@ class PartitionView(PartitionFormatView):
def make_body(self): def make_body(self):
body = super().make_body() body = super().make_body()
if self.partition is not None: if self.partition is not None:
delete_btn = danger_btn("Delete", on_press=self.delete) btn = delete_btn(on_press=self.delete)
body[-2:-2] = [ body[-2:-2] = [
Text(""), Text(""),
Padding.fixed_10(Color.info_error(delete_btn)), Padding.fixed_10(btn),
] ]
pass pass
return body return body

View File

@ -21,7 +21,7 @@ from urwid import (
) )
from subiquitycore.view import BaseView from subiquitycore.view import BaseView
from subiquitycore.ui.buttons import cancel_btn, confirm_btn from subiquitycore.ui.buttons import cancel_btn, ok_btn
from subiquitycore.ui.container import ListBox, Pile from subiquitycore.ui.container import ListBox, Pile
from subiquitycore.ui.utils import Padding from subiquitycore.ui.utils import Padding
@ -62,7 +62,7 @@ class ProgressView(BaseView):
def show_complete(self): def show_complete(self):
w = Padding.fixed_20( w = Padding.fixed_20(
confirm_btn(label="Reboot Now", on_press=self.reboot)) ok_btn(label="Reboot Now", on_press=self.reboot))
z = Padding.fixed_20( z = Padding.fixed_20(
cancel_btn(label="Quit Installer", on_press=self.quit)) cancel_btn(label="Quit Installer", on_press=self.quit))

View File

@ -1,4 +1,4 @@
# Copyright 2015 Canonical, Ltd. # Copyright 2017 Canonical, Ltd.
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as # it under the terms of the GNU Affero General Public License as
@ -13,44 +13,34 @@
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from functools import partial from urwid import AttrMap, Button, Text
from urwid import AttrWrap, Button, connect_signal, Text def _stylized_button(left, right, stocklabel, style):
class Btn(Button):
button_left = Text(left)
button_right = Text(right)
class PlainButton(Button): class StyleAttrMap(AttrMap):
button_left = Text("[") def __init__(self, *args, **kwargs):
button_right = Text("]") label = kwargs.pop('label', stocklabel)
btn = Btn(label, *args, **kwargs)
super().__init__(btn, style + '_button', style + '_button focus')
return StyleAttrMap
def stylized_button(stocklabel, style):
class MenuSelectButton(Button): return _stylized_button('[', ']', stocklabel, style)
button_left = Text("")
button_right = Text(">")
def plain_btn(label, color, on_press=None, user_arg=None):
button = PlainButton(label=label)
if on_press is not None:
connect_signal(button, 'click', on_press, user_arg)
return AttrWrap(button, color, color + ' focus')
start_btn = partial(plain_btn, label="Start", color="save_button")
save_btn = partial(plain_btn, label="Save", color="save_button")
finish_btn = partial(plain_btn, label="Finish", color="save_button")
ok_btn = partial(plain_btn, label="OK", color="save_button")
confirm_btn = partial(plain_btn, label="Confirm", color="save_button")
done_btn = partial(plain_btn, label="Done", color="save_button")
continue_btn = partial(plain_btn, label="Continue", color="save_button")
reset_btn = partial(plain_btn, label="Reset", color="reset_button")
cancel_btn = partial(plain_btn, label="Cancel", color="cancel_button")
back_btn = partial(plain_btn, label="Back", color="cancel_button")
danger_btn = partial(plain_btn, color="danger_button")
def menu_btn(label, on_press=None, user_arg=None): def menu_btn(label, on_press=None, user_arg=None):
button = MenuSelectButton(label=label) MenuBtn=_stylized_button('', '>', label, 'menu')
if on_press is not None: return MenuBtn(on_press=on_press, user_data=user_arg)
connect_signal(button, 'click', on_press, user_arg)
return AttrWrap(button, 'menu_button', 'menu_button focus') ok_btn = stylized_button("OK", "save")
done_btn = stylized_button("Done", "save")
reset_btn = stylized_button("Reset", "reset")
cancel_btn = stylized_button("Cancel", "cancel")
close_btn = stylized_button("Close", "cancel")
danger_btn = stylized_button("Continue", "danger")
delete_btn = stylized_button("Delete", "danger")

View File

@ -35,8 +35,7 @@ class DummyView(WidgetWrap):
def _build_buttons(self): def _build_buttons(self):
buttons = [ buttons = [
Color.button(cancel_btn(label="Back to Start", cancel_btn(label="Back to Start", on_press=self.cancel),
on_press=self.cancel)),
] ]
return Pile(buttons) return Pile(buttons)

View File

@ -40,8 +40,7 @@ class ErrorView(WidgetWrap):
def _build_buttons(self): def _build_buttons(self):
buttons = [ buttons = [
Color.button(cancel_btn(label="Back to Start", cancel_btn(label="Back to Start", on_press=self.cancel),
on_press=self.cancel)),
] ]
return Pile(buttons) return Pile(buttons)

View File

@ -30,7 +30,7 @@ from urwid import (
WidgetWrap, WidgetWrap,
) )
from subiquitycore.ui.buttons import PlainButton from subiquitycore.ui.buttons import close_btn
from subiquitycore.ui.container import Pile from subiquitycore.ui.container import Pile
from subiquitycore.ui.selector import Selector from subiquitycore.ui.selector import Selector
from subiquitycore.ui.utils import Color, Padding from subiquitycore.ui.utils import Color, Padding
@ -118,7 +118,7 @@ class YesNo(Selector):
class _HelpDisplay(WidgetWrap): class _HelpDisplay(WidgetWrap):
def __init__(self, closer, help_text): def __init__(self, closer, help_text):
self._closer = closer self._closer = closer
button = Color.button(PlainButton(label="Close", on_press=lambda btn:self._closer())) button = close_btn(on_press=lambda btn:self._closer())
super().__init__(LineBox(Pile([Text(help_text), Padding.fixed_10(button)]), title="Help")) super().__init__(LineBox(Pile([Text(help_text), Padding.fixed_10(button)]), title="Help"))

View File

@ -20,7 +20,7 @@ Login provides user with language selection
""" """
import logging import logging
from urwid import Text from urwid import Text
from subiquitycore.ui.buttons import finish_btn from subiquitycore.ui.buttons import done_btn
from subiquitycore.ui.container import Pile, ListBox from subiquitycore.ui.container import Pile, ListBox
from subiquitycore.ui.utils import Padding, Color from subiquitycore.ui.utils import Padding, Color
from subiquitycore.view import BaseView from subiquitycore.view import BaseView
@ -46,7 +46,7 @@ class LoginView(BaseView):
def _build_buttons(self): def _build_buttons(self):
self.buttons = [ self.buttons = [
Color.button(finish_btn(on_press=self.done)), done_btn(on_press=self.done),
] ]
return Pile(self.buttons) return Pile(self.buttons)

View File

@ -62,16 +62,14 @@ class NetworkConfigureInterfaceView(BaseView):
def _build_ipv4_method_buttons(self): def _build_ipv4_method_buttons(self):
button_padding = 70 button_padding = 70
buttons = [] buttons = [
btn = menu_btn(label="Use a static IPv4 configuration", menu_btn(label="Use a static IPv4 configuration",
on_press=self.show_ipv4_configuration) on_press=self.show_ipv4_configuration),
buttons.append(Color.menu_button(btn)) menu_btn(label="Use DHCPv4 on this interface",
btn = menu_btn(label="Use DHCPv4 on this interface", on_press=self.enable_dhcp4),
on_press=self.enable_dhcp4) menu_btn(label="Do not use",
buttons.append(Color.menu_button(btn)) on_press=self.clear_ipv4),
btn = menu_btn(label="Do not use", ]
on_press=self.clear_ipv4)
buttons.append(Color.menu_button(btn))
padding = getattr(Padding, 'left_{}'.format(button_padding)) padding = getattr(Padding, 'left_{}'.format(button_padding))
buttons = [ padding(button) for button in buttons ] buttons = [ padding(button) for button in buttons ]
@ -81,16 +79,14 @@ class NetworkConfigureInterfaceView(BaseView):
def _build_ipv6_method_buttons(self): def _build_ipv6_method_buttons(self):
button_padding = 70 button_padding = 70
buttons = [] buttons = [
btn = menu_btn(label="Use a static IPv6 configuration", menu_btn(label="Use a static IPv6 configuration",
on_press=self.show_ipv6_configuration) on_press=self.show_ipv6_configuration),
buttons.append(Color.menu_button(btn)) menu_btn(label="Use DHCPv6 on this interface",
btn = menu_btn(label="Use DHCPv6 on this interface", on_press=self.enable_dhcp6),
on_press=self.enable_dhcp6) menu_btn(label="Do not use",
buttons.append(Color.menu_button(btn)) on_press=self.clear_ipv6),
btn = menu_btn(label="Do not use", ]
on_press=self.clear_ipv6)
buttons.append(Color.menu_button(btn))
padding = getattr(Padding, 'left_{}'.format(button_padding)) padding = getattr(Padding, 'left_{}'.format(button_padding))
buttons = [ padding(button) for button in buttons ] buttons = [ padding(button) for button in buttons ]
@ -100,13 +96,11 @@ class NetworkConfigureInterfaceView(BaseView):
def _build_wifi_config(self): def _build_wifi_config(self):
btn = menu_btn(label="Configure WIFI settings", on_press=self.show_wlan_configuration) btn = menu_btn(label="Configure WIFI settings", on_press=self.show_wlan_configuration)
return [Padding.left_70(Color.menu_button(btn))] return [Padding.left_70(btn)]
def _build_buttons(self): def _build_buttons(self):
done = done_btn(on_press=self.done)
buttons = [ buttons = [
Color.button(done), done_btn(on_press=self.done)
] ]
return Pile(buttons) return Pile(buttons)

View File

@ -20,10 +20,7 @@ class NetworkList(WidgetWrap):
def __init__(self, parent, ssids): def __init__(self, parent, ssids):
self.parent = parent self.parent = parent
button = cancel_btn(on_press=self.do_cancel) button = cancel_btn(on_press=self.do_cancel)
ssid_list = [ ssid_list = [menu_btn(label=ssid, on_press=self.do_network) for ssid in ssids]
Color.menu_button(
Button(label=ssid, on_press=self.do_network))
for ssid in ssids]
p = Pile([BoxAdapter(ListBox(ssid_list), height=10), Padding.fixed_10(button)]) p = Pile([BoxAdapter(ListBox(ssid_list), height=10), Padding.fixed_10(button)])
box = LineBox(p, title="Select a network") box = LineBox(p, title="Select a network")
super().__init__(box) super().__init__(box)
@ -95,8 +92,7 @@ class NetworkConfigureWLANView(BaseView):
def _build_iface_inputs(self): def _build_iface_inputs(self):
if len(self.dev.actual_ssids) > 0: if len(self.dev.actual_ssids) > 0:
networks_btn = Color.menu_button( networks_btn = menu_btn("Choose a visible network", on_press=self.show_ssid_list)
menu_btn("Choose a visible network", on_press=self.show_ssid_list))
else: else:
networks_btn = Color.info_minor(Columns( networks_btn = Color.info_minor(Columns(
[ [
@ -106,8 +102,7 @@ class NetworkConfigureWLANView(BaseView):
], dividechars=1)) ], dividechars=1))
if not self.dev.scan_state: if not self.dev.scan_state:
scan_btn = Color.menu_button( scan_btn = menu_btn("Scan for networks", on_press=self.start_scan)
menu_btn("Scan for networks", on_press=self.start_scan))
else: else:
scan_btn = Color.info_minor(Columns( scan_btn = Color.info_minor(Columns(
[ [

View File

@ -78,30 +78,26 @@ class NetworkSetDefaultRouteView(BaseView):
log.debug('gateway providers: {}'.format(providers)) log.debug('gateway providers: {}'.format(providers))
items = [] items = []
items.append(Padding.center_79( items.append(Padding.center_79(
Color.menu_button(menu_btn(label="None", on_press=self.done)))) menu_btn(label="None", on_press=self.done)))
for (gw, ifaces) in providers.items(): for (gw, ifaces) in providers.items():
if gw is None: if gw is None:
continue continue
items.append(Padding.center_79( items.append(Padding.center_79(
Color.menu_button(menu_btn( menu_btn(
label="{gw} ({ifaces})".format( label="{gw} ({ifaces})".format(
gw=gw, gw=gw,
ifaces=(",".join(ifaces))), ifaces=(",".join(ifaces))),
on_press=self.done)))) on_press=self.done)))
items.append(Padding.center_79( items.append(Padding.center_79(
Color.menu_button(
menu_btn(label="Specify the default route manually", menu_btn(label="Specify the default route manually",
on_press=self.show_edit_default_route)))) on_press=self.show_edit_default_route)))
return items return items
def _build_buttons(self): def _build_buttons(self):
cancel = cancel_btn(on_press=self.cancel)
done = done_btn(on_press=self.done)
buttons = [ buttons = [
Color.button(done), done_btn(on_press=self.done),
Color.button(cancel) cancel_btn(on_press=self.cancel),
] ]
return Pile(buttons) return Pile(buttons)