Unified toggle keys, fixed ctrl, shit, alt logic
This commit is contained in:
		| @@ -13,6 +13,6 @@ function main() { | |||||||
|     echo "Working Dir: " $(pwd) |     echo "Working Dir: " $(pwd) | ||||||
| 
 | 
 | ||||||
|     source '/home/abaddon/Portable_Apps/py-venvs/gtk-apps-venv/venv/bin/activate' |     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 "$@"; | main "$@"; | ||||||
| @@ -8,6 +8,7 @@ from utils.pyautogui_control import ControlMixin | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # NOTE: Threads WILL NOT die with parent's destruction. | # NOTE: Threads WILL NOT die with parent's destruction. | ||||||
| def threaded_wrapper(fn): | def threaded_wrapper(fn): | ||||||
|     def wrapper(*args, **kwargs): |     def wrapper(*args, **kwargs): | ||||||
| @@ -37,9 +38,13 @@ class EndpointRegistry(): | |||||||
|     def get_endpoints(self): |     def get_endpoints(self): | ||||||
|         return self._endpoints |         return self._endpoints | ||||||
|  |  | ||||||
|  |  | ||||||
| class Pyautogui_Controller(ControlMixin): | class Pyautogui_Controller(ControlMixin): | ||||||
|     def __init__(self): |     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... | # NOTE: Just reminding myself we can add to builtins two different ways... | ||||||
| # __builtins__.update({"event_system": Builtins()}) | # __builtins__.update({"event_system": Builtins()}) | ||||||
| builtins.app_name          = "Mouse Keyboard" | builtins.app_name          = "Mouse Keyboard" | ||||||
|   | |||||||
| @@ -11,13 +11,12 @@ from .key import Key | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ############################  Left_Column Keys ############################ | ##############################  Left_Column Keys  ############################## | ||||||
|  |  | ||||||
| class Symbols_Key(Key): | class Symbols_Key(Key): | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
|         super(Symbols_Key, self).__init__("Symbols", "Symbols") |         super(Symbols_Key, self).__init__("Symbols", "Symbols") | ||||||
|  |  | ||||||
|  |  | ||||||
|     def setup_signals(self): |     def setup_signals(self): | ||||||
|         self.connect("released", self._clicked) |         self.connect("released", self._clicked) | ||||||
|  |  | ||||||
| @@ -28,28 +27,30 @@ class Symbols_Key(Key): | |||||||
|             for key in row: |             for key in row: | ||||||
|                 key.emit("toggle-symbol-keys", ()) |                 key.emit("toggle-symbol-keys", ()) | ||||||
|  |  | ||||||
| class CAPS_Key(Gtk.ToggleButton): | class CAPS_Key(Key): | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
|         super(CAPS_Key, self).__init__("Caps", "Caps") |         super(CAPS_Key, self).__init__("Caps", "Caps") | ||||||
|  |  | ||||||
|         self.set_vexpand(True) |         self.setup_styling() | ||||||
|  |  | ||||||
|         self.setup_signals() |  | ||||||
|         self.show_all() |         self.show_all() | ||||||
|  |  | ||||||
|  |     def setup_styling(self): | ||||||
|  |         self.set_vexpand(True) | ||||||
|  |  | ||||||
|     def setup_signals(self): |     def setup_signals(self): | ||||||
|         self.connect("clicked", self._clicked) |         self.connect("released", self._clicked) | ||||||
|  |  | ||||||
|     def _clicked(self, widget = None): |     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 row in key_columns.get_children(): | ||||||
|             for key in row: |             for key in row: | ||||||
|                 key.emit("toggle-caps", ()) |                 key.emit("toggle-caps", ()) | ||||||
|  |  | ||||||
|  |  | ||||||
| ############################  Right_Column Keys ############################ | ##############################  Right_Column Keys  ############################## | ||||||
|  |  | ||||||
| class Backspace_Key(Key): | class Backspace_Key(Key): | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
| @@ -64,20 +65,16 @@ class Backspace_Key(Key): | |||||||
| class Enter_Key(Key): | class Enter_Key(Key): | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
|         super(Enter_Key, self).__init__("Enter", "Enter") |         super(Enter_Key, self).__init__("Enter", "Enter") | ||||||
|  |  | ||||||
|         self.setup_styling() |         self.setup_styling() | ||||||
|  |  | ||||||
|     def setup_styling(self): |     def setup_styling(self): | ||||||
|         self.set_vexpand(True) |         self.set_vexpand(True) | ||||||
|  |  | ||||||
|     def setup_signals(self): |     def setup_signals(self): | ||||||
|         self.connect("released", self._clicked) |         self.connect("released", self._do_press_special_key) | ||||||
|  |  | ||||||
|     def _clicked(self, widget = None): |  | ||||||
|         typwriter.press_special_keys(self.get_label()) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ############################  Bottom_Key_Row Keys ############################ | #############################  Bottom_Key_Row Keys  ############################# | ||||||
|  |  | ||||||
| class AT_Key(Key): | class AT_Key(Key): | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
| @@ -105,7 +102,6 @@ class Esc_Key(Key): | |||||||
|     def setup_signals(self): |     def setup_signals(self): | ||||||
|         self.connect("released", self._do_press_special_key) |         self.connect("released", self._do_press_special_key) | ||||||
|  |  | ||||||
|  |  | ||||||
| class Del_Key(Key): | class Del_Key(Key): | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
|         super(Del_Key, self).__init__("Del", "Del") |         super(Del_Key, self).__init__("Del", "Del") | ||||||
| @@ -113,7 +109,6 @@ class Del_Key(Key): | |||||||
|     def setup_signals(self): |     def setup_signals(self): | ||||||
|         self.connect("released", self._do_press_special_key) |         self.connect("released", self._do_press_special_key) | ||||||
|  |  | ||||||
|  |  | ||||||
| class Ctrl_Key(Key): | class Ctrl_Key(Key): | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
|         super(Ctrl_Key, self).__init__("Ctrl", "Ctrl") |         super(Ctrl_Key, self).__init__("Ctrl", "Ctrl") | ||||||
| @@ -121,7 +116,6 @@ class Ctrl_Key(Key): | |||||||
|     def setup_signals(self): |     def setup_signals(self): | ||||||
|         self.connect("released", self._do_press_special_key) |         self.connect("released", self._do_press_special_key) | ||||||
|  |  | ||||||
|  |  | ||||||
| class Shift_Key(Key): | class Shift_Key(Key): | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
|         super(Shift_Key, self).__init__("Shift", "Shift") |         super(Shift_Key, self).__init__("Shift", "Shift") | ||||||
| @@ -129,7 +123,6 @@ class Shift_Key(Key): | |||||||
|     def setup_signals(self): |     def setup_signals(self): | ||||||
|         self.connect("released", self._do_press_special_key) |         self.connect("released", self._do_press_special_key) | ||||||
|  |  | ||||||
|  |  | ||||||
| class Alt_Key(Key): | class Alt_Key(Key): | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
|         super(Alt_Key, self).__init__("Alt", "Alt") |         super(Alt_Key, self).__init__("Alt", "Alt") | ||||||
| @@ -137,7 +130,6 @@ class Alt_Key(Key): | |||||||
|     def setup_signals(self): |     def setup_signals(self): | ||||||
|         self.connect("released", self._do_press_special_key) |         self.connect("released", self._do_press_special_key) | ||||||
|  |  | ||||||
|  |  | ||||||
| class PrtSc_Key(Key): | class PrtSc_Key(Key): | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
|         super(PrtSc_Key, self).__init__("PrtSc", "PrtSc") |         super(PrtSc_Key, self).__init__("PrtSc", "PrtSc") | ||||||
| @@ -145,7 +137,6 @@ class PrtSc_Key(Key): | |||||||
|     def setup_signals(self): |     def setup_signals(self): | ||||||
|         self.connect("released", self._do_press_special_key) |         self.connect("released", self._do_press_special_key) | ||||||
|  |  | ||||||
|  |  | ||||||
| class Up_Key(Key): | class Up_Key(Key): | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
|         super(Up_Key, self).__init__("Up", "Up") |         super(Up_Key, self).__init__("Up", "Up") | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ from gi.repository import Gtk | |||||||
| # Application imports | # Application imports | ||||||
|  |  | ||||||
|  |  | ||||||
| class Key(Gtk.Button): | class Key(Gtk.Button or Gtk.ToggleButton): | ||||||
|     def __init__(self, primary = "NULL", secondary = "NULL"): |     def __init__(self, primary = "NULL", secondary = "NULL"): | ||||||
|         super(Key, self).__init__() |         super(Key, self).__init__() | ||||||
|  |  | ||||||
| @@ -31,7 +31,12 @@ class Key(Gtk.Button): | |||||||
|         typwriter.type(key) |         typwriter.type(key) | ||||||
|  |  | ||||||
|     def _do_press_special_key(self, widget = None): |     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): |     def toggle_symbol_keys(self, widget = None, eve = None): | ||||||
|         self._is_symbol = not self._is_symbol |         self._is_symbol = not self._is_symbol | ||||||
|   | |||||||
| @@ -15,8 +15,15 @@ pyautogui.PAUSE            = 0 | |||||||
| class ControlMixin: | class ControlMixin: | ||||||
|  |  | ||||||
|     def type(self, key): |     def type(self, key): | ||||||
|  |         if self.isCtrlOn or self.isShiftOn or self.isAltOn: | ||||||
|  |             self.set_hotkeys() | ||||||
|  |  | ||||||
|         pyautogui.typewrite(key) |         pyautogui.typewrite(key) | ||||||
|  |  | ||||||
|  |         if self.isCtrlOn or self.isShiftOn or self.isAltOn: | ||||||
|  |             self.unset_hotkeys() | ||||||
|  |  | ||||||
|  |  | ||||||
|     def enter(self, widget = None, data = None): |     def enter(self, widget = None, data = None): | ||||||
|         pyautogui.press("enter") |         pyautogui.press("enter") | ||||||
|  |  | ||||||
| @@ -28,6 +35,16 @@ class ControlMixin: | |||||||
|             pyautogui.press(key.lower()) |             pyautogui.press(key.lower()) | ||||||
|             return True |             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): |         for i in range(1, 13): | ||||||
|             fkey = 'F' + str(i) |             fkey = 'F' + str(i) | ||||||
|             if key == fkey: |             if key == fkey: | ||||||
| @@ -41,84 +58,18 @@ class ControlMixin: | |||||||
|             pyautogui.typewrite(char) |             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 unset_hotkeys(self): | ||||||
|     # def typeString(self, widget = None, data = None): |         pyautogui.keyUp('ctrl') | ||||||
|     #     text = self.autoTypeField.get_text() |         pyautogui.keyUp('shiftleft') | ||||||
|     #     for char in text: |         pyautogui.keyUp('shiftright') | ||||||
|     #         self.do_insert(char) |         pyautogui.keyUp('alt') | ||||||
|     # |  | ||||||
|     # 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") |  | ||||||
|   | |||||||
| @@ -6,3 +6,7 @@ | |||||||
| #popoutkeyboard { | #popoutkeyboard { | ||||||
|     background-color: rgba(0, 65, 125, 1); |     background-color: rgba(0, 65, 125, 1); | ||||||
| } */ | } */ | ||||||
|  |  | ||||||
|  | .toggled_bttn { | ||||||
|  |     background-color: rgba(0, 65, 125, 1); | ||||||
|  | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user