From 0a2e2587665804e1d5ae97f1f5d1b7213d1f9341 Mon Sep 17 00:00:00 2001 From: itdominator <1itdominator@gmail.com> Date: Tue, 30 Aug 2022 17:17:35 -0500 Subject: [PATCH] Unified toggle keys, fixed ctrl, shit, alt logic --- src/debugger.sh => debugger.sh | 2 +- src/__builtins__.py | 8 +- src/core/widgets/defined_keys.py | 35 +++--- src/core/widgets/key.py | 9 +- src/utils/pyautogui_control.py | 109 +++++------------- .../usr/share/mouse keyboard/stylesheet.css | 4 + 6 files changed, 62 insertions(+), 105 deletions(-) rename src/debugger.sh => debugger.sh (89%) diff --git a/src/debugger.sh b/debugger.sh similarity index 89% rename from src/debugger.sh rename to debugger.sh index e229f40..42162e7 100755 --- a/src/debugger.sh +++ b/debugger.sh @@ -13,6 +13,6 @@ function main() { echo "Working Dir: " $(pwd) source '/home/abaddon/Portable_Apps/py-venvs/gtk-apps-venv/venv/bin/activate' - python -m pudb $(pwd)/__main__.py; bash + python -m pudb $(pwd)/src/__main__.py; bash } main "$@"; diff --git a/src/__builtins__.py b/src/__builtins__.py index 547186e..d8255fd 100644 --- a/src/__builtins__.py +++ b/src/__builtins__.py @@ -8,6 +8,7 @@ from utils.pyautogui_control import ControlMixin + # NOTE: Threads WILL NOT die with parent's destruction. def threaded_wrapper(fn): def wrapper(*args, **kwargs): @@ -37,9 +38,13 @@ class EndpointRegistry(): def get_endpoints(self): return self._endpoints + class Pyautogui_Controller(ControlMixin): def __init__(self): - pass + self.isCtrlOn = False + self.isShiftOn = False + self.isAltOn = False + @@ -66,6 +71,7 @@ keys_json = { + # NOTE: Just reminding myself we can add to builtins two different ways... # __builtins__.update({"event_system": Builtins()}) builtins.app_name = "Mouse Keyboard" diff --git a/src/core/widgets/defined_keys.py b/src/core/widgets/defined_keys.py index fd818b9..5ab91bd 100644 --- a/src/core/widgets/defined_keys.py +++ b/src/core/widgets/defined_keys.py @@ -11,13 +11,12 @@ from .key import Key -############################ Left_Column Keys ############################ +############################## Left_Column Keys ############################## class Symbols_Key(Key): def __init__(self): super(Symbols_Key, self).__init__("Symbols", "Symbols") - def setup_signals(self): self.connect("released", self._clicked) @@ -28,28 +27,30 @@ class Symbols_Key(Key): for key in row: key.emit("toggle-symbol-keys", ()) -class CAPS_Key(Gtk.ToggleButton): +class CAPS_Key(Key): def __init__(self): super(CAPS_Key, self).__init__("Caps", "Caps") - self.set_vexpand(True) - - self.setup_signals() + self.setup_styling() self.show_all() + def setup_styling(self): + self.set_vexpand(True) def setup_signals(self): - self.connect("clicked", self._clicked) + self.connect("released", self._clicked) def _clicked(self, widget = None): - key_columns = self.get_parent().get_parent().get_children()[1] + ctx = widget.get_style_context() + ctx.remove_class("toggled_bttn") if ctx.has_class("toggled_bttn") else ctx.add_class("toggled_bttn") + key_columns = self.get_parent().get_parent().get_children()[1] for row in key_columns.get_children(): for key in row: key.emit("toggle-caps", ()) -############################ Right_Column Keys ############################ +############################## Right_Column Keys ############################## class Backspace_Key(Key): def __init__(self): @@ -64,20 +65,16 @@ class Backspace_Key(Key): class Enter_Key(Key): def __init__(self): super(Enter_Key, self).__init__("Enter", "Enter") - self.setup_styling() def setup_styling(self): self.set_vexpand(True) def setup_signals(self): - self.connect("released", self._clicked) - - def _clicked(self, widget = None): - typwriter.press_special_keys(self.get_label()) + self.connect("released", self._do_press_special_key) -############################ Bottom_Key_Row Keys ############################ +############################# Bottom_Key_Row Keys ############################# class AT_Key(Key): def __init__(self): @@ -96,7 +93,7 @@ class COM_Key(Key): super(COM_Key, self).__init__(".com", ".com") -############################ Controls_Column Keys ############################ +############################ Controls_Column Keys ############################ class Esc_Key(Key): def __init__(self): @@ -105,7 +102,6 @@ class Esc_Key(Key): def setup_signals(self): self.connect("released", self._do_press_special_key) - class Del_Key(Key): def __init__(self): super(Del_Key, self).__init__("Del", "Del") @@ -113,7 +109,6 @@ class Del_Key(Key): def setup_signals(self): self.connect("released", self._do_press_special_key) - class Ctrl_Key(Key): def __init__(self): super(Ctrl_Key, self).__init__("Ctrl", "Ctrl") @@ -121,7 +116,6 @@ class Ctrl_Key(Key): def setup_signals(self): self.connect("released", self._do_press_special_key) - class Shift_Key(Key): def __init__(self): super(Shift_Key, self).__init__("Shift", "Shift") @@ -129,7 +123,6 @@ class Shift_Key(Key): def setup_signals(self): self.connect("released", self._do_press_special_key) - class Alt_Key(Key): def __init__(self): super(Alt_Key, self).__init__("Alt", "Alt") @@ -137,7 +130,6 @@ class Alt_Key(Key): def setup_signals(self): self.connect("released", self._do_press_special_key) - class PrtSc_Key(Key): def __init__(self): super(PrtSc_Key, self).__init__("PrtSc", "PrtSc") @@ -145,7 +137,6 @@ class PrtSc_Key(Key): def setup_signals(self): self.connect("released", self._do_press_special_key) - class Up_Key(Key): def __init__(self): super(Up_Key, self).__init__("Up", "Up") diff --git a/src/core/widgets/key.py b/src/core/widgets/key.py index 7bda99a..da73a46 100644 --- a/src/core/widgets/key.py +++ b/src/core/widgets/key.py @@ -8,7 +8,7 @@ from gi.repository import Gtk # Application imports -class Key(Gtk.Button): +class Key(Gtk.Button or Gtk.ToggleButton): def __init__(self, primary = "NULL", secondary = "NULL"): super(Key, self).__init__() @@ -31,7 +31,12 @@ class Key(Gtk.Button): typwriter.type(key) def _do_press_special_key(self, widget = None): - typwriter.press_special_keys(self.get_label()) + key = self.get_label() + if key in ["Ctrl", "Shift", "Alt"]: + ctx = widget.get_style_context() + ctx.remove_class("toggled_bttn") if ctx.has_class("toggled_bttn") else ctx.add_class("toggled_bttn") + + typwriter.press_special_keys(key) def toggle_symbol_keys(self, widget = None, eve = None): self._is_symbol = not self._is_symbol diff --git a/src/utils/pyautogui_control.py b/src/utils/pyautogui_control.py index ab9c89b..f217084 100644 --- a/src/utils/pyautogui_control.py +++ b/src/utils/pyautogui_control.py @@ -15,8 +15,15 @@ pyautogui.PAUSE = 0 class ControlMixin: def type(self, key): + if self.isCtrlOn or self.isShiftOn or self.isAltOn: + self.set_hotkeys() + pyautogui.typewrite(key) + if self.isCtrlOn or self.isShiftOn or self.isAltOn: + self.unset_hotkeys() + + def enter(self, widget = None, data = None): pyautogui.press("enter") @@ -28,6 +35,16 @@ class ControlMixin: pyautogui.press(key.lower()) return True + if key in ["Ctrl", "Shift", "Alt"]: + if key == "Ctrl": + self.isCtrlOn = not self.isCtrlOn + if key == "Shift": + self.isShiftOn = not self.isShiftOn + if key == "Alt": + self.isAltOn = not self.isAltOn + + return True + for i in range(1, 13): fkey = 'F' + str(i) if key == fkey: @@ -41,84 +58,18 @@ class ControlMixin: pyautogui.typewrite(char) + def set_hotkeys(self): + if self.isCtrlOn: + pyautogui.keyDown('ctrl') + if self.isShiftOn: + pyautogui.keyDown('shiftleft') + pyautogui.keyDown('shiftright') + if self.isAltOn: + pyautogui.keyDown('alt') - - # def typeString(self, widget = None, data = None): - # text = self.autoTypeField.get_text() - # for char in text: - # self.do_insert(char) - # - # def insert(self, widget = None, data = None, key = None): - # if not key: - # key = widget.get_label().strip() - # - # if self.is_keypress_type(key): - # return - # - # if self.isCapsLockOn: - # key = key.upper() - # - # self.do_insert(key) - # - # - # def do_insert(self, key): - # if self.isCtrlOn or self.isShiftOn or self.isAltOn: - # self.set_hotkeys() - # - # pyautogui.typewrite(key) - # - # if self.isCtrlOn or self.isShiftOn or self.isAltOn: - # self.unset_hotkeys() - # - # - # def is_keypress_type(self, key): - # if key in ["Esc", "Tab", "Space", "Del", "Up", "Down", "Left", "Right", "PrtSc"]: - # pyautogui.press(key.lower()) - # return True - # - # for i in range(1, 13): - # fkey = 'F' + str(i) - # if key == fkey: - # pyautogui.press(key.lower()) - # return True - # - # return False - # - # - # def set_hotkeys(self): - # if self.isCtrlOn: - # pyautogui.keyDown('ctrl') - # if self.isShiftOn: - # pyautogui.keyDown('shiftleft') - # pyautogui.keyDown('shiftright') - # if self.isAltOn: - # pyautogui.keyDown('alt') - # - # - # def unset_hotkeys(self): - # pyautogui.keyUp('ctrl') - # pyautogui.keyUp('shiftleft') - # pyautogui.keyUp('shiftright') - # pyautogui.keyUp('alt') - # - # - # def toggleCaps(self, widget, data=None): - # self.isCapsLockOn = False if self.isCapsLockOn else True - # - # def tgglCtrl(self, widget, data=None): - # self.isCtrlOn = False if self.isCtrlOn else True - # - # def tgglShift(self, widget, data=None): - # self.isShiftOn = False if self.isShiftOn else True - # - # def tgglAlt(self, widget, data=None): - # self.isAltOn = False if self.isAltOn else True - # - # - # def enter(self, widget, data=None): - # pyautogui.press("enter") - # - # - # def backspace(self, widget, data=None): - # pyautogui.press("backspace") + def unset_hotkeys(self): + pyautogui.keyUp('ctrl') + pyautogui.keyUp('shiftleft') + pyautogui.keyUp('shiftright') + pyautogui.keyUp('alt') diff --git a/user_config/usr/share/mouse keyboard/stylesheet.css b/user_config/usr/share/mouse keyboard/stylesheet.css index f219141..907e898 100644 --- a/user_config/usr/share/mouse keyboard/stylesheet.css +++ b/user_config/usr/share/mouse keyboard/stylesheet.css @@ -6,3 +6,7 @@ #popoutkeyboard { background-color: rgba(0, 65, 125, 1); } */ + +.toggled_bttn { + background-color: rgba(0, 65, 125, 1); +}