mirror of
https://github.com/ihabunek/toot.git
synced 2024-09-29 04:35:54 -04:00
Prepare for context menu
This commit is contained in:
parent
330fd03b01
commit
07e6c372bc
@ -5,6 +5,7 @@ Interesting urwid implementations:
|
||||
|
||||
Check out:
|
||||
* https://github.com/rr-/urwid_readline - better edit box?
|
||||
* https://github.com/prompt-toolkit/python-prompt-toolkit
|
||||
|
||||
TODO/Ideas:
|
||||
* pack left column in timeline view
|
||||
@ -26,6 +27,10 @@ TODO/Ideas:
|
||||
* Status source
|
||||
* shortcut to copy source
|
||||
* syntax highlighting?
|
||||
* reblog
|
||||
* show author in status list, not person who reblogged
|
||||
* "v" should open the reblogged status, status.url is empty for the reblog
|
||||
|
||||
|
||||
Questions:
|
||||
* is it possible to make a span a urwid.Text selectable? e.g. for urls and hashtags
|
||||
|
@ -175,6 +175,9 @@ class TUI(urwid.Frame):
|
||||
def _media(timeline, status):
|
||||
self.show_media(status)
|
||||
|
||||
def _menu(timeline, status):
|
||||
self.show_context_menu(status)
|
||||
|
||||
urwid.connect_signal(timeline, "focus", self.refresh_footer)
|
||||
urwid.connect_signal(timeline, "reblog", self.async_toggle_reblog)
|
||||
urwid.connect_signal(timeline, "favourite", self.async_toggle_favourite)
|
||||
@ -182,6 +185,7 @@ class TUI(urwid.Frame):
|
||||
urwid.connect_signal(timeline, "compose", _compose)
|
||||
urwid.connect_signal(timeline, "reply", _reply)
|
||||
urwid.connect_signal(timeline, "media", _media)
|
||||
urwid.connect_signal(timeline, "menu", _menu)
|
||||
|
||||
def build_timeline(self, statuses):
|
||||
def _close(*args):
|
||||
@ -291,6 +295,10 @@ class TUI(urwid.Frame):
|
||||
if urls:
|
||||
show_media(urls)
|
||||
|
||||
def show_context_menu(self, status):
|
||||
# TODO: show context menu
|
||||
pass
|
||||
|
||||
def post_status(self, content, warning, visibility, in_reply_to_id):
|
||||
data = api.post_status(self.app, self.user, content,
|
||||
spoiler_text=warning,
|
||||
|
@ -2,27 +2,10 @@ import urwid
|
||||
import logging
|
||||
|
||||
from .constants import VISIBILITY_OPTIONS
|
||||
|
||||
from .widgets import Button, EditBox
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class EditBox(urwid.AttrWrap):
|
||||
def __init__(self):
|
||||
edit = urwid.Edit(multiline=True, allow_tab=True)
|
||||
return super().__init__(edit, "editbox", "editbox_focused")
|
||||
|
||||
|
||||
class Button(urwid.AttrWrap):
|
||||
def __init__(self, *args, **kwargs):
|
||||
button = urwid.Button(*args, **kwargs)
|
||||
padding = urwid.Padding(button, width=len(args[0]) + 4)
|
||||
return super().__init__(padding, "button", "button_focused")
|
||||
|
||||
def set_label(self, *args, **kwargs):
|
||||
self.original_widget.original_widget.set_label(*args, **kwargs)
|
||||
self.original_widget.width = len(args[0]) + 4
|
||||
|
||||
|
||||
class StatusComposer(urwid.Frame):
|
||||
"""
|
||||
UI for compose and posting a status message.
|
||||
|
@ -20,6 +20,7 @@ class Timeline(urwid.Columns):
|
||||
"favourite", # Favourite status
|
||||
"focus", # Focus changed
|
||||
"media", # Display media attachments
|
||||
"menu", # Show a context menu
|
||||
"next", # Fetch more statuses
|
||||
"reblog", # Reblog status
|
||||
"reply", # Compose a reply to a status
|
||||
@ -38,7 +39,7 @@ class Timeline(urwid.Columns):
|
||||
("weight", 40, self.status_list),
|
||||
("weight", 0, urwid.AttrWrap(urwid.SolidFill("│"), "blue_selected")),
|
||||
("weight", 60, self.status_details),
|
||||
], dividechars=1)
|
||||
])
|
||||
|
||||
def build_status_list(self, statuses, focus):
|
||||
items = [self.build_list_item(status) for status in statuses]
|
||||
@ -49,6 +50,8 @@ class Timeline(urwid.Columns):
|
||||
|
||||
def build_list_item(self, status):
|
||||
item = StatusListItem(status)
|
||||
urwid.connect_signal(item, "click", lambda *args:
|
||||
self._emit("menu", status))
|
||||
return urwid.AttrMap(item, None, focus_map={
|
||||
"blue": "green_selected",
|
||||
"green": "green_selected",
|
||||
|
@ -27,3 +27,22 @@ class SelectableText(Clickable, urwid.Text):
|
||||
|
||||
class SelectableColumns(Clickable, urwid.Columns):
|
||||
_selectable = True
|
||||
|
||||
|
||||
class EditBox(urwid.AttrWrap):
|
||||
"""Styled edit box."""
|
||||
def __init__(self):
|
||||
edit = urwid.Edit(multiline=True, allow_tab=True)
|
||||
return super().__init__(edit, "editbox", "editbox_focused")
|
||||
|
||||
|
||||
class Button(urwid.AttrWrap):
|
||||
"""Styled button."""
|
||||
def __init__(self, *args, **kwargs):
|
||||
button = urwid.Button(*args, **kwargs)
|
||||
padding = urwid.Padding(button, width=len(args[0]) + 4)
|
||||
return super().__init__(padding, "button", "button_focused")
|
||||
|
||||
def set_label(self, *args, **kwargs):
|
||||
self.original_widget.original_widget.set_label(*args, **kwargs)
|
||||
self.original_widget.width = len(args[0]) + 4
|
||||
|
Loading…
Reference in New Issue
Block a user