def create(self) -> urwid.Widget: self._progress = RsyncProgressBar(self.rsync, self.get_rsync_params()) urwid.connect_signal(self._progress, "done", self._on_sync_done) urwid.connect_signal(self._progress, "failed", self._on_sync_failed) self._b_close = widget.PlainButton("Close") urwid.connect_signal(self._b_close, "click", self._on_close) b_cancel = widget.PlainButton("Cancel") urwid.connect_signal(b_cancel, "click", self._on_cancel) self.status_msg = urwid.Text("\n") self._button_row = urwid.GridFlow([b_cancel], 16, 1, 1, align="center") content = urwid.Pile( [ urwid.Divider(), urwid.Text(self.msg_description), urwid.Divider(), self._progress, self.status_msg, self._button_row, ] ) w = urwid.LineBox(content, title=self.msg_title) return w
async def _list_upgradables(self) -> None: self.upgradables = await self.opkg_tools.list_upgradables() if self.upgradables: continue_btn = widget.PlainButton(" Continue ") urwid.connect_signal(continue_btn, "click", self._on_continue) message = [ ("success banner", f" {len(self.upgradables)} "), ("success message", " upgradable packages found!"), ] message_wdg = urwid.Columns( [("pack", urwid.Text(message)), ("pack", continue_btn)], dividechars=1, ) else: exit_btn = widget.PlainButton(" Exit ") urwid.connect_signal(exit_btn, "click", self._on_exit) message = [("remark", "No updates found")] message_wdg = urwid.Columns( [("pack", urwid.Text(message)), ("pack", exit_btn)], dividechars=1, ) self.message_line.original_widget = message_wdg # Allow widget to handle kyboard now, as we have selectable controls self._w._selectable = True
def create(self) -> urwid.Widget: intro = urwid.Text( [ ( "remark", "This app allows to copy files to and from USB stick directory ", ), BACKUP_DEST, ("remark", "."), ] ) backup_help = urwid.Text( "The following directories will be copied to USB stick:" ) backupdirs = urwid.Pile([urwid.Text(f" * {d}") for d in BACKUP_DIRS]) self.restoredirs = urwid.Pile([]) b_backup = widget.PlainButton("Backup") urwid.connect_signal(b_backup, "click", self._on_backup) b_restore = widget.PlainButton("Restore") urwid.connect_signal(b_restore, "click", self._on_restore) restore_help = urwid.Text( "The following directories will be copied from USB stick " "to root filesystem:" ) self._app_view = urwid.Filler( urwid.Pile( [ intro, urwid.Divider(), backup_help, urwid.Divider(), backupdirs, urwid.Divider(), self._button_grid([b_backup]), urwid.Divider(), restore_help, urwid.Divider(), self.restoredirs, urwid.Divider(), self._button_grid([b_restore]), ] ), "top", ) curtain = USBStorageCurtain(self.mountwatcher, self._app_view) urwid.connect_signal(curtain, "mounted", self._on_mounted) self.frame = urwid.Frame( curtain, header=widget.ActivityHeader("Backup & Restore") ) return self.frame
def _create_buttons(self) -> urwid.Widget: btn_select_all = widget.PlainButton("Select All") urwid.connect_signal(btn_select_all, "click", self._on_select_all) btn_upgrade = widget.PlainButton("Upgrade") urwid.connect_signal(btn_upgrade, "click", self._on_upgrade) buttons = urwid.GridFlow( [btn_select_all, btn_upgrade], cell_width=15, h_sep=2, v_sep=1, align="left", ) return buttons
def add_button(self, label: str, handler: Callable[[], bool]) -> None: button = widget.PlainButton(label) urwid.connect_signal(button, "click", self._on_button_clicked, user_args=[handler]) self.button_widgets.append(button)
def _on_opkg_upgrade_finished(self, wdg: urwid.Widget) -> None: exit_btn = widget.PlainButton(" Exit ") urwid.connect_signal(exit_btn, "click", self._on_exit) message = ("success message", "Upgrade completed!") message_wdg = urwid.Columns( [("pack", urwid.Text(message)), ("pack", exit_btn)], dividechars=1, ) self.message_line.original_widget = message_wdg
def create(self) -> urwid.Widget: formitems = [] for name, desc in self.fields.items(): if desc["Type"] == "psk": formitems.append(self._make_field_psk(name, desc)) formitems.append(urwid.Divider()) btn_confirm = widget.PlainButton("Confirm") urwid.connect_signal(btn_confirm, "click", self._handle_confirm) btn_cancel = widget.PlainButton("Cancel") urwid.connect_signal(btn_cancel, "click", self._handle_cancel) formitems.append( urwid.GridFlow([btn_confirm, btn_cancel], 16, 1, 1, urwid.RIGHT)) form = urwid.Pile(formitems) return urwid.LineBox(form, self.service.name)
def _on_opkg_upgrade_finished(self, wdg: urwid.Widget) -> None: exit_btn = widget.PlainButton(" Exit ") urwid.connect_signal(exit_btn, "click", self._on_exit) message = ("success message", "Upgrade completed!") message_wdg = urwid.Columns( [("pack", urwid.Text(message)), ("pack", exit_btn)], dividechars=1, ) self.message_line.original_widget = message_wdg # Allow widget to handle kyboard now, as we have selectable controls self._w._selectable = True
def _on_opkg_update_finished(self, wdg: urwid.Widget) -> None: self.upgradables = self.opkg_tools.list_upgradables() if self.upgradables: continue_btn = widget.PlainButton(" Continue ") urwid.connect_signal(continue_btn, "click", self._on_continue) message = [ ("success banner", f" {len(self.upgradables)} "), ("success message", " upgradable packages found!"), ] message_wdg = urwid.Columns( [("pack", urwid.Text(message)), ("pack", continue_btn)], dividechars=1, ) else: exit_btn = widget.PlainButton(" Exit ") urwid.connect_signal(exit_btn, "click", self._on_exit) message = [("remark", f"No updates found")] message_wdg = urwid.Columns( [("pack", urwid.Text(message)), ("pack", exit_btn)], dividechars=1, ) self.message_line.original_widget = message_wdg
def add_button(self, label: str, handler: Callable[[], bool]) -> None: if not self.custom_buttons: self.buttons.contents = [] self._update_btn_width(label) button = widget.PlainButton(label) urwid.connect_signal(button, "click", self._on_button_clicked, user_args=[handler]) contents = [(w, ("given", self.button_width)) for w, opts in self.buttons.contents] # self.button_widgets.append(button) contents.append((button, ("given", self.button_width))) self.buttons.contents = contents self.custom_buttons = True
def create(self) -> urwid.Widget: # Add simple default button that can be oberridden by adding custom # buttons. default_btn_text = "Close" btn = widget.PlainButton(default_btn_text) self.btn_width = len(default_btn_text) + 2 urwid.connect_signal( btn, "click", self._on_button_clicked, user_args=[lambda: True] ) self.buttons = urwid.GridFlow( [btn], cell_width=11, h_sep=2, v_sep=1, align="center", ) content = urwid.Pile([self.message, urwid.Divider(), self.buttons]) view = urwid.LineBox(content, self.title) return view
def _on_wizard_completed(self, w: urwid.Widget) -> None: done_msg = [ ("highlight", "Setup is complete"), "\n\n", "Openvario is ready to use. Happy flying!", ] exit_btn = widget.PlainButton("Exit") urwid.connect_signal(exit_btn, "click", self._on_exit) done_contents = [ (urwid.Text(done_msg), ("pack", None)), (urwid.Divider(), ("pack", None)), (_button_row([exit_btn]), ("pack", None)), (urwid.SolidFill(" "), ("weight", 1)), ] self.content_pile.contents = done_contents
def __init__(self, shell: api.OpenVarioShell) -> None: self.shell = shell msg = [ "If your Openvario has sensorboard connected, calibrate sensors here. ", "\n\n", "If sensors are not installed, skip this step.", ] cal_btn = widget.PlainButton("Calibrate") urwid.connect_signal(cal_btn, "click", self._on_calibrate) content = urwid.Pile([ ("pack", urwid.Text(msg)), ("pack", urwid.Divider()), ( "pack", _button_row([self.make_next_button("Skip"), cal_btn]), ), ]) super().__init__(content)
def __init__(self, shell: api.OpenVarioShell) -> None: self.shell = shell msg = [ "If your Openvario is equipped with a touch-screen, ", "it needs to be calibrated. You will need to press the indicated ", "areas of the screen. It is recommended to press resistive ", "touch-screen with your fingernail.", "\n\n", "If touch-screen is not installed, skip this step.", ] cal_btn = widget.PlainButton("Calibrate") urwid.connect_signal(cal_btn, "click", self._on_calibrate) content = urwid.Pile([ ("pack", urwid.Text(msg)), ("pack", urwid.Divider()), ( "pack", _button_row([self.make_next_button("Skip"), cal_btn]), ), ]) super().__init__(content)
def _make_scan_button(self) -> urwid.Widget: btn = widget.PlainButton("Scan") urwid.connect_signal(btn, "click", self._handle_scan) self.scan_waiting = widget.Waiting(6) return urwid.Columns([(8, btn), ("pack", self.scan_waiting)], dividechars=1)
def make_next_button(self, title: str) -> urwid.Widget: btn = widget.PlainButton(title) urwid.connect_signal(btn, "click", self._on_next) return btn