diff --git a/src/core/containers/center_container.py b/src/core/containers/center_container.py index 0ee7b6d..1714a3b 100644 --- a/src/core/containers/center_container.py +++ b/src/core/containers/center_container.py @@ -8,6 +8,7 @@ from gi.repository import Gtk # Application imports from .quad.quad_container import QuadContainer from core.widgets.webkit.webkit_ui import WebkitUI +from core.widgets.files.files_base import FilesBase @@ -45,21 +46,29 @@ class CenterContainer(Gtk.Box): widget_registery.expose_object("center-container", self) quad_container = QuadContainer() + files_base = FilesBase() webkit_ui = WebkitUI() + button = Gtk.Button(label = "Click Me!") - label = Gtk.Label(label = "bright") glade_box = widget_registery.get_object("glade_box") + files_widget = files_base.create_tabs_view() button.connect("clicked", self._hello_world) webkit_ui.load_context_base_path() + + files_widget.create_new_tab("test") + files_widget.create_new_tab("test2") + files_widget.create_new_tab("test3") + files_widget.create_new_tab("test4") + files_widget.create_new_tab("test5") + button.show() - label.show() glade_box.show() quad_container.top_container.pack1(button, True, True) quad_container.top_container.pack2(glade_box, True, True) quad_container.bottom_container.pack1(webkit_ui, True, True) - quad_container.bottom_container.pack2(label, True, True) + quad_container.bottom_container.pack2(files_widget, True, True) self.add(quad_container) diff --git a/src/core/widgets/files/__init__.py b/src/core/widgets/files/__init__.py new file mode 100644 index 0000000..04a829f --- /dev/null +++ b/src/core/widgets/files/__init__.py @@ -0,0 +1,3 @@ +""" + Files Package +""" \ No newline at end of file diff --git a/src/core/widgets/files/command_system/__init__.py b/src/core/widgets/files/command_system/__init__.py new file mode 100644 index 0000000..e4e065e --- /dev/null +++ b/src/core/widgets/files/command_system/__init__.py @@ -0,0 +1,5 @@ +""" + Code Command System Package +""" + +from .files_view_command_system import FilesViewCommandSystem diff --git a/src/core/widgets/files/command_system/commands/__init__.py b/src/core/widgets/files/command_system/commands/__init__.py new file mode 100644 index 0000000..54539e2 --- /dev/null +++ b/src/core/widgets/files/command_system/commands/__init__.py @@ -0,0 +1,16 @@ +""" + Code Commands Package +""" + +import pkgutil +import importlib + +__all__ = [] + +for loader, module_name, is_pkg in pkgutil.walk_packages(__path__): + module = importlib.import_module(f"{__name__}.{module_name}") + # globals()[module_name] = module # Add module to package namespace + __all__.append(module_name) + +del pkgutil +del importlib diff --git a/src/core/widgets/files/command_system/commands/get_filetype.py b/src/core/widgets/files/command_system/commands/get_filetype.py new file mode 100644 index 0000000..a0cdc6c --- /dev/null +++ b/src/core/widgets/files/command_system/commands/get_filetype.py @@ -0,0 +1,19 @@ +# Python imports + +# Lib imports +import gi + +gi.require_version('Gtk', '3.0') + +from gi.repository import Gtk + +# Application imports + + + +def execute( + view: Gtk.Notebook, + *args, + **kwargs +): + logger.debug("Command: Get File Type") diff --git a/src/core/widgets/files/command_system/commands/new_file.py b/src/core/widgets/files/command_system/commands/new_file.py new file mode 100644 index 0000000..01d6259 --- /dev/null +++ b/src/core/widgets/files/command_system/commands/new_file.py @@ -0,0 +1,20 @@ +# Python imports + + +# Lib imports +import gi + +gi.require_version('Gtk', '3.0') + +from gi.repository import Gtk + +# Application imports + + + +def execute( + view: Gtk.Notebook, + *args, + **kwargs +): + logger.debug("Command: New File") diff --git a/src/core/widgets/files/command_system/commands/open_files.py b/src/core/widgets/files/command_system/commands/open_files.py new file mode 100644 index 0000000..2719922 --- /dev/null +++ b/src/core/widgets/files/command_system/commands/open_files.py @@ -0,0 +1,19 @@ +# Python imports + +# Lib imports +import gi + +gi.require_version('Gtk', '3.0') + +from gi.repository import Gtk + +# Application imports + + + +def execute( + view: Gtk.Notebook, + *args, + **kwargs +): + logger.debug("Command: Open File(s)") diff --git a/src/core/widgets/files/command_system/commands/save_file.py b/src/core/widgets/files/command_system/commands/save_file.py new file mode 100644 index 0000000..69d1918 --- /dev/null +++ b/src/core/widgets/files/command_system/commands/save_file.py @@ -0,0 +1,19 @@ +# Python imports + +# Lib imports +import gi + +gi.require_version('Gtk', '3.0') + +from gi.repository import Gtk + +# Application imports + + + +def execute( + view: Gtk.Notebook, + *args, + **kwargs +): + logger.debug("Command: Save File") diff --git a/src/core/widgets/files/command_system/commands/save_file_as.py b/src/core/widgets/files/command_system/commands/save_file_as.py new file mode 100644 index 0000000..95ddd5e --- /dev/null +++ b/src/core/widgets/files/command_system/commands/save_file_as.py @@ -0,0 +1,19 @@ +# Python imports + +# Lib imports +import gi + +gi.require_version('Gtk', '3.0') + +from gi.repository import Gtk + +# Application imports + + + +def execute( + view: Gtk.Notebook, + *args, + **kwargs +): + logger.debug("Command: Save File As") diff --git a/src/core/widgets/files/command_system/commands/update_info_bar.py b/src/core/widgets/files/command_system/commands/update_info_bar.py new file mode 100644 index 0000000..ef8c577 --- /dev/null +++ b/src/core/widgets/files/command_system/commands/update_info_bar.py @@ -0,0 +1,19 @@ +# Python imports + +# Lib imports +import gi + +gi.require_version('Gtk', '3.0') + +from gi.repository import Gtk + +# Application imports + + + +def execute( + view: Gtk.Notebook, + *args, + **kwargs +): + logger.debug("Command: Update Info Bar") diff --git a/src/core/widgets/files/command_system/files_view_command_system.py b/src/core/widgets/files/command_system/files_view_command_system.py new file mode 100644 index 0000000..f2d74ec --- /dev/null +++ b/src/core/widgets/files/command_system/files_view_command_system.py @@ -0,0 +1,32 @@ +# Python imports + +# Lib imports + +# Application imports +from libs.event_factory import Event_Factory, Files_Event_Types +from libs.command_system import CommandSystem + +from ..tabs_view import TabsView + + +from . import commands + + + +class FilesViewCommandSystem(CommandSystem): + def __init__(self): + super(FilesViewCommandSystem, self).__init__(commands) + + + def toggle_plugins_ui(self): + event = Event_Factory.create_event( "toggle_plugins_ui" ) + + self.emit_to("plugins", event) + + def emit(self, event: Files_Event_Types.FilesEvent): + """ Monkey patch 'emit' from command controller... """ + ... + + def emit_to(self, controller: str, event: Files_Event_Types.FilesEvent): + """ Monkey patch 'emit_to' from command controller... """ + ... diff --git a/src/core/widgets/files/controllers/__init__.py b/src/core/widgets/files/controllers/__init__.py new file mode 100644 index 0000000..8f3b747 --- /dev/null +++ b/src/core/widgets/files/controllers/__init__.py @@ -0,0 +1,3 @@ +""" + Code Controllers Package +""" diff --git a/src/core/widgets/files/controllers/commands_controller.py b/src/core/widgets/files/controllers/commands_controller.py new file mode 100644 index 0000000..eb0074d --- /dev/null +++ b/src/core/widgets/files/controllers/commands_controller.py @@ -0,0 +1,33 @@ +# Python imports + +# Lib imports + +# Application imports +from libs.controllers.controller_base import ControllerBase + +from libs.event_factory import Files_Event_Types + +from ..command_system import FilesViewCommandSystem + + + +class CommandsController(ControllerBase, list): + def __init__(self): + super(CommandsController, self).__init__() + + + def _controller_message(self, event: Files_Event_Types.FilesEvent): + if isinstance(event, Files_Event_Types.CreateCommandSystemEvent): + event.response = self.create_command_system() + + def create_command_system(self): + command_system = FilesViewCommandSystem() + command_system.emit = self.emit + command_system.emit_to = self.emit_to + + self.append(command_system) + + return command_system + + def remove_command_system(self, event: Files_Event_Types.RemovedFilesViewEvent): + self.remove(event.view.command) diff --git a/src/core/widgets/files/controllers/files_session_controller.py b/src/core/widgets/files/controllers/files_session_controller.py new file mode 100644 index 0000000..664ff05 --- /dev/null +++ b/src/core/widgets/files/controllers/files_session_controller.py @@ -0,0 +1,27 @@ +# Python imports + +# Lib imports + +# Application imports +from libs.controllers.controller_base import ControllerBase +from libs.event_factory import Event_Factory, Files_Event_Types + + + + +class FilesSessionController(ControllerBase, list): + def __init__(self): + super(FilesSessionController, self).__init__() + + + def _controller_message(self, event: Files_Event_Types.FilesEvent): + if isinstance(event, Files_Event_Types.AddNewFileEvent): + ... + + def create_tabs_view(self) -> TabsView: + tabs_view = TabsView() + self.add(tabs_view) + + self.active_view = self.length + + return tabs_view diff --git a/src/core/widgets/files/controllers/tab_views_controller.py b/src/core/widgets/files/controllers/tab_views_controller.py new file mode 100644 index 0000000..43f96e4 --- /dev/null +++ b/src/core/widgets/files/controllers/tab_views_controller.py @@ -0,0 +1,70 @@ +# Python imports + +# Lib imports + +# Application imports +from libs.controllers.controller_base import ControllerBase +from libs.event_factory import Event_Factory, Files_Event_Types + +from ..tabs_view import TabsView +from ..tab_dto import TabDTO + + + +class TabViewsController(ControllerBase, list): + def __init__(self): + super(TabViewsController, self).__init__() + + self.active_view: int = 0 + + + def _controller_message(self, event: Files_Event_Types.FilesEvent): + if isinstance(event, Files_Event_Types.CreateFilesViewEvent): + ... + + def _get_command_system(self): + event = Event_Factory.create_event("create_command_system") + self.message_to("commands", event) + command = event.response + + del event + return command + + def create_tabs_view(self) -> TabsView: + tabs_view = TabsView() + + tabs_view.command = self._get_command_system() + + self.append(tabs_view) + self.active_view = len(self) + + return tabs_view + + def set_active_tabs_view(self, i: int): + if i < 0: + i = len(self) + elif i > len(self): + i = 0 + + self.active_view = i + + def get_active_tabs_view(self) -> TabsView: + return self.get(i) + + def get_tabs_view(self, i: int = 0) -> TabsView: + if i < 0: + i = len(self) + elif i > len(self): + i = 0 + + return self.get(i) + + def create_new_tab(self, name: str, tabs_view: TabsView = None) -> TabDTO: + if not name: + logger.error("Must give a Tab 'name' to create new tab...") + return + + if not tabs_view: + tabs_view = self.get_active_tabs_view() + + return tabs_view.create_new_tab(name) diff --git a/src/core/widgets/files/files_base.py b/src/core/widgets/files/files_base.py new file mode 100644 index 0000000..c8cb8da --- /dev/null +++ b/src/core/widgets/files/files_base.py @@ -0,0 +1,54 @@ +# Python imports + +# Lib imports + +# Application imports +from plugins import plugins_controller + +from libs.controllers.controller_manager import ControllerManager + +from .controllers.files_session_controller import FilesSessionController +from .controllers.commands_controller import CommandsController +from .controllers.tab_views_controller import TabViewsController + + + +class FilesBase: + def __init__(self): + super(FilesBase, self).__init__() + + self.controller_manager: ControllerManager = ControllerManager() + + self._subscribe_to_events() + self._load_controllers() + + + def _subscribe_to_events(self): + event_system.subscribe("handle-file", self._load_ipc_file) + event_system.subscribe("handle-files", self._load_ipc_files) + + def _load_controllers(self): + files_session_controller = FilesSessionController() + # commands_controller = CommandsController() # Uncomment if not used with 'code' widget + tab_views_controller = TabViewsController() + + self.controller_manager.register_controller("files_session", files_session_controller) + # self.controller_manager.register_controller("commands", commands_controller) + self.controller_manager.register_controller("tab_views", tab_views_controller) + # self.controller_manager.register_controller("widgets", widget_registery) + + def create_sessioned_tabs_view(self): + return self.controller_manager["files_session"].create_tabs_view() + + def create_tabs_view(self): + return self.controller_manager["tab_views"].create_tabs_view() + + def _load_ipc_file(self, fpath: str): + active_view = self.controller_manager["tab_views"].get_active_tabs_view() + uris = [ f"file://{fpath}" ] + # active_view._on_uri_data_received(uris) + pass + + def _load_ipc_files(self, uris: list): + active_view = self.controller_manager["tab_views"].get_active_tabs_view() + # active_view._on_uri_data_received(uris) diff --git a/src/core/widgets/files/files_view.py b/src/core/widgets/files/files_view.py new file mode 100644 index 0000000..85dc6b5 --- /dev/null +++ b/src/core/widgets/files/files_view.py @@ -0,0 +1,46 @@ +# Python imports + +# Lib imports +import gi +gi.require_version('Gtk', '3.0') + +from gi.repository import Gtk + +# Application imports + + + +class FilesView(Gtk.ScrolledWindow): + def __init__(self): + super(FilesView, self).__init__() + + self._setup_styling() + self._setup_signals() + self._subscribe_to_events() + self._load_widgets() + + self.show() + + + def _setup_styling(self): + ... + + def _setup_signals(self): + ... + + def _subscribe_to_events(self): + ... + + def _load_widgets(self): + ... + + def get_icon_grid(self) -> Gtk.IconView: + return self.get_children()[0].get_children()[0] + + def bind_icon_grid(self, icon_grid: Gtk.IconView): + self.add(icon_grid) + + # viewport = Gtk.Viewport(icon_grid) + + # viewport.show() + # self.add(viewport) diff --git a/src/core/widgets/files/icon_grid.py b/src/core/widgets/files/icon_grid.py new file mode 100644 index 0000000..7ff1df9 --- /dev/null +++ b/src/core/widgets/files/icon_grid.py @@ -0,0 +1,139 @@ +# Python imports +import gc + +# 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 GLib +from gi.repository import Gdk +from gi.repository import GdkPixbuf + +# Application imports +# from utils.cbindings import gtkmemreaper + + + + +class IconGrid(Gtk.IconView): + """docstring for IconGridWidget""" + + def __init__(self): + super(IconGrid, self).__init__() + + self._handler_ids = [] + + self._setup_styling() + self._setup_signals() + self._set_up_dnd() + self._load_widgets() + + self.show_all() + + + def _setup_styling(self): + self.set_pixbuf_column(0) + self.set_text_column(1) + + self.set_item_orientation(1) + self.set_selection_mode(3) + self.set_item_width(96) + self.set_item_padding(8) + self.set_margin(12) + self.set_row_spacing(18) + self.set_columns(-1) + self.set_spacing(12) + self.set_column_spacing(18) + + def _setup_signals(self): + ... + + def _setup_additional_signals(self, + grid_icon_single_click, + grid_icon_double_click, + grid_set_selected_items, + grid_on_drag_set, + grid_on_drag_data_received, + grid_on_drag_motion + ): + + self._handler_ids = [ + self.connect("button-release-event", grid_icon_single_click), + self.connect("item-activated", grid_icon_double_click), + self.connect("selection-changed", grid_set_selected_items), + self.connect("drag-data-get", grid_on_drag_set), + self.connect("drag-data-received", grid_on_drag_data_received), + self.connect("drag-motion", grid_on_drag_motion) + ] + + def _destroy(grid): + self.clear_signals_and_data() + + self._handler_ids.append(self.connect("destroy", _destroy)) + + def _load_widgets(self): + self.clear_and_set_new_store() + + def _set_up_dnd(self): + URI_TARGET_TYPE = 80 + uri_target = Gtk.TargetEntry.new('text/uri-list', Gtk.TargetFlags(0), URI_TARGET_TYPE) + targets = [ uri_target ] + action = Gdk.DragAction.COPY + self.enable_model_drag_dest(targets, action) + self.enable_model_drag_source(0, targets, action) + + + def get_store(self): + return self.get_model() + + def clear_and_set_new_store(self): + self._clear_store() + self.set_model( + Gtk.ListStore( + GdkPixbuf.Pixbuf or GdkPixbuf.PixbufAnimation or None, str or None + ) + ) + + def clear_signals_and_data(self): + self.unset_model_drag_dest() + self.unset_model_drag_source() + + for handle_id in self._handler_ids: + self.disconnect(handle_id) + + self._handler_ids.clear() + self._clear_store() + + def _clear_store(self): + store = self.get_model() + self.set_model(None) + + if not store: return + + iter = store.get_iter_first() + while iter: + icon = store.get_value(iter, 0) + + store.set_value(iter, 0, None) + store.set_value(iter, 1, None) + + iter = store.iter_next(iter) + + if icon: + logger.debug(f"Reference count for icon is: {icon.__grefcount__}") + icon.run_dispose() + # icon_ptr = int(hash(icon)) # WARNING: not stable across runs + # gtkmemreaper.free_pixbuf(icon_ptr) + del icon + + store.clear() + store.run_dispose() + # GLib.idle_add(store.clear) + # GLib.idle_add(store.run_dispose) + # store.run_dispose() + # store_ptr = int(hash(store)) # WARNING: not stable across runs + # gtkmemreaper.free_list_store(store) + del store + + gc.collect() diff --git a/src/core/widgets/files/tab_dto.py b/src/core/widgets/files/tab_dto.py new file mode 100644 index 0000000..92864ed --- /dev/null +++ b/src/core/widgets/files/tab_dto.py @@ -0,0 +1,20 @@ +# Python imports + +# Lib imports + +# Application imports +from .tab_header import TabHeader +from .files_view import FilesView +from .icon_grid import IconGrid + + + +class TabDTO: + def __init__(self): + super(TabDTO, self).__init__() + + self.tab_header: TabHeader = TabHeader() + self.files_view: FilesView = FilesView() + self.icon_grid: IconGrid = IconGrid() + + self.files_view.bind_icon_grid(self.icon_grid) diff --git a/src/core/widgets/files/tab_header.py b/src/core/widgets/files/tab_header.py new file mode 100644 index 0000000..1fb5d3f --- /dev/null +++ b/src/core/widgets/files/tab_header.py @@ -0,0 +1,58 @@ +# Python imports + +# Lib imports +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk + +# Application imports + + + +class TabHeader(Gtk.Box): + """docstring for TabHeader""" + + def __init__(self): + super(TabHeader, self).__init__() + + self._setup_styling() + self._setup_signals() + self._load_widgets() + + self.show_all() + + + def _setup_styling(self): + self.set_orientation(0) + self.set_hexpand(False) + + def _setup_signals(self): + ... + + def _load_widgets(self): + self.label = Gtk.Label() + self.close_bttn = Gtk.Button() + icon = Gtk.Image(stock = Gtk.STOCK_CLOSE) + + self.label.set_xalign(0.0) + self.label.set_margin_left(25) + self.label.set_margin_right(25) + self.label.set_hexpand(True) + + self.close_bttn.add(icon) + self.add(self.label) + self.add(self.close_bttn) + + + def bind_close_signal(self, close_method: callable): + self._close_handler_id = self.close_bttn.connect("released", close_method) + + def clear_signals_and_data(self): + self.close_bttn.disconnect(self._close_handler_id) + self._close_tab = None + self._close_handler_id = None + + for child in self.get_children(): + child.unparent() + child.run_dispose() + child.destroy() diff --git a/src/core/widgets/files/tabs_view.py b/src/core/widgets/files/tabs_view.py new file mode 100644 index 0000000..a588675 --- /dev/null +++ b/src/core/widgets/files/tabs_view.py @@ -0,0 +1,54 @@ +# Python imports + +# Lib imports +import gi +gi.require_version('Gtk', '3.0') + +from gi.repository import Gtk + +# Application imports +from .tab_dto import TabDTO + + + +class TabsView(Gtk.Notebook): + def __init__(self): + super(TabsView, self).__init__() + + self._setup_styling() + self._setup_signals() + self._subscribe_to_events() + self._load_widgets() + + self.show() + + + def _setup_styling(self): + self.set_scrollable(True) + + def _setup_signals(self): + ... + + def _subscribe_to_events(self): + ... + + def _load_widgets(self): + ... + + def create_new_tab(self, name: str) -> TabDTO: + if not name: + logger.error("Must give a path to load...") + return + + tab_dto = TabDTO() + tab_dto.tab_header.label.set_label(name) + + self.append_page( + tab_dto.files_view, + tab_dto.tab_header + ) + + self.set_tab_detachable(tab_dto.files_view, True) + self.set_tab_reorderable(tab_dto.files_view, True) + + return tab_dto diff --git a/src/libs/dto/files/events/__init__.py b/src/libs/dto/files/events/__init__.py new file mode 100644 index 0000000..6297085 --- /dev/null +++ b/src/libs/dto/files/events/__init__.py @@ -0,0 +1,15 @@ +""" + Libs Code DTO(s) Events Package +""" + + +from .files_event import FilesEvent +from .create_files_view_event import CreateFilesViewEvent +from .created_files_view_event import CreatedFilesViewEvent +from .remove_files_view_event import RemoveFilesViewEvent + +from .create_command_system_event import CreateCommandSystemEvent + +from .added_new_file_event import AddedNewFileEvent + +from .add_new_file_event import AddNewFileEvent diff --git a/src/libs/dto/files/events/add_new_file_event.py b/src/libs/dto/files/events/add_new_file_event.py new file mode 100644 index 0000000..7cbf432 --- /dev/null +++ b/src/libs/dto/files/events/add_new_file_event.py @@ -0,0 +1,13 @@ +# Python imports +from dataclasses import dataclass, field + +# Lib imports + +# Application imports +from .files_event import FilesEvent + + + +@dataclass +class AddNewFileEvent(FilesEvent): + ... diff --git a/src/libs/dto/files/events/added_new_file_event.py b/src/libs/dto/files/events/added_new_file_event.py new file mode 100644 index 0000000..b2fd1c5 --- /dev/null +++ b/src/libs/dto/files/events/added_new_file_event.py @@ -0,0 +1,13 @@ +# Python imports +from dataclasses import dataclass, field + +# Lib imports + +# Application imports +from .files_event import FilesEvent + + + +@dataclass +class AddedNewFileEvent(FilesEvent): + ... diff --git a/src/libs/dto/files/events/create_command_system_event.py b/src/libs/dto/files/events/create_command_system_event.py new file mode 100644 index 0000000..24ef920 --- /dev/null +++ b/src/libs/dto/files/events/create_command_system_event.py @@ -0,0 +1,13 @@ +# Python imports +from dataclasses import dataclass, field + +# Lib imports + +# Application imports +from .files_event import FilesEvent + + + +@dataclass +class CreateCommandSystemEvent(FilesEvent): + ... diff --git a/src/libs/dto/files/events/create_files_view_event.py b/src/libs/dto/files/events/create_files_view_event.py new file mode 100644 index 0000000..b268796 --- /dev/null +++ b/src/libs/dto/files/events/create_files_view_event.py @@ -0,0 +1,13 @@ +# Python imports +from dataclasses import dataclass + +# Lib imports + +# Application imports +from .files_event import FilesEvent + + + +@dataclass +class CreateFilesViewEvent(FilesEvent): + ... diff --git a/src/libs/dto/files/events/created_files_view_event.py b/src/libs/dto/files/events/created_files_view_event.py new file mode 100644 index 0000000..c79de65 --- /dev/null +++ b/src/libs/dto/files/events/created_files_view_event.py @@ -0,0 +1,13 @@ +# Python imports +from dataclasses import dataclass + +# Lib imports + +# Application imports +from .files_event import FilesEvent + + + +@dataclass +class CreatedFilesViewEvent(FilesEvent): + ... diff --git a/src/libs/dto/files/events/files_event.py b/src/libs/dto/files/events/files_event.py new file mode 100644 index 0000000..91f2b96 --- /dev/null +++ b/src/libs/dto/files/events/files_event.py @@ -0,0 +1,15 @@ +# Python imports +from dataclasses import dataclass, field + +# Lib imports + +# Application imports +from ...base_event import BaseEvent + + + +@dataclass +class FilesEvent(BaseEvent): + view: any = None + tab: any = None + response: any = None diff --git a/src/libs/dto/files/events/remove_files_view_event.py b/src/libs/dto/files/events/remove_files_view_event.py new file mode 100644 index 0000000..a5aeb78 --- /dev/null +++ b/src/libs/dto/files/events/remove_files_view_event.py @@ -0,0 +1,14 @@ +# Python imports +from dataclasses import dataclass + +# Lib imports + +# Application imports +from .files_event import FilesEvent +from libs.dto.states.source_view_states import SourceViewStates + + + +@dataclass +class RemoveFilesViewEvent(FilesEvent): + ... diff --git a/src/libs/event_factory.py b/src/libs/event_factory.py index 5dc1e93..ffebbdc 100644 --- a/src/libs/event_factory.py +++ b/src/libs/event_factory.py @@ -10,6 +10,7 @@ from .singleton import Singleton from .dto.base_event import BaseEvent from .dto.code import events as code +from .dto.files import events as files @@ -18,6 +19,7 @@ class EventFactory(Singleton): self._event_classes: Dict[str, Type[BaseEvent]] = {} + self._auto_register_events( files.__dict__.items() ) self._auto_register_events( code.__dict__.items() ) def register_event(self, event_type: str, event_class: Type[BaseEvent]): @@ -98,7 +100,8 @@ class EventNamespace: -App_Event_Types = EventNamespace() -Code_Event_Types = App_Event_Types -Event_Factory = EventFactory() +App_Event_Types = EventNamespace() +Code_Event_Types = App_Event_Types +Files_Event_Types = App_Event_Types +Event_Factory = EventFactory()