From 593c95ea629631a941e6ec3686d51bbc81c841d8 Mon Sep 17 00:00:00 2001 From: Daniel Schwarz Date: Tue, 9 Jan 2024 23:36:35 -0500 Subject: [PATCH] Converted LineBoxes to RoundedLineBoxes that look nicer --- toot/tui/app.py | 4 ++-- toot/tui/poll.py | 4 ++-- toot/tui/timeline.py | 4 ++-- toot/tui/widgets.py | 30 ++++++++++++++++++++++++++++++ 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/toot/tui/app.py b/toot/tui/app.py index 6a2f902..9e6521c 100644 --- a/toot/tui/app.py +++ b/toot/tui/app.py @@ -20,7 +20,7 @@ from .overlays import StatusDeleteConfirmation, Account from .poll import Poll from .timeline import Timeline from .utils import get_max_toot_chars, parse_content_links, copy_to_clipboard -from .widgets import ModalBox +from .widgets import ModalBox, RoundedLineBox logger = logging.getLogger(__name__) @@ -769,7 +769,7 @@ class TUI(urwid.Frame): ) def open_overlay(self, widget, options={}, title=""): - top_widget = urwid.LineBox(widget, title=title) + top_widget = RoundedLineBox(widget, title=title) bottom_widget = self.body _options = self.default_overlay_options.copy() diff --git a/toot/tui/poll.py b/toot/tui/poll.py index e738fc7..661dc5b 100644 --- a/toot/tui/poll.py +++ b/toot/tui/poll.py @@ -3,7 +3,7 @@ import urwid from toot import api from toot.exceptions import ApiError from toot.utils.datetime import parse_datetime -from .widgets import Button, CheckBox, RadioButton +from .widgets import Button, CheckBox, RadioButton, RoundedLineBox from .richtext import html_to_widgets @@ -27,7 +27,7 @@ class Poll(urwid.ListBox): def build_linebox(self, contents): contents = urwid.Pile(list(contents)) contents = urwid.Padding(contents, left=1, right=1) - return urwid.LineBox(contents) + return RoundedLineBox(contents) def vote(self, button_widget): poll = self.status.original.data.get("poll") diff --git a/toot/tui/timeline.py b/toot/tui/timeline.py index 4851619..b9311e7 100644 --- a/toot/tui/timeline.py +++ b/toot/tui/timeline.py @@ -12,7 +12,7 @@ from toot.utils.language import language_name from toot.entities import Status from toot.tui.scroll import Scrollable, ScrollBar from toot.tui.utils import highlight_keys -from toot.tui.widgets import SelectableText, SelectableColumns +from toot.tui.widgets import SelectableText, SelectableColumns, RoundedLineBox logger = logging.getLogger("toot") @@ -415,7 +415,7 @@ class StatusDetails(urwid.Pile): def build_linebox(self, contents): contents = urwid.Pile(list(contents)) contents = urwid.Padding(contents, left=1, right=1) - return urwid.LineBox(contents) + return RoundedLineBox(contents) def card_generator(self, card): yield urwid.Text(("card_title", card["title"].strip())) diff --git a/toot/tui/widgets.py b/toot/tui/widgets.py index 2c8f907..db7bf9e 100644 --- a/toot/tui/widgets.py +++ b/toot/tui/widgets.py @@ -75,3 +75,33 @@ class ModalBox(urwid.Frame): filler = urwid.Filler(text, valign='top', top=1, bottom=1) padding = urwid.Padding(filler, left=1, right=1) return super().__init__(padding) + + +class RoundedLineBox(urwid.LineBox): + """LineBox that defaults to rounded corners.""" + def __init__(self, + original_widget, + title="", + title_align="center", + title_attr=None, + tlcorner="\u256d", + tline="─", + lline="│", + trcorner="\u256e", + blcorner="\u2570", + rline="│", + bline="─", + brcorner="\u256f", + ) -> None: + return super().__init__(original_widget, + title, + title_align, + title_attr, + tlcorner, + tline, + lline, + trcorner, + blcorner, + rline, + bline, + brcorner)