From e2f29207ba480e8da665f441b72b482fc4fd502c Mon Sep 17 00:00:00 2001 From: itdominator <1itdominator@gmail.com> Date: Sun, 18 Jan 2026 13:53:29 -0600 Subject: [PATCH] Preliminary controller layout work for plugin integration; controller base message refactor naming --- src/core/widgets/code/code_base.py | 3 ++- .../code/controllers/files_controller.py | 6 ++--- .../code/controllers/tabs_controller.py | 4 +-- src/libs/controllers/controller_base.py | 9 ++++--- src/libs/controllers/controller_context.py | 7 +++-- .../controllers/controller_manager.py | 13 +++++---- src/libs/controllers/emit_dispatcher.py | 2 +- src/libs/dto/plugins/__init__.py | 3 +++ src/libs/dto/plugins/manifest.py | 27 +++++++++++++++++++ src/libs/dto/plugins/manifest_meta.py | 19 +++++++++++++ src/libs/dto/plugins/requests.py | 15 +++++++++++ 11 files changed, 89 insertions(+), 19 deletions(-) rename src/{core/widgets/code => libs}/controllers/controller_manager.py (78%) create mode 100644 src/libs/dto/plugins/__init__.py create mode 100644 src/libs/dto/plugins/manifest.py create mode 100644 src/libs/dto/plugins/manifest_meta.py create mode 100644 src/libs/dto/plugins/requests.py diff --git a/src/core/widgets/code/code_base.py b/src/core/widgets/code/code_base.py index 185a590..bc6a247 100644 --- a/src/core/widgets/code/code_base.py +++ b/src/core/widgets/code/code_base.py @@ -3,7 +3,8 @@ # Lib imports # Application imports -from .controllers.controller_manager import ControllerManager +from libs.controllers.controller_manager import ControllerManager + from .controllers.files_controller import FilesController from .controllers.tabs_controller import TabsController from .controllers.commands_controller import CommandsController diff --git a/src/core/widgets/code/controllers/files_controller.py b/src/core/widgets/code/controllers/files_controller.py index c8daa6b..c0520f0 100644 --- a/src/core/widgets/code/controllers/files_controller.py +++ b/src/core/widgets/code/controllers/files_controller.py @@ -67,7 +67,7 @@ class FilesController(ControllerBase, list): view = event.view, file = file ) - self.message_all(eve) + self.message(eve) self.append(file) @@ -105,7 +105,7 @@ class FilesController(ControllerBase, list): file = popped_file, next_file = next_file ) - self.message_all(eve) + self.message(eve) return popped_file, next_file @@ -127,7 +127,7 @@ class FilesController(ControllerBase, list): file = file, next_file = next_file ) - self.message_all(eve) + self.message(eve) self.remove(file) file.close() diff --git a/src/core/widgets/code/controllers/tabs_controller.py b/src/core/widgets/code/controllers/tabs_controller.py index 5a789c7..cd40ffe 100644 --- a/src/core/widgets/code/controllers/tabs_controller.py +++ b/src/core/widgets/code/controllers/tabs_controller.py @@ -53,7 +53,7 @@ class TabsController(ControllerBase): tab.get_parent().file.buffer ) - self.message_all(event) + self.message(event) def close_tab(tab, eve, file): event = Event_Factory.create_event( @@ -61,7 +61,7 @@ class TabsController(ControllerBase): buffer = tab.get_parent().file.buffer ) - self.message_all(event) + self.message(event) tab = TabWidget() tab.file = event.file diff --git a/src/libs/controllers/controller_base.py b/src/libs/controllers/controller_base.py index 037c01c..fe2e5cd 100644 --- a/src/libs/controllers/controller_base.py +++ b/src/libs/controllers/controller_base.py @@ -30,9 +30,12 @@ class ControllerBase(Singleton, EmitDispatcher): def set_controller_context(self, controller_context: ControllerContext): self.controller_context = controller_context + def message(self, event: BaseEvent): + return self.controller_context.message(event) + def message_to(self, name: str, event: BaseEvent): return self.controller_context.message_to(name, event) - def message_all(self, event: BaseEvent): - return self.controller_context.message_all(event) - + def message_to_selected(self, names: list[str], event: BaseEvent): + for name in names: + self.controller_context.message_to_selected(name, event) diff --git a/src/libs/controllers/controller_context.py b/src/libs/controllers/controller_context.py index 2dc2d6a..ac0a661 100644 --- a/src/libs/controllers/controller_context.py +++ b/src/libs/controllers/controller_context.py @@ -17,8 +17,11 @@ class ControllerContext: super(ControllerContext, self).__init__() + def message(self, event: BaseEvent): + raise ControllerContextException("Controller Context 'message' must be overriden by Controller Manager...") + def message_to(self, name: str, event: BaseEvent): raise ControllerContextException("Controller Context 'message_to' must be overriden by Controller Manager...") - def message_all(self, event: BaseEvent): - raise ControllerContextException("Controller Context 'message_all' must be overriden by Controller Manager...") + def message_to_selected(self, name: list, event: BaseEvent): + raise ControllerContextException("Controller Context 'message_to_selected' must be overriden by Controller Manager...") diff --git a/src/core/widgets/code/controllers/controller_manager.py b/src/libs/controllers/controller_manager.py similarity index 78% rename from src/core/widgets/code/controllers/controller_manager.py rename to src/libs/controllers/controller_manager.py index 3d446c7..e7d010f 100644 --- a/src/core/widgets/code/controllers/controller_manager.py +++ b/src/libs/controllers/controller_manager.py @@ -3,12 +3,11 @@ # Lib imports # Application imports -from libs.singleton import Singleton +from ..singleton import Singleton +from ..event_factory import Code_Event_Types -from libs.controllers.controller_base import ControllerBase -from libs.controllers.controller_context import ControllerContext - -from libs.event_factory import Code_Event_Types +from .controller_base import ControllerBase +from .controller_context import ControllerContext @@ -25,7 +24,7 @@ class ControllerManager(Singleton, dict): def _crete_controller_context(self) -> ControllerContext: controller_context = ControllerContext() controller_context.message_to = self.message_to - controller_context.message_all = self.message_all + controller_context.message = self.message return controller_context @@ -46,6 +45,6 @@ class ControllerManager(Singleton, dict): def message_to(self, name: str, event: Code_Event_Types.CodeEvent): self[name]._controller_message(event) - def message_all(self, event: Code_Event_Types.CodeEvent): + def message(self, event: Code_Event_Types.CodeEvent): for key in self.keys(): self[key]._controller_message(event) diff --git a/src/libs/controllers/emit_dispatcher.py b/src/libs/controllers/emit_dispatcher.py index d7f1570..e8e67f4 100644 --- a/src/libs/controllers/emit_dispatcher.py +++ b/src/libs/controllers/emit_dispatcher.py @@ -13,7 +13,7 @@ class EmitDispatcher: def emit(self, event: BaseEvent): - self.message_all(event) + self.message(event) def emit_to(self, controller: str, event: BaseEvent): self.message_to(controller, event) diff --git a/src/libs/dto/plugins/__init__.py b/src/libs/dto/plugins/__init__.py new file mode 100644 index 0000000..0f976bd --- /dev/null +++ b/src/libs/dto/plugins/__init__.py @@ -0,0 +1,3 @@ +""" + Libs Plugin DTO(s) Package +""" diff --git a/src/libs/dto/plugins/manifest.py b/src/libs/dto/plugins/manifest.py new file mode 100644 index 0000000..54c7f26 --- /dev/null +++ b/src/libs/dto/plugins/manifest.py @@ -0,0 +1,27 @@ +# Python imports +from dataclasses import dataclass, field +from dataclasses import asdict + +# Gtk imports + +# Application imports +from .requests import Requests + + + +@dataclass +class Manifest: + name: str = "" + author: str = "" + credit: str = "" + version: str = "0.0.1" + support: str = "support@mail.com" + pre_launch: bool = False + requests: Requests = field(default_factory = lambda: Requests()) + + def __post_init__(self): + if isinstance(self.requests, dict): + self.requests = Requests(**self.requests) + + def as_dict(self): + return asdict(self) diff --git a/src/libs/dto/plugins/manifest_meta.py b/src/libs/dto/plugins/manifest_meta.py new file mode 100644 index 0000000..8e1056b --- /dev/null +++ b/src/libs/dto/plugins/manifest_meta.py @@ -0,0 +1,19 @@ +# Python imports +from dataclasses import dataclass, field +from dataclasses import asdict + +# Gtk imports + +# Application imports +from .manifest import Manifest + + + +@dataclass +class ManifestMeta: + folder: str = "" + path: str = "" + manifest: Manifest = field(default_factory = lambda: Manifest()) + + def as_dict(self): + return asdict(self) diff --git a/src/libs/dto/plugins/requests.py b/src/libs/dto/plugins/requests.py new file mode 100644 index 0000000..8321e34 --- /dev/null +++ b/src/libs/dto/plugins/requests.py @@ -0,0 +1,15 @@ +# Python imports +from dataclasses import dataclass, field + +# Lib imports + +# Application imports + + +@dataclass +class Requests: + ui_target: str = "" + ui_target_id: str = "" + pass_events: bool = False + pass_ui_objects: list = field(default_factory = lambda: []) + bind_keys: list = field(default_factory = lambda: [])