|
""" |
|
Mouse events. |
|
|
|
|
|
How it works |
|
------------ |
|
|
|
The renderer has a 2 dimensional grid of mouse event handlers. |
|
(`prompt_toolkit.layout.MouseHandlers`.) When the layout is rendered, the |
|
`Window` class will make sure that this grid will also be filled with |
|
callbacks. For vt100 terminals, mouse events are received through stdin, just |
|
like any other key press. There is a handler among the key bindings that |
|
catches these events and forwards them to such a mouse event handler. It passes |
|
through the `Window` class where the coordinates are translated from absolute |
|
coordinates to coordinates relative to the user control, and there |
|
`UIControl.mouse_handler` is called. |
|
""" |
|
from __future__ import annotations |
|
|
|
from enum import Enum |
|
|
|
from .data_structures import Point |
|
|
|
__all__ = ["MouseEventType", "MouseButton", "MouseModifier", "MouseEvent"] |
|
|
|
|
|
class MouseEventType(Enum): |
|
|
|
|
|
MOUSE_UP = "MOUSE_UP" |
|
|
|
|
|
|
|
MOUSE_DOWN = "MOUSE_DOWN" |
|
|
|
SCROLL_UP = "SCROLL_UP" |
|
SCROLL_DOWN = "SCROLL_DOWN" |
|
|
|
|
|
MOUSE_MOVE = "MOUSE_MOVE" |
|
|
|
|
|
class MouseButton(Enum): |
|
LEFT = "LEFT" |
|
MIDDLE = "MIDDLE" |
|
RIGHT = "RIGHT" |
|
|
|
|
|
NONE = "NONE" |
|
|
|
|
|
|
|
|
|
UNKNOWN = "UNKNOWN" |
|
|
|
|
|
class MouseModifier(Enum): |
|
SHIFT = "SHIFT" |
|
ALT = "ALT" |
|
CONTROL = "CONTROL" |
|
|
|
|
|
class MouseEvent: |
|
""" |
|
Mouse event, sent to `UIControl.mouse_handler`. |
|
|
|
:param position: `Point` instance. |
|
:param event_type: `MouseEventType`. |
|
""" |
|
|
|
def __init__( |
|
self, |
|
position: Point, |
|
event_type: MouseEventType, |
|
button: MouseButton, |
|
modifiers: frozenset[MouseModifier], |
|
) -> None: |
|
self.position = position |
|
self.event_type = event_type |
|
self.button = button |
|
self.modifiers = modifiers |
|
|
|
def __repr__(self) -> str: |
|
return "MouseEvent({!r},{!r},{!r},{!r})".format( |
|
self.position, |
|
self.event_type, |
|
self.button, |
|
self.modifiers, |
|
) |
|
|