Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/prompt_toolkit/mouse_events.py: 83%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

29 statements  

1""" 

2Mouse events. 

3 

4 

5How it works 

6------------ 

7 

8The renderer has a 2 dimensional grid of mouse event handlers. 

9(`prompt_toolkit.layout.MouseHandlers`.) When the layout is rendered, the 

10`Window` class will make sure that this grid will also be filled with 

11callbacks. For vt100 terminals, mouse events are received through stdin, just 

12like any other key press. There is a handler among the key bindings that 

13catches these events and forwards them to such a mouse event handler. It passes 

14through the `Window` class where the coordinates are translated from absolute 

15coordinates to coordinates relative to the user control, and there 

16`UIControl.mouse_handler` is called. 

17""" 

18 

19from __future__ import annotations 

20 

21from enum import Enum 

22 

23from .data_structures import Point 

24 

25__all__ = ["MouseEventType", "MouseButton", "MouseModifier", "MouseEvent"] 

26 

27 

28class MouseEventType(Enum): 

29 # Mouse up: This same event type is fired for all three events: left mouse 

30 # up, right mouse up, or middle mouse up 

31 MOUSE_UP = "MOUSE_UP" 

32 

33 # Mouse down: This implicitly refers to the left mouse down (this event is 

34 # not fired upon pressing the middle or right mouse buttons). 

35 MOUSE_DOWN = "MOUSE_DOWN" 

36 

37 SCROLL_UP = "SCROLL_UP" 

38 SCROLL_DOWN = "SCROLL_DOWN" 

39 

40 # Triggered when the left mouse button is held down, and the mouse moves 

41 MOUSE_MOVE = "MOUSE_MOVE" 

42 

43 

44class MouseButton(Enum): 

45 LEFT = "LEFT" 

46 MIDDLE = "MIDDLE" 

47 RIGHT = "RIGHT" 

48 

49 # When we're scrolling, or just moving the mouse and not pressing a button. 

50 NONE = "NONE" 

51 

52 # This is for when we don't know which mouse button was pressed, but we do 

53 # know that one has been pressed during this mouse event (as opposed to 

54 # scrolling, for example) 

55 UNKNOWN = "UNKNOWN" 

56 

57 

58class MouseModifier(Enum): 

59 SHIFT = "SHIFT" 

60 ALT = "ALT" 

61 CONTROL = "CONTROL" 

62 

63 

64class MouseEvent: 

65 """ 

66 Mouse event, sent to `UIControl.mouse_handler`. 

67 

68 :param position: `Point` instance. 

69 :param event_type: `MouseEventType`. 

70 """ 

71 

72 def __init__( 

73 self, 

74 position: Point, 

75 event_type: MouseEventType, 

76 button: MouseButton, 

77 modifiers: frozenset[MouseModifier], 

78 ) -> None: 

79 self.position = position 

80 self.event_type = event_type 

81 self.button = button 

82 self.modifiers = modifiers 

83 

84 def __repr__(self) -> str: 

85 return f"MouseEvent({self.position!r},{self.event_type!r},{self.button!r},{self.modifiers!r})"