message_ to handle_

This commit is contained in:
Will McGugan
2021-08-27 16:50:28 +01:00
parent 5ba536ff03
commit 5590829eef
11 changed files with 38 additions and 31 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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