12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- """
- 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: This same event type is fired for all three events: left mouse
- # up, right mouse up, or middle mouse up
- MOUSE_UP = "MOUSE_UP"
- # Mouse down: This implicitly refers to the left mouse down (this event is
- # not fired upon pressing the middle or right mouse buttons).
- MOUSE_DOWN = "MOUSE_DOWN"
- SCROLL_UP = "SCROLL_UP"
- SCROLL_DOWN = "SCROLL_DOWN"
- # Triggered when the left mouse button is held down, and the mouse moves
- MOUSE_MOVE = "MOUSE_MOVE"
- class MouseButton(Enum):
- LEFT = "LEFT"
- MIDDLE = "MIDDLE"
- RIGHT = "RIGHT"
- # When we're scrolling, or just moving the mouse and not pressing a button.
- NONE = "NONE"
- # This is for when we don't know which mouse button was pressed, but we do
- # know that one has been pressed during this mouse event (as opposed to
- # scrolling, for example)
- 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 f"MouseEvent({self.position!r},{self.event_type!r},{self.button!r},{self.modifiers!r})"
|