mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
message_ to handle_
This commit is contained in:
@@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
|
|||||||
The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
||||||
and this project adheres to [Semantic Versioning](http://semver.org/).
|
and this project adheres to [Semantic Versioning](http://semver.org/).
|
||||||
|
|
||||||
|
## [0.1.11] - Unreleased
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Changed message handlers to use prefix handle\_
|
||||||
|
- Renamed messages to drop the Message suffix
|
||||||
|
|
||||||
## [0.1.10] - 2021-08-25
|
## [0.1.10] - 2021-08-25
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ class Calculator(GridView):
|
|||||||
*self.buttons.values(), clear=self.ac, numbers=self.numbers, zero=self.zero
|
*self.buttons.values(), clear=self.ac, numbers=self.numbers, zero=self.zero
|
||||||
)
|
)
|
||||||
|
|
||||||
def message_button_pressed(self, message: ButtonPressed) -> None:
|
def handle_button_pressed(self, message: ButtonPressed) -> None:
|
||||||
"""A message sent by the button widget"""
|
"""A message sent by the button widget"""
|
||||||
|
|
||||||
assert isinstance(message.sender, Button)
|
assert isinstance(message.sender, Button)
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ class MyApp(App):
|
|||||||
)
|
)
|
||||||
await self.view.dock(self.body, edge="top")
|
await self.view.dock(self.body, edge="top")
|
||||||
|
|
||||||
async def message_file_click(self, message: FileClick) -> None:
|
async def handle_file_click(self, message: FileClick) -> None:
|
||||||
"""A message sent by the directory tree when a file is clicked."""
|
"""A message sent by the directory tree when a file is clicked."""
|
||||||
|
|
||||||
syntax: RenderableType
|
syntax: RenderableType
|
||||||
|
|||||||
@@ -252,7 +252,7 @@ class MessagePump:
|
|||||||
|
|
||||||
async def on_message(self, message: Message) -> None:
|
async def on_message(self, message: Message) -> None:
|
||||||
_rich_traceback_guard = True
|
_rich_traceback_guard = True
|
||||||
method_name = f"message_{message.name}"
|
method_name = f"handle_{message.name}"
|
||||||
|
|
||||||
method = getattr(self, method_name, None)
|
method = getattr(self, method_name, None)
|
||||||
if method is not None:
|
if method is not None:
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ if TYPE_CHECKING:
|
|||||||
|
|
||||||
|
|
||||||
@rich.repr.auto
|
@rich.repr.auto
|
||||||
class UpdateMessage(Message, verbosity=3):
|
class Update(Message, verbosity=3):
|
||||||
def __init__(self, sender: MessagePump, widget: Widget):
|
def __init__(self, sender: MessagePump, widget: Widget):
|
||||||
super().__init__(sender)
|
super().__init__(sender)
|
||||||
self.widget = widget
|
self.widget = widget
|
||||||
@@ -22,22 +22,22 @@ class UpdateMessage(Message, verbosity=3):
|
|||||||
yield self.widget
|
yield self.widget
|
||||||
|
|
||||||
def __eq__(self, other: object) -> bool:
|
def __eq__(self, other: object) -> bool:
|
||||||
if isinstance(other, UpdateMessage):
|
if isinstance(other, Update):
|
||||||
return self.widget == other.widget
|
return self.widget == other.widget
|
||||||
return NotImplemented
|
return NotImplemented
|
||||||
|
|
||||||
def can_replace(self, message: Message) -> bool:
|
def can_replace(self, message: Message) -> bool:
|
||||||
return isinstance(message, UpdateMessage) and self == message
|
return isinstance(message, Update) and self == message
|
||||||
|
|
||||||
|
|
||||||
@rich.repr.auto
|
@rich.repr.auto
|
||||||
class LayoutMessage(Message, verbosity=3):
|
class Layout(Message, verbosity=3):
|
||||||
def can_replace(self, message: Message) -> bool:
|
def can_replace(self, message: Message) -> bool:
|
||||||
return isinstance(message, (LayoutMessage, UpdateMessage))
|
return isinstance(message, (Layout, Update))
|
||||||
|
|
||||||
|
|
||||||
@rich.repr.auto
|
@rich.repr.auto
|
||||||
class CursorMoveMessage(Message):
|
class CursorMove(Message):
|
||||||
def __init__(self, sender: MessagePump, line: int) -> None:
|
def __init__(self, sender: MessagePump, line: int) -> None:
|
||||||
self.line = line
|
self.line = line
|
||||||
super().__init__(sender)
|
super().__init__(sender)
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ from . import events
|
|||||||
from . import log
|
from . import log
|
||||||
from .layout import Layout, NoWidget
|
from .layout import Layout, NoWidget
|
||||||
from .geometry import Size, Offset, Region
|
from .geometry import Size, Offset, Region
|
||||||
from .messages import UpdateMessage, LayoutMessage
|
from .messages import Update, Layout
|
||||||
from .reactive import Reactive, watch
|
from .reactive import Reactive, watch
|
||||||
|
|
||||||
from .widget import Widget, Widget
|
from .widget import Widget, Widget
|
||||||
@@ -89,7 +89,7 @@ class View(Widget):
|
|||||||
# def check_layout(self) -> bool:
|
# def check_layout(self) -> bool:
|
||||||
# return super().check_layout() or self.layout.check_update()
|
# return super().check_layout() or self.layout.check_update()
|
||||||
|
|
||||||
async def message_update(self, message: UpdateMessage) -> None:
|
async def handle_update(self, message: Update) -> None:
|
||||||
if self.is_root_view:
|
if self.is_root_view:
|
||||||
message.stop()
|
message.stop()
|
||||||
widget = message.widget
|
widget = message.widget
|
||||||
@@ -99,7 +99,7 @@ class View(Widget):
|
|||||||
if display_update is not None:
|
if display_update is not None:
|
||||||
self.app.display(display_update)
|
self.app.display(display_update)
|
||||||
|
|
||||||
async def message_layout(self, message: LayoutMessage) -> None:
|
async def handle_layout(self, message: Layout) -> None:
|
||||||
if self.is_root_view:
|
if self.is_root_view:
|
||||||
message.stop()
|
message.stop()
|
||||||
await self.refresh_layout()
|
await self.refresh_layout()
|
||||||
@@ -245,4 +245,4 @@ class View(Widget):
|
|||||||
async def action_toggle(self, name: str) -> None:
|
async def action_toggle(self, name: str) -> None:
|
||||||
widget = self.named_widgets[name]
|
widget = self.named_widgets[name]
|
||||||
widget.visible = not widget.visible
|
widget.visible = not widget.visible
|
||||||
await self.post_message(LayoutMessage(self))
|
await self.post_message(Layout(self))
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from ..geometry import Offset, Size
|
|||||||
from ..layouts.vertical import VerticalLayout
|
from ..layouts.vertical import VerticalLayout
|
||||||
from ..view import View
|
from ..view import View
|
||||||
from ..message import Message
|
from ..message import Message
|
||||||
from ..messages import UpdateMessage, LayoutMessage
|
from ..messages import Update, Layout
|
||||||
from ..widget import Widget
|
from ..widget import Widget
|
||||||
from ..widgets import Static
|
from ..widgets import Static
|
||||||
|
|
||||||
@@ -40,7 +40,7 @@ class WindowView(View, layout=VerticalLayout):
|
|||||||
self.refresh(layout=True)
|
self.refresh(layout=True)
|
||||||
await self.emit(WindowChange(self))
|
await self.emit(WindowChange(self))
|
||||||
|
|
||||||
async def message_update(self, message: UpdateMessage) -> None:
|
async def handle_update(self, message: Update) -> None:
|
||||||
message.prevent_default()
|
message.prevent_default()
|
||||||
await self.emit(WindowChange(self))
|
await self.emit(WindowChange(self))
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ from ._context import active_app
|
|||||||
from .geometry import Size
|
from .geometry import Size
|
||||||
from .message import Message
|
from .message import Message
|
||||||
from .message_pump import MessagePump
|
from .message_pump import MessagePump
|
||||||
from .messages import LayoutMessage, UpdateMessage
|
from .messages import Layout, Update
|
||||||
from .reactive import Reactive, watch
|
from .reactive import Reactive, watch
|
||||||
from ._types import Lines
|
from ._types import Lines
|
||||||
|
|
||||||
@@ -286,11 +286,11 @@ class Widget(MessagePump):
|
|||||||
self.render_cache = None
|
self.render_cache = None
|
||||||
self.reset_check_repaint()
|
self.reset_check_repaint()
|
||||||
self.reset_check_layout()
|
self.reset_check_layout()
|
||||||
await self.emit(LayoutMessage(self))
|
await self.emit(Layout(self))
|
||||||
elif self.check_repaint():
|
elif self.check_repaint():
|
||||||
self.render_cache = None
|
self.render_cache = None
|
||||||
self.reset_check_repaint()
|
self.reset_check_repaint()
|
||||||
await self.emit(UpdateMessage(self, self))
|
await self.emit(Update(self, self))
|
||||||
|
|
||||||
async def focus(self) -> None:
|
async def focus(self) -> None:
|
||||||
await self.app.set_focus(self)
|
await self.app.set_focus(self)
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ class DirectoryTree(TreeControl[DirEntry]):
|
|||||||
await node.expand()
|
await node.expand()
|
||||||
self.refresh(layout=True)
|
self.refresh(layout=True)
|
||||||
|
|
||||||
async def message_tree_click(self, message: TreeClick[DirEntry]) -> None:
|
async def handle_tree_click(self, message: TreeClick[DirEntry]) -> None:
|
||||||
dir_entry = message.node.data
|
dir_entry = message.node.data
|
||||||
if not dir_entry.is_dir:
|
if not dir_entry.is_dir:
|
||||||
await self.emit(FileClick(self, dir_entry.path))
|
await self.emit(FileClick(self, dir_entry.path))
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from rich.style import StyleType
|
|||||||
from .. import events
|
from .. import events
|
||||||
from ..layouts.grid import GridLayout
|
from ..layouts.grid import GridLayout
|
||||||
from ..message import Message
|
from ..message import Message
|
||||||
from ..messages import CursorMoveMessage
|
from ..messages import CursorMove
|
||||||
from ..scrollbar import ScrollTo, ScrollBar
|
from ..scrollbar import ScrollTo, ScrollBar
|
||||||
from ..geometry import clamp
|
from ..geometry import clamp
|
||||||
from ..view import View
|
from ..view import View
|
||||||
@@ -170,19 +170,19 @@ class ScrollView(View):
|
|||||||
self.animate("x", self.target_x, duration=1, easing="out_cubic")
|
self.animate("x", self.target_x, duration=1, easing="out_cubic")
|
||||||
self.animate("y", self.target_y, duration=1, easing="out_cubic")
|
self.animate("y", self.target_y, duration=1, easing="out_cubic")
|
||||||
|
|
||||||
async def message_scroll_up(self, message: Message) -> None:
|
async def handle_scroll_up(self, message: Message) -> None:
|
||||||
self.page_up()
|
self.page_up()
|
||||||
|
|
||||||
async def message_scroll_down(self, message: Message) -> None:
|
async def handle_scroll_down(self, message: Message) -> None:
|
||||||
self.page_down()
|
self.page_down()
|
||||||
|
|
||||||
async def message_scroll_left(self, message: Message) -> None:
|
async def handle_scroll_left(self, message: Message) -> None:
|
||||||
self.page_left()
|
self.page_left()
|
||||||
|
|
||||||
async def message_scroll_right(self, message: Message) -> None:
|
async def handle_scroll_right(self, message: Message) -> None:
|
||||||
self.page_right()
|
self.page_right()
|
||||||
|
|
||||||
async def message_scroll_to(self, message: ScrollTo) -> None:
|
async def handle_scroll_to(self, message: ScrollTo) -> None:
|
||||||
if message.x is not None:
|
if message.x is not None:
|
||||||
self.target_x = message.x
|
self.target_x = message.x
|
||||||
if message.y is not None:
|
if message.y is not None:
|
||||||
@@ -190,7 +190,7 @@ class ScrollView(View):
|
|||||||
self.animate("x", self.target_x, speed=150, easing="out_cubic")
|
self.animate("x", self.target_x, speed=150, easing="out_cubic")
|
||||||
self.animate("y", self.target_y, speed=150, easing="out_cubic")
|
self.animate("y", self.target_y, speed=150, easing="out_cubic")
|
||||||
|
|
||||||
async def message_window_change(self, message: Message) -> None:
|
async def handle_window_change(self, message: Message) -> None:
|
||||||
virtual_size = self.window.virtual_size
|
virtual_size = self.window.virtual_size
|
||||||
self.x = self.validate_x(self.x)
|
self.x = self.validate_x(self.x)
|
||||||
self.y = self.validate_y(self.y)
|
self.y = self.validate_y(self.y)
|
||||||
@@ -204,6 +204,6 @@ class ScrollView(View):
|
|||||||
if self.layout.show_row("hscroll", virtual_size.width > self.size.width):
|
if self.layout.show_row("hscroll", virtual_size.width > self.size.width):
|
||||||
self.refresh()
|
self.refresh()
|
||||||
|
|
||||||
def message_cursor_move(self, message: CursorMoveMessage) -> None:
|
def handle_cursor_move(self, message: CursorMove) -> None:
|
||||||
self.scroll_to_center(message.line)
|
self.scroll_to_center(message.line)
|
||||||
message.stop()
|
message.stop()
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ from ..reactive import Reactive
|
|||||||
from .._types import MessageTarget
|
from .._types import MessageTarget
|
||||||
from ..widget import Widget
|
from ..widget import Widget
|
||||||
from ..message import Message
|
from ..message import Message
|
||||||
from ..messages import CursorMoveMessage
|
from ..messages import CursorMove
|
||||||
|
|
||||||
|
|
||||||
NodeID = NewType("NodeID", int)
|
NodeID = NewType("NodeID", int)
|
||||||
@@ -189,11 +189,11 @@ class TreeControl(Generic[NodeDataType], Widget):
|
|||||||
show_cursor: Reactive[bool] = Reactive(False, layout=True)
|
show_cursor: Reactive[bool] = Reactive(False, layout=True)
|
||||||
|
|
||||||
def watch_show_cursor(self, value: bool) -> None:
|
def watch_show_cursor(self, value: bool) -> None:
|
||||||
self.emit_no_wait(CursorMoveMessage(self, self.cursor_line))
|
self.emit_no_wait(CursorMove(self, self.cursor_line))
|
||||||
|
|
||||||
def watch_cursor_line(self, value: int) -> None:
|
def watch_cursor_line(self, value: int) -> None:
|
||||||
if self.show_cursor:
|
if self.show_cursor:
|
||||||
self.emit_no_wait(CursorMoveMessage(self, value + self.gutter.top))
|
self.emit_no_wait(CursorMove(self, value + self.gutter.top))
|
||||||
|
|
||||||
async def add(
|
async def add(
|
||||||
self,
|
self,
|
||||||
@@ -309,7 +309,7 @@ if __name__ == "__main__":
|
|||||||
async def on_mount(self, event: events.Mount) -> None:
|
async def on_mount(self, event: events.Mount) -> None:
|
||||||
await self.view.dock(TreeControl("Tree Root", data="foo"))
|
await self.view.dock(TreeControl("Tree Root", data="foo"))
|
||||||
|
|
||||||
async def message_tree_click(self, message: TreeClick) -> None:
|
async def handle_tree_click(self, message: TreeClick) -> None:
|
||||||
if message.node.empty:
|
if message.node.empty:
|
||||||
await message.node.add("foo")
|
await message.node.add("foo")
|
||||||
await message.node.add("bar")
|
await message.node.add("bar")
|
||||||
|
|||||||
Reference in New Issue
Block a user