From 3b0c7370cc8804bb8d0dde544c7e1243b262373a Mon Sep 17 00:00:00 2001 From: Athanasius Date: Thu, 22 Dec 2022 14:43:51 +0000 Subject: [PATCH] hotkey: Make more of the windows methods abstract ones in parent Without this mypy objects to calling them due to not being in the visible AbstractKetkeyMgr type. --- hotkey/__init__.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/hotkey/__init__.py b/hotkey/__init__.py index 782a16fa..5162621c 100644 --- a/hotkey/__init__.py +++ b/hotkey/__init__.py @@ -4,6 +4,7 @@ import abc import sys from abc import abstractmethod +from typing import Optional, Tuple, Union class AbstractHotkeyMgr(abc.ABC): @@ -19,6 +20,41 @@ class AbstractHotkeyMgr(abc.ABC): """Unregister the hotkey handling.""" pass + @abstractmethod + def acquire_start(self) -> None: + """Start acquiring hotkey state via polling.""" + pass + + @abstractmethod + def acquire_stop(self) -> None: + """Stop acquiring hotkey state.""" + pass + + @abstractmethod + def fromevent(self, event) -> Optional[Union[bool, Tuple]]: + """ + Return configuration (keycode, modifiers) or None=clear or False=retain previous. + + event.state is a pain - it shows the state of the modifiers *before* a modifier key was pressed. + event.state *does* differentiate between left and right Ctrl and Alt and between Return and Enter + by putting KF_EXTENDED in bit 18, but RegisterHotKey doesn't differentiate. + + :param event: tk event ? + :return: False to retain previous, None to not use, else (keycode, modifiers) + """ + pass + + @abstractmethod + def display(self, keycode: int, modifiers: int) -> str: + """ + Return displayable form of given hotkey + modifiers. + + :param keycode: + :param modifiers: + :return: string form + """ + pass + @abstractmethod def play_good(self) -> None: """Play the 'good' sound."""