Preliminary controller layout work for plugin integration; controller base message refactor naming

This commit is contained in:
2026-01-18 13:53:29 -06:00
parent 99f1bffefb
commit e2f29207ba
11 changed files with 89 additions and 19 deletions

View File

@@ -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)

View File

@@ -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...")

View File

@@ -0,0 +1,50 @@
# Python imports
# Lib imports
# Application imports
from ..singleton import Singleton
from ..event_factory import Code_Event_Types
from .controller_base import ControllerBase
from .controller_context import ControllerContext
class ControllerManagerException(Exception):
...
class ControllerManager(Singleton, dict):
def __init__(self):
super(ControllerManager, self).__init__()
def _crete_controller_context(self) -> ControllerContext:
controller_context = ControllerContext()
controller_context.message_to = self.message_to
controller_context.message = self.message
return controller_context
def register_controller(self, name: str, controller: ControllerBase):
if not name or controller == None:
raise ControllerManagerException("Must pass in a 'name' and 'controller'...")
if name in self.keys():
raise ControllerManagerException(f"Can't bind controller to registered name of '{name}'...")
controller.set_controller_context( self._crete_controller_context() )
self[name] = controller
def get_controllers_key_list(self) -> list[str]:
return self.keys()
def message_to(self, name: str, event: Code_Event_Types.CodeEvent):
self[name]._controller_message(event)
def message(self, event: Code_Event_Types.CodeEvent):
for key in self.keys():
self[key]._controller_message(event)

View File

@@ -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)

View File

@@ -0,0 +1,3 @@
"""
Libs Plugin DTO(s) Package
"""

View File

@@ -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)

View File

@@ -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)

View File

@@ -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: [])