Add zoom command to open status in scrollable popup window

This commit is contained in:
Peter Fidelman 2021-10-09 16:29:46 -07:00 committed by Ivan Habunek
parent 916b4cc4bf
commit 1d26ecd489
No known key found for this signature in database
GPG Key ID: F5F0623FF5EBCB3D
3 changed files with 26 additions and 1 deletions

View File

@ -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),

View File

@ -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()

View File

@ -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)