| | """ |
| | 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 f"MouseEvent({self.position!r},{self.event_type!r},{self.button!r},{self.modifiers!r})" |
| |
|