Add zoom command to open status in scrollable popup window

pull/240/head
Peter Fidelman 2021-10-09 16:29:46 -07:00 zatwierdzone przez Ivan Habunek
rodzic 916b4cc4bf
commit 1d26ecd489
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: F5F0623FF5EBCB3D
3 zmienionych plików z 26 dodań i 1 usunięć

Wyświetl plik

@ -8,7 +8,7 @@ from toot import api, config, __version__
from .compose import StatusComposer
from .constants import PALETTE
from .entities import Status
from .overlays import ExceptionStackTrace, GotoMenu, Help, StatusSource, StatusLinks
from .overlays import ExceptionStackTrace, GotoMenu, Help, StatusSource, StatusLinks, StatusZoom
from .overlays import StatusDeleteConfirmation
from .timeline import Timeline
from .utils import parse_content_links, show_media
@ -192,6 +192,9 @@ class TUI(urwid.Frame):
def _menu(timeline, status):
self.show_context_menu(status)
def _zoom(timeline, status_details):
self.show_status_zoom(status_details)
urwid.connect_signal(timeline, "compose", _compose)
urwid.connect_signal(timeline, "delete", _delete)
urwid.connect_signal(timeline, "favourite", self.async_toggle_favourite)
@ -202,6 +205,7 @@ class TUI(urwid.Frame):
urwid.connect_signal(timeline, "reply", _reply)
urwid.connect_signal(timeline, "source", _source)
urwid.connect_signal(timeline, "links", _links)
urwid.connect_signal(timeline, "zoom", _zoom)
def build_timeline(self, name, statuses, local):
def _close(*args):
@ -337,6 +341,12 @@ class TUI(urwid.Frame):
options={"height": len(links) + 2},
)
def show_status_zoom(self, status_details):
self.open_overlay(
widget=StatusZoom(status_details),
title="Status zoom",
)
def show_exception(self, exception):
self.open_overlay(
widget=ExceptionStackTrace(exception),

Wyświetl plik

@ -20,6 +20,14 @@ class StatusSource(urwid.ListBox):
super().__init__(walker)
class StatusZoom(urwid.ListBox):
"""Opens status in scrollable popup window"""
def __init__(self, status_details):
ll = list(filter(lambda x: getattr(x, "rows", None), status_details.widget_list))
walker = urwid.SimpleFocusListWalker(ll)
super().__init__(walker)
class StatusLinks(urwid.ListBox):
"""Shows status links."""
@ -162,6 +170,7 @@ class Help(urwid.Padding):
yield urwid.Text(h(" [L] - Show the status links"))
yield urwid.Text(h(" [U] - Show the status data in JSON as received from the server"))
yield urwid.Text(h(" [V] - Open status in default browser"))
yield urwid.Text(h(" [Z] - Open status in scrollable popup window"))
yield urwid.Divider()
yield urwid.Text(("bold", "Links"))
yield urwid.Divider()

Wyświetl plik

@ -29,6 +29,7 @@ class Timeline(urwid.Columns):
"links", # Show status links
"thread", # Show thread for status
"save", # Save current timeline
"zoom", # Open status in scrollable popup window
]
def __init__(self, name, statuses, focus=0, is_thread=False):
@ -173,6 +174,10 @@ class Timeline(urwid.Columns):
self._emit("save", status)
return
if key in ("z", "Z"):
self._emit("zoom", self.status_details)
return
return super().keypress(size, key)
def append_status(self, status):
@ -305,6 +310,7 @@ class StatusDetails(urwid.Pile):
"[L]inks",
"[R]eply",
"So[u]rce",
"[Z]oom",
"[H]elp",
]
options = " ".join(o for o in options if o)