예제 #1
0
    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)
예제 #2
0
    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()
예제 #3
0
    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
예제 #4
0
    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()
예제 #5
0
 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)