From 5590829eeff6d0807385d1be5fd0db8efac47a4b Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Fri, 27 Aug 2021 16:50:28 +0100 Subject: [PATCH] message_ to handle_ --- CHANGELOG.md | 7 +++++++ examples/calculator.py | 2 +- examples/code_viewer.py | 2 +- src/textual/message_pump.py | 2 +- src/textual/messages.py | 12 ++++++------ src/textual/view.py | 8 ++++---- src/textual/views/_window_view.py | 4 ++-- src/textual/widget.py | 6 +++--- src/textual/widgets/_directory_tree.py | 2 +- src/textual/widgets/_scroll_view.py | 16 ++++++++-------- src/textual/widgets/_tree_control.py | 8 ++++---- 11 files changed, 38 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ce1a09e93..3faee7c2a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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/) 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 ### Added diff --git a/examples/calculator.py b/examples/calculator.py index 99f69828b..9770228c1 100644 --- a/examples/calculator.py +++ b/examples/calculator.py @@ -154,7 +154,7 @@ class Calculator(GridView): *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""" assert isinstance(message.sender, Button) diff --git a/examples/code_viewer.py b/examples/code_viewer.py index 132156e1c..4aa10fc64 100644 --- a/examples/code_viewer.py +++ b/examples/code_viewer.py @@ -45,7 +45,7 @@ class MyApp(App): ) 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.""" syntax: RenderableType diff --git a/src/textual/message_pump.py b/src/textual/message_pump.py index c8e216e4e..17a563bb2 100644 --- a/src/textual/message_pump.py +++ b/src/textual/message_pump.py @@ -252,7 +252,7 @@ class MessagePump: async def on_message(self, message: Message) -> None: _rich_traceback_guard = True - method_name = f"message_{message.name}" + method_name = f"handle_{message.name}" method = getattr(self, method_name, None) if method is not None: diff --git a/src/textual/messages.py b/src/textual/messages.py index c80f68d00..87331e981 100644 --- a/src/textual/messages.py +++ b/src/textual/messages.py @@ -12,7 +12,7 @@ if TYPE_CHECKING: @rich.repr.auto -class UpdateMessage(Message, verbosity=3): +class Update(Message, verbosity=3): def __init__(self, sender: MessagePump, widget: Widget): super().__init__(sender) self.widget = widget @@ -22,22 +22,22 @@ class UpdateMessage(Message, verbosity=3): yield self.widget def __eq__(self, other: object) -> bool: - if isinstance(other, UpdateMessage): + if isinstance(other, Update): return self.widget == other.widget return NotImplemented def can_replace(self, message: Message) -> bool: - return isinstance(message, UpdateMessage) and self == message + return isinstance(message, Update) and self == message @rich.repr.auto -class LayoutMessage(Message, verbosity=3): +class Layout(Message, verbosity=3): def can_replace(self, message: Message) -> bool: - return isinstance(message, (LayoutMessage, UpdateMessage)) + return isinstance(message, (Layout, Update)) @rich.repr.auto -class CursorMoveMessage(Message): +class CursorMove(Message): def __init__(self, sender: MessagePump, line: int) -> None: self.line = line super().__init__(sender) diff --git a/src/textual/view.py b/src/textual/view.py index f86811812..f981fc9a9 100644 --- a/src/textual/view.py +++ b/src/textual/view.py @@ -11,7 +11,7 @@ from . import events from . import log from .layout import Layout, NoWidget from .geometry import Size, Offset, Region -from .messages import UpdateMessage, LayoutMessage +from .messages import Update, Layout from .reactive import Reactive, watch from .widget import Widget, Widget @@ -89,7 +89,7 @@ class View(Widget): # def check_layout(self) -> bool: # 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: message.stop() widget = message.widget @@ -99,7 +99,7 @@ class View(Widget): if display_update is not None: 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: message.stop() await self.refresh_layout() @@ -245,4 +245,4 @@ class View(Widget): async def action_toggle(self, name: str) -> None: widget = self.named_widgets[name] widget.visible = not widget.visible - await self.post_message(LayoutMessage(self)) + await self.post_message(Layout(self)) diff --git a/src/textual/views/_window_view.py b/src/textual/views/_window_view.py index 952da07fc..feab3dfdb 100644 --- a/src/textual/views/_window_view.py +++ b/src/textual/views/_window_view.py @@ -7,7 +7,7 @@ from ..geometry import Offset, Size from ..layouts.vertical import VerticalLayout from ..view import View from ..message import Message -from ..messages import UpdateMessage, LayoutMessage +from ..messages import Update, Layout from ..widget import Widget from ..widgets import Static @@ -40,7 +40,7 @@ class WindowView(View, layout=VerticalLayout): self.refresh(layout=True) await self.emit(WindowChange(self)) - async def message_update(self, message: UpdateMessage) -> None: + async def handle_update(self, message: Update) -> None: message.prevent_default() await self.emit(WindowChange(self)) diff --git a/src/textual/widget.py b/src/textual/widget.py index 38f6a3249..996993d2e 100644 --- a/src/textual/widget.py +++ b/src/textual/widget.py @@ -30,7 +30,7 @@ from ._context import active_app from .geometry import Size from .message import Message from .message_pump import MessagePump -from .messages import LayoutMessage, UpdateMessage +from .messages import Layout, Update from .reactive import Reactive, watch from ._types import Lines @@ -286,11 +286,11 @@ class Widget(MessagePump): self.render_cache = None self.reset_check_repaint() self.reset_check_layout() - await self.emit(LayoutMessage(self)) + await self.emit(Layout(self)) elif self.check_repaint(): self.render_cache = None self.reset_check_repaint() - await self.emit(UpdateMessage(self, self)) + await self.emit(Update(self, self)) async def focus(self) -> None: await self.app.set_focus(self) diff --git a/src/textual/widgets/_directory_tree.py b/src/textual/widgets/_directory_tree.py index c7e621a4e..69da24fae 100644 --- a/src/textual/widgets/_directory_tree.py +++ b/src/textual/widgets/_directory_tree.py @@ -113,7 +113,7 @@ class DirectoryTree(TreeControl[DirEntry]): await node.expand() 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 if not dir_entry.is_dir: await self.emit(FileClick(self, dir_entry.path)) diff --git a/src/textual/widgets/_scroll_view.py b/src/textual/widgets/_scroll_view.py index d43bf9d33..4a187e127 100644 --- a/src/textual/widgets/_scroll_view.py +++ b/src/textual/widgets/_scroll_view.py @@ -7,7 +7,7 @@ from rich.style import StyleType from .. import events from ..layouts.grid import GridLayout from ..message import Message -from ..messages import CursorMoveMessage +from ..messages import CursorMove from ..scrollbar import ScrollTo, ScrollBar from ..geometry import clamp from ..view import View @@ -170,19 +170,19 @@ class ScrollView(View): self.animate("x", self.target_x, 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() - async def message_scroll_down(self, message: Message) -> None: + async def handle_scroll_down(self, message: Message) -> None: self.page_down() - async def message_scroll_left(self, message: Message) -> None: + async def handle_scroll_left(self, message: Message) -> None: self.page_left() - async def message_scroll_right(self, message: Message) -> None: + async def handle_scroll_right(self, message: Message) -> None: 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: self.target_x = message.x 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("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 self.x = self.validate_x(self.x) 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): self.refresh() - def message_cursor_move(self, message: CursorMoveMessage) -> None: + def handle_cursor_move(self, message: CursorMove) -> None: self.scroll_to_center(message.line) message.stop() diff --git a/src/textual/widgets/_tree_control.py b/src/textual/widgets/_tree_control.py index f4c38f45c..5d98d76d9 100644 --- a/src/textual/widgets/_tree_control.py +++ b/src/textual/widgets/_tree_control.py @@ -15,7 +15,7 @@ from ..reactive import Reactive from .._types import MessageTarget from ..widget import Widget from ..message import Message -from ..messages import CursorMoveMessage +from ..messages import CursorMove NodeID = NewType("NodeID", int) @@ -189,11 +189,11 @@ class TreeControl(Generic[NodeDataType], Widget): show_cursor: Reactive[bool] = Reactive(False, layout=True) 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: 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( self, @@ -309,7 +309,7 @@ if __name__ == "__main__": async def on_mount(self, event: events.Mount) -> None: 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: await message.node.add("foo") await message.node.add("bar")