1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# Copyright 2021 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
"""Functions for handling mouse events."""
from typing import Callable, TYPE_CHECKING
from prompt_toolkit.layout.mouse_handlers import MouseHandlers
from prompt_toolkit.mouse_events import MouseEvent, MouseEventType
if TYPE_CHECKING:
# pylint: disable=ungrouped-imports
from prompt_toolkit.key_binding.key_bindings import NotImplementedOrNone
def on_click(on_click_function: Callable, mouse_event: MouseEvent):
"""Run a function on mouse click.
Here is an example of how to add add click functionality to a piece of
formatted text. ::
import functools
import pw_console.widgets.mouse_handlers
def get_tokens(self):
mouse_handler = functools.partial(
pw_console.widgets.mouse_handlers.on_click,
self.your_widget.do_something)
return [
(
'class:text-button',
' Click Here to Do Something ',
mouse_handler,
),
]
"""
if mouse_event.event_type == MouseEventType.MOUSE_UP:
on_click_function()
return None
return NotImplemented
class EmptyMouseHandler(MouseHandlers):
"""MouseHandler that does not propagate events."""
def set_mouse_handler_for_range(
self,
x_min: int,
x_max: int,
y_min: int,
y_max: int,
handler: Callable[[MouseEvent], 'NotImplementedOrNone'],
) -> None:
return
|