Prepare for context menu

pull/112/head
Ivan Habunek 2019-08-30 12:28:03 +02:00
rodzic 330fd03b01
commit 07e6c372bc
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: CDBD63C43A30BB95
5 zmienionych plików z 37 dodań i 19 usunięć

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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