diff --git a/src/__builtins__.py b/src/__builtins__.py index 8773288..122cc79 100644 --- a/src/__builtins__.py +++ b/src/__builtins__.py @@ -9,10 +9,10 @@ import sys # Application imports # from libs.db import DB from libs.event_system import EventSystem -from libs.endpoint_registry import EndpointRegistry from libs.keybindings import Keybindings from libs.logger import Logger from libs.settings.manager import SettingsManager +from libs.widget_registery import WidgetRegisteryController @@ -34,12 +34,8 @@ def daemon_threaded_wrapper(fn): def call_chain_wrapper(fn): def wrapper(*args, **kwargs): - print() - print() for line in traceback.format_stack(): print( line.strip() ) - print() - print() return fn(*args, **kwargs) return wrapper @@ -51,8 +47,8 @@ builtins.APP_NAME = "" builtins.keybindings = Keybindings() builtins.event_system = EventSystem() -builtins.endpoint_registry = EndpointRegistry() builtins.settings_manager = SettingsManager() +builtins.widget_registery = WidgetRegisteryController() # builtins.db = DB() settings_manager.load_settings() diff --git a/src/core/builder_wrapper.py b/src/core/builder_wrapper.py deleted file mode 100644 index 9245da9..0000000 --- a/src/core/builder_wrapper.py +++ /dev/null @@ -1,33 +0,0 @@ -# Python imports - -# Lib imports -import gi -gi.require_version('Gtk', '3.0') -from gi.repository import Gtk - -# Application imports - - - -class BuilderWrapper(Gtk.Builder): - """docstring for BuilderWrapper.""" - - def __init__(self): - super(BuilderWrapper, self).__init__() - - self.objects = {} - - def get_object(self, id: str, use_gtk: bool = True) -> any: - if not use_gtk: - return self.objects[id] - - return super(BuilderWrapper, self).get_object(id) - - def expose_object(self, id: str, object: any, use_gtk: bool = True) -> None: - if not use_gtk: - self.objects[id] = object - else: - super(BuilderWrapper, self).expose_object(id, object) - - def dereference_object(self, id: str) -> None: - del self.objects[id] diff --git a/src/core/containers/center_container.py b/src/core/containers/center_container.py index 99b4d8c..aa0dbb2 100644 --- a/src/core/containers/center_container.py +++ b/src/core/containers/center_container.py @@ -14,7 +14,6 @@ class CenterContainer(Gtk.Box): def __init__(self): super(CenterContainer, self).__init__() - self._builder = settings_manager.get_builder() self._setup_styling() self._setup_signals() @@ -39,7 +38,7 @@ class CenterContainer(Gtk.Box): ... def _load_widgets(self): - glade_box = self._builder.get_object("glade_box") + glade_box = widget_registery.get_object("glade_box") button = Gtk.Button(label = "Click Me!") button.connect("clicked", self._hello_world) diff --git a/src/core/controllers/base_controller.py b/src/core/controllers/base_controller.py index 813485d..3aeb5cb 100644 --- a/src/core/controllers/base_controller.py +++ b/src/core/controllers/base_controller.py @@ -6,17 +6,19 @@ gi.require_version('Gtk', '3.0') from gi.repository import Gtk # Application imports +from plugins import plugins_controller + from libs.mixins.ipc_signals_mixin import IPCSignalsMixin from libs.mixins.keyboard_signals_mixin import KeyboardSignalsMixin from ..containers.base_container import BaseContainer -from .base_controller_data import BaseControllerData +from .base_controller_mixin import BaseControllerMixin from .bridge_controller import BridgeController -class BaseController(IPCSignalsMixin, KeyboardSignalsMixin, BaseControllerData): +class BaseController(IPCSignalsMixin, KeyboardSignalsMixin, BaseControllerMixin): """ docstring for BaseController. """ def __init__(self): @@ -33,6 +35,16 @@ class BaseController(IPCSignalsMixin, KeyboardSignalsMixin, BaseControllerData): settings_manager.log_load_time() + def _setup_controller_data(self): + self.window = settings_manager.get_main_window() + self.base_container = BaseContainer() + self.plugins_controller = plugins_controller + + widget_registery.expose_object("main_window", self.window) + settings_manager.register_signals_to_builder([self, self.base_container]) + + self._collect_files_dirs() + def _setup_styling(self): ... @@ -52,6 +64,7 @@ class BaseController(IPCSignalsMixin, KeyboardSignalsMixin, BaseControllerData): def _load_plugins_and_files(self): args, unknownargs = settings_manager.get_starting_args() + if args.no_plugins == "false": self.plugins_controller.pre_launch_plugins() self.plugins_controller.post_launch_plugins() @@ -62,11 +75,3 @@ class BaseController(IPCSignalsMixin, KeyboardSignalsMixin, BaseControllerData): def _tggl_top_main_menubar(self): logger.debug("_tggl_top_main_menubar > stub...") - def _load_glade_file(self): - self.builder.add_from_file( settings_manager.path_manager.get_glade_file() ) - self.builder.expose_object("main_window", self.window) - - settings_manager.set_builder(self.builder) - self.base_container = BaseContainer() - - settings_manager.register_signals_to_builder([self, self.base_container]) \ No newline at end of file diff --git a/src/core/controllers/base_controller_data.py b/src/core/controllers/base_controller_mixin.py similarity index 80% rename from src/core/controllers/base_controller_data.py rename to src/core/controllers/base_controller_mixin.py index fd35897..7edf38e 100644 --- a/src/core/controllers/base_controller_data.py +++ b/src/core/controllers/base_controller_mixin.py @@ -6,29 +6,11 @@ from shutil import which # Lib imports # Application imports -from plugins import plugins_controller - -from ..builder_wrapper import BuilderWrapper -class BaseControllerData: - ''' BaseControllerData contains most of the state of the app at ay given time. It also has some support methods. ''' - - def _setup_controller_data(self) -> None: - self.window = settings_manager.get_main_window() - self.builder = BuilderWrapper() - self.plugins_controller = plugins_controller - - self.base_container = None - self.was_midified_key = False - self.ctrl_down = False - self.shift_down = False - self.alt_down = False - - self._collect_files_dirs() - self._load_glade_file() - +class BaseControllerMixin: + ''' BaseControllerMixin contains most of the state of the app at ay given time. It also has some support methods. ''' def _collect_files_dirs(self): args, \ diff --git a/src/core/widgets/code/code_base.py b/src/core/widgets/code/code_base.py index 5980ba7..1b5dbb0 100644 --- a/src/core/widgets/code/code_base.py +++ b/src/core/widgets/code/code_base.py @@ -41,6 +41,7 @@ class CodeBase: self.controller_manager.register_controller("completion", completion_controller) self.controller_manager.register_controller("source_views", source_views_controller) self.controller_manager.register_controller("plugins", plugins_controller) + self.controller_manager.register_controller("widgets", widget_registery) def get_tabs_widget(self): return self.controller_manager["tabs"].get_tabs_widget() diff --git a/src/core/widgets/separator_widget.py b/src/core/widgets/separator_widget.py index 7725b21..533bdbe 100644 --- a/src/core/widgets/separator_widget.py +++ b/src/core/widgets/separator_widget.py @@ -13,9 +13,8 @@ class Separator(Gtk.Separator): def __init__(self, id: str = None, ORIENTATION: int = 0): super(Separator, self).__init__() - builder = settings_manager.get_builder() if id: - builder.expose_object(id, self) + widget_registery.expose_object(id, self) self.ORIENTATION = ORIENTATION self._setup_styling() diff --git a/src/libs/endpoint_registry.py b/src/libs/endpoint_registry.py deleted file mode 100644 index 86e4295..0000000 --- a/src/libs/endpoint_registry.py +++ /dev/null @@ -1,22 +0,0 @@ -# Python imports - -# Lib imports - -# Application imports -from .singleton import Singleton - - - -class EndpointRegistry(Singleton): - def __init__(self): - self._endpoints = {} - - def register(self, rule, **options): - def decorator(f): - self._endpoints[rule] = f - return f - - return decorator - - def get_endpoints(self): - return self._endpoints diff --git a/src/libs/mixins/keyboard_signals_mixin.py b/src/libs/mixins/keyboard_signals_mixin.py index 03446d0..6f95023 100644 --- a/src/libs/mixins/keyboard_signals_mixin.py +++ b/src/libs/mixins/keyboard_signals_mixin.py @@ -19,6 +19,12 @@ valid_keyvalue_pat = re.compile(r"[a-z0-9A-Z-_\[\]\(\)\| ]") class KeyboardSignalsMixin: """ KeyboardSignalsMixin keyboard hooks controller. """ + was_midified_key = False + ctrl_down = False + shift_down = False + alt_down = False + + # 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 @@ -34,7 +40,7 @@ class KeyboardSignalsMixin: self.alt_down = False def on_global_key_press_controller(self, eve, user_data): - keyname = Gdk.keyval_name(user_data.keyval).lower() + keyname = Gdk.keyval_name(user_data.keyval).lower() modifiers = Gdk.ModifierType(user_data.get_state() & ~Gdk.ModifierType.LOCK_MASK) self.was_midified_key = True if modifiers != 0 else False diff --git a/src/libs/widget_registery.py b/src/libs/widget_registery.py new file mode 100644 index 0000000..347d056 --- /dev/null +++ b/src/libs/widget_registery.py @@ -0,0 +1,64 @@ +# Python imports + +# Lib imports +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk + +# Application imports +from .controllers.controller_base import ControllerBase +from .dto.base_event import BaseEvent + + + +class WidgetRegisteryController(ControllerBase): + """docstring for WidgetRegisteryController.""" + + def __init__(self): + super(WidgetRegisteryController, self).__init__() + + self._builder: Gtk.Builder = None + self.objects: dict = {} + self.builder_keys: list = [] + + self._load_glade_file() + + + def _load_glade_file(self): + self._builder = Gtk.Builder.new_from_file( settings_manager.path_manager.get_glade_file() ) + settings_manager.set_builder(self._builder) + + widgets = self._builder.get_objects() + for widget in widgets: + self.builder_keys.append( widget.get_name() ) + + def _controller_message(self, event: BaseEvent): + ... + + def list_objects(self, id: str) -> list: + return self.objects.keys() + self.builder_keys + + def list_non_builder_objects(self, id: str) -> list: + return self.objects.keys() + + def list_builder_objects(self, id: str) -> list: + return self.builder_keys + + def get_object(self, id: str) -> any: + if id in self.objects: + return self.objects[id] + + return self._builder.get_object(id) + + def expose_object(self, id: str, object: any, use_gtk: bool = False): + if not use_gtk: + self.objects[id] = object + return + + self._builder.expose_object(id, object) + self.builder_keys.append(id) + + def dereference_object(self, id: str): + self.builder_keys.remove(id) + if id in self.objects: + del self.objects[id]