Externalized some signal handler logic to new files, better keybinding control
This commit is contained in:
		| @@ -9,6 +9,7 @@ from gi.repository import Gdk | |||||||
| from gi.repository import GLib | from gi.repository import GLib | ||||||
|  |  | ||||||
| # Application imports | # Application imports | ||||||
|  | from .mixins.signals_mixins import SignalsMixins | ||||||
| from .mixins.dummy_mixin import DummyMixin | from .mixins.dummy_mixin import DummyMixin | ||||||
| from .controller_data import ControllerData | from .controller_data import ControllerData | ||||||
| from .core_widget import CoreWidget | from .core_widget import CoreWidget | ||||||
| @@ -16,7 +17,7 @@ from .core_widget import CoreWidget | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class Controller(DummyMixin, ControllerData): | class Controller(DummyMixin, SignalsMixins, ControllerData): | ||||||
|     def __init__(self, args, unknownargs): |     def __init__(self, args, unknownargs): | ||||||
|         self._setup_styling() |         self._setup_styling() | ||||||
|         self._setup_signals() |         self._setup_signals() | ||||||
| @@ -38,9 +39,6 @@ class Controller(DummyMixin, ControllerData): | |||||||
|     def _subscribe_to_events(self): |     def _subscribe_to_events(self): | ||||||
|         event_system.subscribe("handle_file_from_ipc", self.handle_file_from_ipc) |         event_system.subscribe("handle_file_from_ipc", self.handle_file_from_ipc) | ||||||
|  |  | ||||||
|     def handle_file_from_ipc(self, path: str) -> None: |  | ||||||
|         print(f"Path From IPC: {path}") |  | ||||||
|  |  | ||||||
|     def load_glade_file(self): |     def load_glade_file(self): | ||||||
|         self.builder     = Gtk.Builder() |         self.builder     = Gtk.Builder() | ||||||
|         self.builder.add_from_file(settings.get_glade_file()) |         self.builder.add_from_file(settings.get_glade_file()) | ||||||
| @@ -53,24 +51,3 @@ class Controller(DummyMixin, ControllerData): | |||||||
|  |  | ||||||
|     def get_core_widget(self): |     def get_core_widget(self): | ||||||
|         return self.core_widget |         return self.core_widget | ||||||
|  |  | ||||||
|  |  | ||||||
|     def on_global_key_release_controller(self, widget: type, event: type) -> None: |  | ||||||
|         """Handler for keyboard events""" |  | ||||||
|         keyname = Gdk.keyval_name(event.keyval).lower() |  | ||||||
|         if keyname.replace("_l", "").replace("_r", "") in ["control", "alt", "shift"]: |  | ||||||
|             if "control" in keyname: |  | ||||||
|                 self.ctrl_down    = False |  | ||||||
|             if "shift" in keyname: |  | ||||||
|                 self.shift_down   = False |  | ||||||
|             if "alt" in keyname: |  | ||||||
|                 self.alt_down     = False |  | ||||||
|  |  | ||||||
|  |  | ||||||
|         mapping = keybindings.lookup(event) |  | ||||||
|         if mapping: |  | ||||||
|             getattr(self, mapping)() |  | ||||||
|             return True |  | ||||||
|         else: |  | ||||||
|             print(f"on_global_key_release_controller > key > {keyname}") |  | ||||||
|             print(f"Add logic or remove this from: {self.__class__}") |  | ||||||
|   | |||||||
| @@ -14,12 +14,15 @@ class ControllerData: | |||||||
|     ''' ControllerData contains most of the state of the app at ay given time. It also has some support methods. ''' |     ''' ControllerData contains most of the state of the app at ay given time. It also has some support methods. ''' | ||||||
|  |  | ||||||
|     def setup_controller_data(self) -> None: |     def setup_controller_data(self) -> None: | ||||||
|         self.window        = settings.get_main_window() |         self.window      = settings.get_main_window() | ||||||
|         self.builder       = None |         self.builder     = None | ||||||
|         self.core_widget   = None |         self.core_widget = None | ||||||
|  |         self.ctrl_down   = False | ||||||
|  |         self.shift_down  = False | ||||||
|  |         self.alt_down    = False | ||||||
|  |  | ||||||
|         self.load_glade_file() |         self.load_glade_file() | ||||||
|         self.plugins       = PluginsController() |         self.plugins     = PluginsController() | ||||||
|  |  | ||||||
|  |  | ||||||
|     def clear_console(self) -> None: |     def clear_console(self) -> None: | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								src/core/mixins/signals/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/core/mixins/signals/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | """ | ||||||
|  |     Signals module | ||||||
|  | """ | ||||||
							
								
								
									
										17
									
								
								src/core/mixins/signals/ipc_signals_mixin.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/core/mixins/signals/ipc_signals_mixin.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | |||||||
|  | # Python imports | ||||||
|  |  | ||||||
|  | # Lib imports | ||||||
|  |  | ||||||
|  | # Application imports | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class IPCSignalsMixin: | ||||||
|  |     """ IPCSignalsMixin handle messages from another starting solarfm process. """ | ||||||
|  |  | ||||||
|  |     def print_to_console(self, message=None): | ||||||
|  |         print(message) | ||||||
|  |  | ||||||
|  |     def handle_file_from_ipc(self, path: str) -> None: | ||||||
|  |         print(f"Path From IPC: {path}") | ||||||
							
								
								
									
										75
									
								
								src/core/mixins/signals/keyboard_signals_mixin.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								src/core/mixins/signals/keyboard_signals_mixin.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,75 @@ | |||||||
|  | # Python imports | ||||||
|  | import re | ||||||
|  |  | ||||||
|  | # Lib imports | ||||||
|  | import gi | ||||||
|  | gi.require_version('Gtk', '3.0') | ||||||
|  | gi.require_version('Gdk', '3.0') | ||||||
|  | from gi.repository import Gtk | ||||||
|  | from gi.repository import Gdk | ||||||
|  |  | ||||||
|  | # Application imports | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | valid_keyvalue_pat = re.compile(r"[a-z0-9A-Z-_\[\]\(\)\| ]") | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class KeyboardSignalsMixin: | ||||||
|  |     """ KeyboardSignalsMixin keyboard hooks controller. """ | ||||||
|  |  | ||||||
|  |     # TODO: Need to set methods that use this to somehow check the keybindings state instead. | ||||||
|  |     def unset_keys_and_data(self, widget=None, eve=None): | ||||||
|  |         self.ctrl_down    = False | ||||||
|  |         self.shift_down   = False | ||||||
|  |         self.alt_down     = False | ||||||
|  |  | ||||||
|  |     def on_global_key_press_controller(self, eve, user_data): | ||||||
|  |         keyname = Gdk.keyval_name(user_data.keyval).lower() | ||||||
|  |         if keyname.replace("_l", "").replace("_r", "") in ["control", "alt", "shift"]: | ||||||
|  |             if "control" in keyname: | ||||||
|  |                 self.ctrl_down    = True | ||||||
|  |             if "shift" in keyname: | ||||||
|  |                 self.shift_down   = True | ||||||
|  |             if "alt" in keyname: | ||||||
|  |                 self.alt_down     = True | ||||||
|  |  | ||||||
|  |     def on_global_key_release_controller(self, widget, event): | ||||||
|  |         """ Handler for keyboard events """ | ||||||
|  |         keyname = Gdk.keyval_name(event.keyval).lower() | ||||||
|  |         if keyname.replace("_l", "").replace("_r", "") in ["control", "alt", "shift"]: | ||||||
|  |             if "control" in keyname: | ||||||
|  |                 self.ctrl_down    = False | ||||||
|  |             if "shift" in keyname: | ||||||
|  |                 self.shift_down   = False | ||||||
|  |             if "alt" in keyname: | ||||||
|  |                 self.alt_down     = False | ||||||
|  |  | ||||||
|  |         mapping = keybindings.lookup(event) | ||||||
|  |         if mapping: | ||||||
|  |             # See if in controller scope | ||||||
|  |             try: | ||||||
|  |                 getattr(self, mapping)() | ||||||
|  |                 return True | ||||||
|  |             except Exception: | ||||||
|  |                 # Must be plugins scope, event call, OR we forgot to add method to controller scope | ||||||
|  |                 if "||" in mapping: | ||||||
|  |                     sender, eve_type = mapping.split("||") | ||||||
|  |                 else: | ||||||
|  |                     sender = "" | ||||||
|  |                     eve_type = mapping | ||||||
|  |  | ||||||
|  |                 self.handle_key_event_system(sender, eve_type) | ||||||
|  |         else: | ||||||
|  |             logger.debug(f"on_global_key_release_controller > key > {keyname}") | ||||||
|  |  | ||||||
|  |             if self.ctrl_down: | ||||||
|  |                 if keyname in ["1", "kp_1", "2", "kp_2", "3", "kp_3", "4", "kp_4"]: | ||||||
|  |                     ... | ||||||
|  |  | ||||||
|  |     def handle_key_event_system(self, sender, eve_type): | ||||||
|  |         event_system.emit(eve_type) | ||||||
|  |  | ||||||
|  |     def keyboard_close_tab(self): | ||||||
|  |         ... | ||||||
							
								
								
									
										13
									
								
								src/core/mixins/signals_mixins.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/core/mixins/signals_mixins.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | # Python imports | ||||||
|  |  | ||||||
|  | # Lib imports | ||||||
|  | from .signals.ipc_signals_mixin import IPCSignalsMixin | ||||||
|  | from .signals.keyboard_signals_mixin import KeyboardSignalsMixin | ||||||
|  |  | ||||||
|  | # Application imports | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class SignalsMixins(KeyboardSignalsMixin, IPCSignalsMixin): | ||||||
|  |     ... | ||||||
		Reference in New Issue
	
	Block a user