def __init__(self, model, controller, name):
        self.model = model
        self.controller = controller
        self.dev = self.model.get_netdev_by_name(name)
        self.title = _("Network interface {} WIFI configuration").format(name)

        self.form = WLANForm()

        connect_signal(self.form, 'submit', self.done)
        connect_signal(self.form, 'cancel', self.cancel)

        if self.dev.configured_ssid is not None:
            self.form.ssid.value = self.dev.configured_ssid
        if self.dev.configured_wifi_psk is not None:
            self.form.psk.value = self.dev.configured_wifi_psk

        self.ssid_row = self.form.ssid.as_row(self.form.longest_caption)
        self.psk_row = self.form.psk.as_row(self.form.longest_caption)

        self.inputs = Pile(self._build_iface_inputs())

        self.error = Text("")
        self.body = Pile([
            ('pack', Text("")),
            ListBox([Padding.center_79(self.inputs)]),
            ('pack',
             Pile([
                 ('pack', Text("")),
                 Padding.center_79(Color.info_error(self.error)),
                 self.form.buttons,
                 ('pack', Text("")),
             ])),
        ])
        self.orig_w = None
        super().__init__(self.body)
 def __init__(self, model, signal, iface):
     self.model = model
     self.signal = signal
     self.ifname = iface
     self.iface = self.model.get_interface(self.ifname)
     self.is_gateway = False
     self.gateway_input = StringEditor(caption="")  # FIXME: ipaddr_editor
     self.address_input = StringEditor(caption="")  # FIXME: ipaddr_editor
     self.subnet_input = StringEditor(caption="")  # FIXME: ipaddr_editor
     self.error = Text("", align='center')
     self.nameserver_input = \
         StringEditor(caption="")  # FIXME: ipaddr_editor
     self.searchdomains_input = \
         StringEditor(caption="")  # FIXME: ipaddr_editor
     self.set_as_default_gw_button = Pile(
         self._build_set_as_default_gw_button())
     body = [
         Padding.center_79(self._build_iface_inputs()),
         Padding.line_break(""),
         Padding.center_79(self.set_as_default_gw_button),
         Padding.line_break(""),
         Padding.center_90(Color.info_error(self.error)),
         Padding.line_break(""),
         Padding.fixed_10(self._build_buttons())
     ]
     super().__init__(ListBox(body))
Beispiel #3
0
    def __init__(self, model, controller, name):
        self.model = model
        self.controller = controller
        self.dev = self.model.get_netdev_by_name(name)

        self.form = WLANForm()

        connect_signal(self.form, 'submit', self.done)
        connect_signal(self.form, 'cancel', self.cancel)

        if self.dev.configured_ssid is not None:
            self.form.ssid.value = self.dev.configured_ssid
        if self.dev.configured_wifi_psk is not None:
            self.form.psk.value = self.dev.configured_wifi_psk

        self.ssid_row = self.form.ssid.as_row(self, self.form.longest_caption)
        self.psk_row = self.form.psk.as_row(self, self.form.longest_caption)

        self.inputs = Pile(self._build_iface_inputs())

        self.error = Text("")
        self.body = [
            Padding.center_79(self.inputs),
            Padding.line_break(""),
            Padding.center_79(Color.info_error(self.error)),
            Padding.line_break(""),
            Padding.fixed_10(Pile([self.form.done_btn, self.form.cancel_btn])),
        ]
        self.orig_w = None
        super().__init__(ListBox(self.body))
Beispiel #4
0
 def __init__(self, signal):
     self.signal = signal
     self.body = [
         Padding.center_79(Text("This view is not yet implemented.")),
         Padding.line_break(""),
         Padding.center_79(Color.info_minor(Text("A place holder widget"))),
         Padding.line_break(""),
         Padding.center_79(self._build_buttons())
     ]
     super().__init__(ListBox(self.body))
    def _build_default_routes(self):
        ''' iterate through interfaces collecting
            any uniq provider (aka, gateway) and
            associate the interface name with the gateway

            then generate a line per key in the gateway
            dict and display the keys.

            Upon selection of the gateway entry (ip)
            then we set model.set_default_gateway(ip)

            if manual is selected, then we update
            the second entry into a IPAddressEditor
            and accept the value, submitting it to
            the model.
        '''
        providers = {}

        for iface in self.model.get_all_interfaces():
            if self.family == netifaces.AF_INET:
                ip_providers = iface.ip4_providers
            elif self.family == netifaces.AF_INET6:
                ip_providers = iface.ip6_providers

            for provider in ip_providers:
                log.debug('ipv4 provider: {}'.format(provider))
                gw = provider
                if gw in providers:
                    providers[gw].append(iface.ifname)
                else:
                    providers[gw] = [iface.ifname]

        log.debug('gateway providers: {}'.format(providers))
        items = []
        items.append(
            Padding.center_79(
                Color.menu_button(menu_btn(label="None", on_press=self.done),
                                  focus_map="menu_button focus")))
        for (gw, ifaces) in providers.items():
            if gw is None:
                continue
            items.append(
                Padding.center_79(
                    Color.menu_button(menu_btn(label="{gw} ({ifaces})".format(
                        gw=gw, ifaces=(",".join(ifaces))),
                                               on_press=self.done),
                                      focus_map="menu_button focus")))

        items.append(
            Padding.center_79(
                Color.menu_button(menu_btn(
                    label="Specify the default route manually",
                    on_press=self.show_edit_default_route),
                                  focus_map="menu_button focus")))
        return items
Beispiel #6
0
 def __init__(self, title=None, excerpt=None):
     widgets = [Text("")]
     if title is not None:
         widgets.append(
             Padding.center_79(Color.body(Text(title))))
         widgets.append(Text(""))
     if excerpt is not None:
         widgets.append(
             Padding.center_79(Color.body(Text(excerpt))))
         widgets.append(Text(""))
     super().__init__(Pile(widgets))
Beispiel #7
0
 def __init__(self, title=None, excerpt=None):
     widgets = [Text("")]
     if title is not None:
         widgets.append(Padding.center_79(Text(title)))
         widgets.append(Text(""))
     widgets = [Color.frame_header(Pile(widgets))]
     if excerpt is not None:
         widgets.extend([
             Text(""),
             Padding.center_79(Text(excerpt)),
         ])
     super().__init__(Pile(widgets))
Beispiel #8
0
 def __init__(self, signal, error_message):
     suggestion = "Check the installer log files for details and try again"
     self.signal = signal
     self.body = [
         Padding.center_79(Text(error_message)),
         Padding.line_break(""),
         Padding.center_79(Color.info_minor(Text(suggestion))),
         Padding.line_break(""),
         Padding.line_break(""),
         Padding.center_79(self._build_buttons())
     ]
     super().__init__(ListBox(self.body))
Beispiel #9
0
    def __init__(self, model, signal, selected_disk):
        self.model = model
        self.signal = signal
        self.selected_disk = selected_disk
        self.disk_obj = self.model.get_disk(self.selected_disk)

        self.body = [
            Padding.center_79(self._build_model_inputs()),
            Padding.line_break(""),
            Padding.center_79(self._build_menu()),
            Padding.line_break(""),
            Padding.fixed_10(self._build_buttons()),
        ]
        super().__init__(ListBox(self.body))
 def __init__(self, model, family, controller):
     self.model = model
     self.family = family
     self.controller = controller
     self.default_gateway_w = None
     self.gateway_options = Pile(self._build_default_routes())
     body = [
         Padding.center_79(Text("Please set the default gateway:")),
         Padding.line_break(""),
         Padding.center_79(self.gateway_options),
         Padding.line_break(""),
         Padding.fixed_10(self._build_buttons())
     ]
     super().__init__(ListBox(body))
Beispiel #11
0
 def __init__(self, message, current, complete):
     if isinstance(message, str):
         message_widget = Padding.center_79(Text(message))
     else:
         message_widget = Padding.center_79(message)
     progress_bar = Padding.center_60(
         StepsProgressBar(normal='progress_incomplete',
                          complete='progress_complete',
                          current=current, done=complete))
     status = [
         progress_bar,
         Padding.line_break(""),
         message_widget,
     ]
     super().__init__(Color.frame_footer(Pile(status)))
Beispiel #12
0
    def __init__(self, model, controller, name):
        self.model = model
        self.controller = controller
        self.dev = self.model.get_netdev_by_name(name)
        self.is_gateway = False
        self.form = NetworkConfigForm(self.ip_version)
        connect_signal(self.form, 'submit', self.done)
        connect_signal(self.form, 'cancel', self.cancel)

        self.form.subnet.help = "CIDR e.g. %s"%(self.example_address,)
        configured_addresses = self.dev.configured_ip_addresses_for_version(self.ip_version)
        if configured_addresses:
            addr = ipaddress.ip_interface(configured_addresses[0])
            self.form.subnet.value = str(addr.network)
            self.form.address.value = str(addr.ip)
        configured_gateway = self.dev.configured_gateway_for_version(self.ip_version)
        if configured_gateway:
            self.form.gateway.value = configured_gateway
        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 = [
            Padding.center_79(self.form.as_rows(self)),
            #Padding.line_break(""),
            #Padding.center_79(self.set_as_default_gw_button),
            Padding.line_break(""),
            Padding.fixed_10(self.form.buttons)
        ]
        super().__init__(ListBox(body))
Beispiel #13
0
 def refresh_model_inputs(self):
     widgets = self._build_model_inputs() + [
         Padding.center_79(self.additional_options),
         Padding.line_break(""),
     ]
     self.listbox.body[:] = widgets
     self.additional_options.contents = [ (obj, ('pack', None)) for obj in self._build_additional_options() ]
Beispiel #14
0
    def __init__(self, controller):
        self.controller = controller
        self.spinner = Spinner(controller.loop)

        self.event_listwalker = SimpleFocusListWalker([])
        self.event_listbox = ListBox(self.event_listwalker)
        self.event_linebox = MyLineBox(self.event_listbox)
        self.event_buttons = button_pile([other_btn("View full log", on_press=self.view_log)])
        event_body = [
            ('pack', Text("")),
            ('weight', 1, Padding.center_79(self.event_linebox)),
            ('pack', Text("")),
            ('pack', self.event_buttons),
            ('pack', Text("")),
        ]
        self.event_pile = Pile(event_body)

        self.log_listwalker = SimpleFocusListWalker([])
        self.log_listbox = ListBox(self.log_listwalker)
        log_linebox = MyLineBox(self.log_listbox, _("Full installer output"))
        log_body = [
            ('weight', 1, log_linebox),
            ('pack', button_pile([other_btn(_("Close"), on_press=self.close_log)])),
            ]
        self.log_pile = Pile(log_body)

        super().__init__(self.event_pile)
Beispiel #15
0
 def __init__(self, model, controller):
     self.model = model
     self.controller = controller
     self.items = []
     self.error = Text("", align='center')
     self.model_inputs = Pile(self._build_model_inputs())
     self.additional_options = Pile(self._build_additional_options())
     self.body = [
         self.model_inputs,
         Padding.center_79(self.additional_options),
         Padding.line_break(""),
     ]
     self.lb = Padding.center_90(ListBox(self.body))
     self.footer = Pile([
             Text(""),
             self._build_buttons(),
             Text(""),
             ])
     self.error_showing = False
     self.frame = Pile([
         ('pack', Text("")),
         self.lb,
         ('pack', self.footer)])
     self.lb.original_widget._select_last_selectable()
     self.frame.focus_position = 2
     super().__init__(self.frame)
Beispiel #16
0
    def __init__(self, model, controller):
        self.model = model
        self.controller = controller
        self.dev_to_row = {}
        self.cur_netdevs = []
        self.error = Text("", align='center')
        self.device_table = TablePile(self._build_model_inputs(),
                                      spacing=2,
                                      colspecs={
                                          0: ColSpec(rpad=1),
                                          4: ColSpec(can_shrink=True, rpad=1),
                                      })

        self._create_bond_btn = menu_btn(_("Create bond"),
                                         on_press=self._create_bond)
        bp = button_pile([self._create_bond_btn])
        bp.align = 'left'

        self.listbox = ListBox([self.device_table] + [
            bp,
        ])
        self.bottom = Pile([
            Text(""),
            self._build_buttons(),
            Text(""),
        ])
        self.error_showing = False

        self.frame = Pile([('pack', Text("")),
                           ('pack', Padding.center_79(Text(_(self.excerpt)))),
                           ('pack', Text("")),
                           Padding.center_90(self.listbox),
                           ('pack', self.bottom)])
        self.frame.set_focus(self.bottom)
        super().__init__(self.frame)
Beispiel #17
0
    def __init__(self, parent, device):
        self.parent = parent
        self.device = device
        title = _("Network interface {nic} WIFI configuration").format(
            nic=device.name)

        self.form = WLANForm()

        connect_signal(self.form, 'submit', self.done)
        connect_signal(self.form, 'cancel', self.cancel)

        ssid, psk = self.device.configured_ssid
        if ssid:
            self.form.ssid.value = ssid
        if psk:
            self.form.psk.value = psk

        self.ssid_row = self.form.ssid._table
        self.psk_row = self.form.psk._table
        self.ssid_row.bind(self.psk_row)

        self.inputs = Pile(self._build_iface_inputs())

        self.error = Text("")
        widgets = [
            self.inputs,
            Padding.center_79(Color.info_error(self.error)),
            self.form.buttons,
        ]
        super().__init__(title, widgets, 0, 0)
Beispiel #18
0
    def __init__(self, parent, setting):
        self.parent = parent
        self.setting = setting
        self.selector = Selector(toggle_options)
        self.selector.value = 'alt_shift_toggle'
        if self.parent.model.setting.toggle:
            try:
                self.selector.value = self.parent.model.setting.toggle
            except AttributeError:
                pass

        widgets = [
            Text(_(toggle_text)),
            Text(""),
            Padding.center_79(
                Columns([
                    ('pack', Text(_("Shortcut: "))),
                    Color.string_input(self.selector),
                ])),
            Text(""),
            button_pile([
                ok_btn(label=_("OK"), on_press=self.ok),
                cancel_btn(label=_("Cancel"), on_press=self.cancel),
            ]),
        ]
        super().__init__(_("Select layout toggle"),
                         widgets,
                         stretchy_index=0,
                         focus_index=4)
Beispiel #19
0
    def __init__(self, controller):
        self.controller = controller
        self.spinner = Spinner(controller.loop)

        self.reboot_btn = Toggleable(
            ok_btn(_("Reboot Now"), on_press=self.reboot))
        self.exit_btn = cancel_btn(_("Exit To Shell"), on_press=self.quit)
        self.view_log_btn = other_btn(_("View full log"),
                                      on_press=self.view_log)

        self.event_listbox = ListBox()
        self.event_linebox = MyLineBox(self.event_listbox)
        self.event_buttons = button_pile([self.view_log_btn])
        event_body = [
            ('pack', Text("")),
            ('weight', 1, Padding.center_79(self.event_linebox, min_width=76)),
            ('pack', Text("")),
            ('pack', self.event_buttons),
            ('pack', Text("")),
        ]
        self.event_pile = Pile(event_body)

        self.log_listbox = ListBox()
        log_linebox = MyLineBox(self.log_listbox, _("Full installer output"))
        log_body = [
            ('weight', 1, log_linebox),
            ('pack',
             button_pile([other_btn(_("Close"), on_press=self.close_log)])),
        ]
        self.log_pile = Pile(log_body)

        super().__init__(self.event_pile)
Beispiel #20
0
    def __init__(self, controller):
        self.controller = controller
        self.ongoing = {}  # context -> line containing a spinner

        self.reboot_btn = Toggleable(ok_btn(
            _("Reboot Now"), on_press=self.reboot))
        self.view_error_btn = cancel_btn(
            _("View error report"), on_press=self.view_error)
        self.view_log_btn = other_btn(
            _("View full log"), on_press=self.view_log)
        self.continue_btn = other_btn(
            _("Continue"), on_press=self.continue_)

        self.event_listbox = ListBox()
        self.event_linebox = MyLineBox(self.event_listbox)
        self.event_buttons = button_pile([self.view_log_btn])
        event_body = [
            ('weight', 1, Padding.center_79(self.event_linebox, min_width=76)),
            ('pack', Text("")),
            ('pack', self.event_buttons),
            ('pack', Text("")),
        ]
        self.event_pile = Pile(event_body)

        self.log_listbox = ListBox()
        log_linebox = MyLineBox(self.log_listbox, _("Full installer output"))
        log_body = [
            ('weight', 1, log_linebox),
            ('pack', button_pile([other_btn(_("Close"),
                                  on_press=self.close_log)])),
            ]
        self.log_pile = Pile(log_body)

        super().__init__(self.event_pile)
Beispiel #21
0
    def __init__(self, model, controller, opts, loop):
        self.model = model
        self.controller = controller
        self.opts = opts
        self.loop = loop
        self.items = []
        self.email = EmailEditor()
        self.error = Text("", align="center")
        self.progress = Text("", align="center")

        body = [
            ('pack', Text("")),
            ListBox([
                self._build_model_inputs(),
                Padding.line_break(""),
                Padding.center_79(
                    Color.info_minor(
                        Text("If you do not have an account, visit "
                             "https://login.ubuntu.com to create one."))),
                Padding.line_break(""),
                Padding.center_90(Color.info_error(self.error)),
                Padding.center_90(self.progress),
            ]),
            ('pack',
             Pile([
                 ('pack', Text("")),
                 button_pile(self._build_buttons()),
                 ('pack', Text("")),
             ])),
        ]
        super().__init__(Pile(body))
    def _build_iface_inputs(self):
        if len(self.dev.actual_ssids) > 0:
            networks_btn = menu_btn("Choose a visible network",
                                    on_press=self.show_ssid_list)
        else:
            networks_btn = Color.info_minor(
                Columns([('fixed', 1, Text("")),
                         Text("No visible networks"), ('fixed', 1, Text(">"))],
                        dividechars=1))

        if not self.dev.scan_state:
            scan_btn = menu_btn("Scan for networks", on_press=self.start_scan)
        else:
            scan_btn = Color.info_minor(
                Columns([('fixed', 1, Text("")),
                         Text("Scanning for networks"),
                         ('fixed', 1, Text(">"))],
                        dividechars=1))

        col = [
            Padding.center_79(
                Color.info_minor(
                    Text(
                        "Only open or WPA2/PSK networks are supported at this time."
                    ))),
            Padding.line_break(""),
            self.ssid_row,
            Padding.fixed_30(networks_btn),
            Padding.fixed_30(scan_btn),
            self.psk_row,
        ]
        return col
Beispiel #23
0
 def _build_model_inputs(self):
     sl = Padding.center_79(
         Columns([
             ("weight", 0.2, Text("Email address:", align="right")),
             ("weight", 0.3, Color.string_input(self.email)),
         ],
                 dividechars=4))
     return sl
Beispiel #24
0
 def __init__(self, title):
     super().__init__(
         Color.frame_header(
             Pile([
                 Text(""),
                 Padding.center_79(Text(title)),
                 Text(""),
             ])))
Beispiel #25
0
 def __init__(self, model, signal):
     self.model = model
     self.signal = signal
     self.items = []
     self.error = Text("", align='center')
     self.body = [
         Padding.center_79(self._build_model_inputs()),
         Padding.line_break(""),
         Padding.center_79(self._build_additional_options()),
         Padding.line_break(""),
         Padding.center_79(Color.info_error(self.error)),
         Padding.line_break(""),
         Padding.fixed_10(self._build_buttons()),
     ]
     # FIXME determine which UX widget should have focus
     self.lb = ListBox(self.body)
     self.lb.set_focus(4)  # _build_buttons
     super().__init__(self.lb)
Beispiel #26
0
    def __init__(self, model, controller, disk):
        self.model = model
        self.controller = controller
        self.disk = disk

        self.body = Pile([
            ('pack', Text("")),
            Padding.center_79(ListBox(self._build_model_inputs() + [])),
            ('pack',
             Pile([
                 Text(""),
                 ('pack', Padding.center_79(self.show_disk_info_w())),
                 ('pack', Text("")),
                 self._build_buttons(),
                 ('pack', Text("")),
             ])),
        ])
        super().__init__(self.body)
Beispiel #27
0
 def __init__(self, model, signal):
     self.model = model
     self.signal = signal
     self.items = []
     self.body = [
         Padding.center_79(self._build_model_inputs()),
         Padding.line_break(""),
         Padding.fixed_10(self._build_buttons()),
     ]
     super().__init__(ListBox(self.body))
Beispiel #28
0
 def __init__(self, model, controller, disk, hdinfo):
     log.debug('DiskInfoView: {}'.format(disk))
     self.model = model
     self.controller = controller
     self.disk = disk
     hdinfo = hdinfo.split("\n")
     body = []
     for h in hdinfo:
         body.append(Text(h))
     body.append(self._build_buttons())
     super().__init__(Padding.center_79(SimpleList(body)))
Beispiel #29
0
 def __init__(self, model, signal, selected_device, hdinfo):
     log.debug('DiskInfoView: {}'.format(selected_device))
     self.model = model
     self.signal = signal
     self.selected_device = selected_device
     hdinfo = hdinfo.split("\n")
     body = []
     for h in hdinfo:
         body.append(Text(h))
     body.append(Padding.fixed_10(self._build_buttons()))
     super().__init__(Padding.center_79(SimpleList(body)))
Beispiel #30
0
 def __init__(self, controller):
     self.controller = controller
     self.listwalker = SimpleFocusListWalker([])
     self.listbox = ListBox(self.listwalker)
     self.linebox = MyLineBox(self.listbox)
     body = [
         ('pack', Text("")),
         ('weight', 1, Padding.center_79(self.linebox)),
         ('pack', Text("")),
     ]
     self.pile = Pile(body)
     super().__init__(self.pile)