mirror of
https://github.com/Textualize/rich.git
synced 2025-08-19 01:40:37 +00:00
idle events disable
This commit is contained in:
parent
6d4227bb53
commit
d13b133a37
4 changed files with 31 additions and 20 deletions
|
@ -108,6 +108,7 @@ if __name__ == "__main__":
|
|||
from logging import FileHandler
|
||||
|
||||
from .widgets.header import Header
|
||||
from .widgets.placeholder import Placeholder
|
||||
|
||||
logging.basicConfig(
|
||||
level="NOTSET",
|
||||
|
@ -124,6 +125,7 @@ if __name__ == "__main__":
|
|||
|
||||
async def on_startup(self, event: events.Startup) -> None:
|
||||
await self.view.mount(Header(self.title), slot="header")
|
||||
await self.view.mount(Placeholder(), slot="body")
|
||||
self.refresh()
|
||||
|
||||
MyApp.run()
|
||||
|
|
|
@ -126,16 +126,19 @@ class MessagePump:
|
|||
self, message: Message, priority: int = 0
|
||||
) -> Optional[bool]:
|
||||
if isinstance(message, events.Event):
|
||||
method_name = f"on_{message.name}"
|
||||
dispatch_function: MessageHandler = getattr(self, method_name, None)
|
||||
if dispatch_function is not None:
|
||||
await dispatch_function(message)
|
||||
if message.bubble and self._parent:
|
||||
await self._parent.post_message(message, priority)
|
||||
await self.on_event(message, priority)
|
||||
else:
|
||||
return await self.on_message(message)
|
||||
return False
|
||||
|
||||
async def on_event(self, event: events.Event, priority: int) -> None:
|
||||
method_name = f"on_{event.name}"
|
||||
dispatch_function: MessageHandler = getattr(self, method_name, None)
|
||||
if dispatch_function is not None:
|
||||
await dispatch_function(event)
|
||||
if event.bubble and self._parent:
|
||||
await self._parent.post_message(event, priority)
|
||||
|
||||
async def on_message(self, message: Message) -> None:
|
||||
pass
|
||||
|
||||
|
|
|
@ -127,5 +127,5 @@ class LayoutView(View):
|
|||
finally:
|
||||
self.mouse_over = widget
|
||||
await widget.post_message(
|
||||
events.MouseMove(self, event.x - region.x, event.y - region.x)
|
||||
events.MouseMove(self, event.x - region.x, event.y - region.y)
|
||||
)
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
from logging import getLogger
|
||||
from typing import ClassVar, NamedTuple, Optional, TYPE_CHECKING
|
||||
|
||||
|
||||
from rich.align import Align
|
||||
from rich.console import Console, ConsoleOptions, RenderResult, RenderableType
|
||||
from rich.pretty import Pretty
|
||||
from rich.panel import Panel
|
||||
from rich.repr import rich_repr, RichReprResult
|
||||
|
||||
from typing import ClassVar, NamedTuple, Optional, TYPE_CHECKING
|
||||
|
||||
from . import events
|
||||
from ._context import active_app
|
||||
from .message_pump import MessagePump
|
||||
|
@ -13,22 +15,14 @@ from .message_pump import MessagePump
|
|||
if TYPE_CHECKING:
|
||||
from .app import App
|
||||
|
||||
log = getLogger("rich")
|
||||
|
||||
|
||||
class WidgetDimensions(NamedTuple):
|
||||
width: int
|
||||
height: int
|
||||
|
||||
|
||||
class WidgetPlaceholder:
|
||||
def __init__(self, widget: "Widget") -> None:
|
||||
self.widget = widget
|
||||
|
||||
def __rich__(self) -> Panel:
|
||||
return Panel(
|
||||
Align.center(Pretty(self.widget), vertical="middle"), title="Widget"
|
||||
)
|
||||
|
||||
|
||||
@rich_repr
|
||||
class Widget(MessagePump):
|
||||
_count: ClassVar[int] = 0
|
||||
|
@ -41,6 +35,7 @@ class Widget(MessagePump):
|
|||
Widget._count += 1
|
||||
self.size = WidgetDimensions(0, 0)
|
||||
self.size_changed = False
|
||||
self.mouse_over = False
|
||||
super().__init__()
|
||||
if not self.mouse_events:
|
||||
self.disable_messages(events.MouseMove)
|
||||
|
@ -64,7 +59,11 @@ class Widget(MessagePump):
|
|||
def render(
|
||||
self, console: Console, options: ConsoleOptions, new_size: WidgetDimensions
|
||||
) -> RenderableType:
|
||||
return WidgetPlaceholder(self)
|
||||
return Panel(
|
||||
Align.center(Pretty(self), vertical="middle"),
|
||||
title=self.__class__.__name__,
|
||||
border_style="green" if self.mouse_over else "blue",
|
||||
)
|
||||
|
||||
def __rich_console__(
|
||||
self, console: Console, options: ConsoleOptions
|
||||
|
@ -73,3 +72,10 @@ class Widget(MessagePump):
|
|||
renderable = self.render(console, options, new_size)
|
||||
self.size = new_size
|
||||
yield renderable
|
||||
|
||||
async def on_event(self, event: events.Event, priority: int) -> None:
|
||||
if isinstance(event, (events.MouseEnter, events.MouseLeave)):
|
||||
self.mouse_over = isinstance(event, events.MouseEnter)
|
||||
log.debug("%r", self.mouse_over)
|
||||
await self.refresh()
|
||||
await super().on_event(event, priority)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue