def _popup_simple_choice(self, activator: api.SettingActivator) -> None: # Generate choice widget menuitems = [] focus = None choices = self.get_choices() height = len(choices) width = 0 for key, label in choices: mi = widget.SelectableListItem(label) urwid.connect_signal(mi, "click", self._choice_clicked, user_args=[activator, key]) if self.value == key: focus = mi menuitems.append(mi) if len(label) > width: width = len(label) menu = urwid.Pile(menuitems, focus) filler = urwid.Filler(menu, "top") box = urwid.LineBox(filler) box = urwid.AttrMap(box, widget.LIGHT_ATTR_MAP) signals = widget.KeySignals(box) urwid.connect_signal(signals, "cancel", self._choice_cancelled, user_args=[activator]) activator.open_value_popup(signals, width + 2, height + 2)
def push_modal(self, activity: Activity, options: api.ModalOptions) -> None: self._hide_shown_activity() bg = self._main_view.original_widget modal_w = activity.create() modal_w = urwid.AttrMap(modal_w, widget.LIGHT_ATTR_MAP) signals = widget.KeySignals(modal_w) urwid.connect_signal(signals, "cancel", self._cancel_activity, user_args=[activity]) modal = urwid.Overlay( signals, bg, align=options.align, width=options.width, valign=options.valign, height=options.height, min_width=options.min_width, min_height=options.min_height, left=options.left, right=options.right, top=options.top, bottom=options.bottom, ) self._main_view.original_widget = modal self._act_stack.append( ActivityContext(activity, modal, palette=self._get_palette(), tasks=[])) activity.activate() activity.show()
def create(self) -> urwid.Widget: btxt = urwid.BigText("Openvario", urwid.font.Thin6x6Font()) logo = urwid.Padding(btxt, "center", "clip") m_pinned_apps = self._get_pinned_apps() if m_pinned_apps: m_pinned_apps.append(urwid.Divider()) m_apps = widget.SelectableListItem("Applications") urwid.connect_signal(m_apps, "click", self._on_apps) m_settings = widget.SelectableListItem("Settings") urwid.connect_signal(m_settings, "click", self._on_settings) m_shutdown = widget.SelectableListItem("Shut down") urwid.connect_signal(m_shutdown, "click", self._on_quit) menu = urwid.Pile( m_pinned_apps + [m_apps, m_settings, urwid.Divider(), m_shutdown] ) # Reserve space for counter self.autostart_counter = urwid.WidgetPlaceholder( urwid.BoxAdapter(urwid.SolidFill(" "), 2) ) view = urwid.Filler( urwid.Pile( [ logo, urwid.Text(self._get_version(), align=urwid.CENTER), urwid.Divider(), urwid.Padding( urwid.LineBox(menu, "Main Menu", title_align="left"), width=("relative", 40), align=urwid.CENTER, ), urwid.Divider(), urwid.Divider(), self.autostart_counter, ] ), "middle", ) self.autostart_canceller = AutostartCanceller(view) urwid.connect_signal( self.autostart_canceller, "anykey", self._on_cancel_autostart ) view = widget.KeySignals(self.autostart_canceller) urwid.connect_signal(view, "cancel", self._on_quit) return view
def push_activity(self, activity: Activity, palette: List[Tuple] = None) -> None: self._hide_shown_activity() w = activity.create() signals = widget.KeySignals(urwid.AttrMap(w, widget.NORMAL_ATTR_MAP)) urwid.connect_signal( signals, "cancel", self._cancel_activity, user_args=[activity] ) if palette is not None: self._mainloop.screen.register_palette(palette) self._mainloop.screen.clear() self._main_view.original_widget = signals self._act_stack.append( ActivityContext(activity, signals, palette=self._get_palette(), tasks=[]) ) activity.activate() activity.show()
def create(self) -> urwid.Widget: msg = urwid.Text(self.message) haligned = urwid.Padding(msg, width=len(self.message), align="center") valigned = urwid.Filler(haligned, "middle") # Wrap in KeySignals to intercept all escape keypresses return widget.KeySignals(valigned)