diff --git a/plugins/code/autopairs/__init__.py b/plugins/code/commands/autopairs/__init__.py similarity index 100% rename from plugins/code/autopairs/__init__.py rename to plugins/code/commands/autopairs/__init__.py diff --git a/plugins/code/autopairs/__main__.py b/plugins/code/commands/autopairs/__main__.py similarity index 100% rename from plugins/code/autopairs/__main__.py rename to plugins/code/commands/autopairs/__main__.py diff --git a/plugins/code/autopairs/autopairs.py b/plugins/code/commands/autopairs/autopairs.py similarity index 100% rename from plugins/code/autopairs/autopairs.py rename to plugins/code/commands/autopairs/autopairs.py diff --git a/plugins/code/autopairs/manifest.json b/plugins/code/commands/autopairs/manifest.json similarity index 100% rename from plugins/code/autopairs/manifest.json rename to plugins/code/commands/autopairs/manifest.json diff --git a/plugins/code/autopairs/plugin.py b/plugins/code/commands/autopairs/plugin.py similarity index 100% rename from plugins/code/autopairs/plugin.py rename to plugins/code/commands/autopairs/plugin.py diff --git a/plugins/code/code_minimap/__init__.py b/plugins/code/commands/prettify_json/__init__.py similarity index 100% rename from plugins/code/code_minimap/__init__.py rename to plugins/code/commands/prettify_json/__init__.py diff --git a/plugins/code/code_minimap/__main__.py b/plugins/code/commands/prettify_json/__main__.py similarity index 100% rename from plugins/code/code_minimap/__main__.py rename to plugins/code/commands/prettify_json/__main__.py diff --git a/plugins/code/prettify_json/manifest.json b/plugins/code/commands/prettify_json/manifest.json similarity index 100% rename from plugins/code/prettify_json/manifest.json rename to plugins/code/commands/prettify_json/manifest.json diff --git a/plugins/code/prettify_json/plugin.py b/plugins/code/commands/prettify_json/plugin.py similarity index 100% rename from plugins/code/prettify_json/plugin.py rename to plugins/code/commands/prettify_json/plugin.py diff --git a/plugins/code/toggle_source_view/__init__.py b/plugins/code/commands/toggle_source_view/__init__.py similarity index 100% rename from plugins/code/toggle_source_view/__init__.py rename to plugins/code/commands/toggle_source_view/__init__.py diff --git a/plugins/code/toggle_source_view/__main__.py b/plugins/code/commands/toggle_source_view/__main__.py similarity index 100% rename from plugins/code/toggle_source_view/__main__.py rename to plugins/code/commands/toggle_source_view/__main__.py diff --git a/plugins/code/toggle_source_view/manifest.json b/plugins/code/commands/toggle_source_view/manifest.json similarity index 100% rename from plugins/code/toggle_source_view/manifest.json rename to plugins/code/commands/toggle_source_view/manifest.json diff --git a/plugins/code/toggle_source_view/plugin.py b/plugins/code/commands/toggle_source_view/plugin.py similarity index 100% rename from plugins/code/toggle_source_view/plugin.py rename to plugins/code/commands/toggle_source_view/plugin.py diff --git a/plugins/code/info_bar/__init__.py b/plugins/code/ui/code_minimap/__init__.py similarity index 100% rename from plugins/code/info_bar/__init__.py rename to plugins/code/ui/code_minimap/__init__.py diff --git a/plugins/code/info_bar/__main__.py b/plugins/code/ui/code_minimap/__main__.py similarity index 100% rename from plugins/code/info_bar/__main__.py rename to plugins/code/ui/code_minimap/__main__.py diff --git a/plugins/code/code_minimap/code_minimap.py b/plugins/code/ui/code_minimap/code_minimap.py similarity index 100% rename from plugins/code/code_minimap/code_minimap.py rename to plugins/code/ui/code_minimap/code_minimap.py diff --git a/plugins/code/code_minimap/manifest.json b/plugins/code/ui/code_minimap/manifest.json similarity index 100% rename from plugins/code/code_minimap/manifest.json rename to plugins/code/ui/code_minimap/manifest.json diff --git a/plugins/code/code_minimap/plugin.py b/plugins/code/ui/code_minimap/plugin.py similarity index 100% rename from plugins/code/code_minimap/plugin.py rename to plugins/code/ui/code_minimap/plugin.py diff --git a/plugins/code/prettify_json/__init__.py b/plugins/code/ui/info_bar/__init__.py similarity index 100% rename from plugins/code/prettify_json/__init__.py rename to plugins/code/ui/info_bar/__init__.py diff --git a/plugins/code/prettify_json/__main__.py b/plugins/code/ui/info_bar/__main__.py similarity index 100% rename from plugins/code/prettify_json/__main__.py rename to plugins/code/ui/info_bar/__main__.py diff --git a/plugins/code/info_bar/info_bar_widget.py b/plugins/code/ui/info_bar/info_bar_widget.py similarity index 100% rename from plugins/code/info_bar/info_bar_widget.py rename to plugins/code/ui/info_bar/info_bar_widget.py diff --git a/plugins/code/info_bar/manifest.json b/plugins/code/ui/info_bar/manifest.json similarity index 100% rename from plugins/code/info_bar/manifest.json rename to plugins/code/ui/info_bar/manifest.json diff --git a/plugins/code/info_bar/plugin.py b/plugins/code/ui/info_bar/plugin.py similarity index 100% rename from plugins/code/info_bar/plugin.py rename to plugins/code/ui/info_bar/plugin.py diff --git a/plugins/code/tabs_bar/__init__.py b/plugins/code/ui/tabs_bar/__init__.py similarity index 100% rename from plugins/code/tabs_bar/__init__.py rename to plugins/code/ui/tabs_bar/__init__.py diff --git a/plugins/code/tabs_bar/__main__.py b/plugins/code/ui/tabs_bar/__main__.py similarity index 100% rename from plugins/code/tabs_bar/__main__.py rename to plugins/code/ui/tabs_bar/__main__.py diff --git a/plugins/code/tabs_bar/manifest.json b/plugins/code/ui/tabs_bar/manifest.json similarity index 100% rename from plugins/code/tabs_bar/manifest.json rename to plugins/code/ui/tabs_bar/manifest.json diff --git a/plugins/code/tabs_bar/plugin.py b/plugins/code/ui/tabs_bar/plugin.py similarity index 100% rename from plugins/code/tabs_bar/plugin.py rename to plugins/code/ui/tabs_bar/plugin.py diff --git a/plugins/code/tabs_bar/tab_widget.py b/plugins/code/ui/tabs_bar/tab_widget.py similarity index 92% rename from plugins/code/tabs_bar/tab_widget.py rename to plugins/code/ui/tabs_bar/tab_widget.py index 729cc29..4796548 100644 --- a/plugins/code/tabs_bar/tab_widget.py +++ b/plugins/code/ui/tabs_bar/tab_widget.py @@ -32,6 +32,7 @@ class TabWidget(Gtk.Box): self.set_orientation(0) self.set_hexpand(False) self.set_vexpand(False) + self.set_can_focus(False) self.set_size_request(-1, 12) def _setup_signals(self): @@ -43,6 +44,10 @@ class TabWidget(Gtk.Box): self.close_bttn = Gtk.Button() icon = Gtk.Image(stock = Gtk.STOCK_CLOSE) + self.event_box.set_can_focus(False) + self.label.set_can_focus(False) + self.close_bttn.set_can_focus(False) + self.event_box.set_above_child(True) ctx = self.label.get_style_context() ctx.add_class("tab-label") diff --git a/plugins/code/tabs_bar/tabs_controller.py b/plugins/code/ui/tabs_bar/tabs_controller.py similarity index 100% rename from plugins/code/tabs_bar/tabs_controller.py rename to plugins/code/ui/tabs_bar/tabs_controller.py diff --git a/plugins/code/tabs_bar/tabs_widget.py b/plugins/code/ui/tabs_bar/tabs_widget.py similarity index 100% rename from plugins/code/tabs_bar/tabs_widget.py rename to plugins/code/ui/tabs_bar/tabs_widget.py diff --git a/src/core/widgets/code/controllers/completion_controller.py b/src/core/widgets/code/controllers/completion_controller.py index 4102ddd..a9a3d1a 100644 --- a/src/core/widgets/code/controllers/completion_controller.py +++ b/src/core/widgets/code/controllers/completion_controller.py @@ -21,7 +21,13 @@ class CompletionController(ControllerBase): self._providers: dict[str, GtkSource.CompletionProvider] = {} def _controller_message(self, event: Code_Event_Types.CodeEvent): - if isinstance(event, Code_Event_Types.RegisterProviderEvent): + if isinstance(event, Code_Event_Types.RegisterCompleterEvent): + self.register_completer(event.completer) + elif isinstance(event, Code_Event_Types.UnregisterCompleterEvent): + self.unregister_completer(event.completer) + elif isinstance(event, Code_Event_Types.UnregisterProviderEvent): + self.unregister_provider(event.provider_name) + elif isinstance(event, Code_Event_Types.RegisterProviderEvent): self.register_provider( event.provider_name, event.provider, diff --git a/src/core/widgets/code/controllers/views/source_views_controller.py b/src/core/widgets/code/controllers/views/source_views_controller.py index 87f2fcf..d097fdb 100644 --- a/src/core/widgets/code/controllers/views/source_views_controller.py +++ b/src/core/widgets/code/controllers/views/source_views_controller.py @@ -6,6 +6,8 @@ from libs.controllers.controller_base import ControllerBase from libs.event_factory import Event_Factory, Code_Event_Types +from libs.dto.states import SourceViewStates + from ...source_view import SourceView from .state_manager import SourceViewStateManager @@ -25,7 +27,9 @@ class SourceViewsController(ControllerBase, list): def _controller_message(self, event: Code_Event_Types.CodeEvent): - if isinstance(event, Code_Event_Types.RemovedFileEvent): + if isinstance(event, Code_Event_Types.CreateSourceViewEvent): + event.response = self.create_source_view(event.state) + elif isinstance(event, Code_Event_Types.RemovedFileEvent): self._remove_file(event) elif isinstance(event, Code_Event_Types.RegisterCommandEvent): self._register_command(event) @@ -74,8 +78,8 @@ class SourceViewsController(ControllerBase, list): source_view.set_buffer(event.next_file.buffer) - def create_source_view(self): - source_view: SourceView = SourceView() + def create_source_view(self, state: SourceViewStates = SourceViewStates.INSERT): + source_view: SourceView = SourceView(state) source_view.command = self._get_command_system() source_view.command.set_data(source_view) @@ -86,6 +90,7 @@ class SourceViewsController(ControllerBase, list): def first_map_load(self): for source_view in self: + if source_view.state == SourceViewStates.INDEPENDENT: continue source_view.command.exec("new_file") if not source_view.sibling_left: continue source_view.get_parent().hide() diff --git a/src/core/widgets/code/controllers/views/state_manager.py b/src/core/widgets/code/controllers/views/state_manager.py index 51c4276..104428a 100644 --- a/src/core/widgets/code/controllers/views/state_manager.py +++ b/src/core/widgets/code/controllers/views/state_manager.py @@ -19,7 +19,8 @@ class SourceViewStateManager: SourceViewStates.INSERT: SourceViewsInsertState(), SourceViewStates.MULTIINSERT: SourceViewsMultiInsertState(), SourceViewStates.COMMAND: SourceViewsCommandState(), - SourceViewStates.READONLY: SourceViewsReadOnlyState() + SourceViewStates.READONLY: SourceViewsReadOnlyState(), + SourceViewStates.INDEPENDENT: SourceViewsIndependentState() } diff --git a/src/core/widgets/code/controllers/views/states/__init__.py b/src/core/widgets/code/controllers/views/states/__init__.py index 9b79f5c..2f9ba93 100644 --- a/src/core/widgets/code/controllers/views/states/__init__.py +++ b/src/core/widgets/code/controllers/views/states/__init__.py @@ -3,6 +3,7 @@ """ from .source_view_insert_state import SourceViewsInsertState +from .source_view_independent_state import SourceViewsIndependentState from .source_view_multi_insert_state import SourceViewsMultiInsertState from .source_view_command_state import SourceViewsCommandState from .source_view_read_only_state import SourceViewsReadOnlyState diff --git a/src/core/widgets/code/controllers/views/states/source_view_base_state.py b/src/core/widgets/code/controllers/views/states/source_view_base_state.py index a0bdbe4..6b7a77d 100644 --- a/src/core/widgets/code/controllers/views/states/source_view_base_state.py +++ b/src/core/widgets/code/controllers/views/states/source_view_base_state.py @@ -44,7 +44,7 @@ class SourceViewsBaseState: source_view.command.exec("update_info_bar") def button_press_event(self, source_view, eve): - source_view.command.exec("update_info_bar") + ... def button_release_event(self, source_view, eve): source_view.command.exec("update_info_bar") diff --git a/src/core/widgets/code/controllers/views/states/source_view_independent_state.py b/src/core/widgets/code/controllers/views/states/source_view_independent_state.py new file mode 100644 index 0000000..f2f61ef --- /dev/null +++ b/src/core/widgets/code/controllers/views/states/source_view_independent_state.py @@ -0,0 +1,16 @@ +# Python imports + +# Lib imports + +# Application imports +from libs.event_factory import Event_Factory, Code_Event_Types + +from libs.dto.states import SourceViewStates + +from .source_view_base_state import SourceViewsBaseState + + + +class SourceViewsIndependentState(SourceViewsBaseState): + def __init__(self): + super(SourceViewsIndependentState, self).__init__() diff --git a/src/libs/dto/code/__init__.py b/src/libs/dto/code/__init__.py index e87fa32..db58d5c 100644 --- a/src/libs/dto/code/__init__.py +++ b/src/libs/dto/code/__init__.py @@ -4,7 +4,11 @@ from .code_event import CodeEvent +from .create_source_view_event import CreateSourceViewEvent +from .register_completer_event import RegisterCompleterEvent +from .unregister_completer_event import UnregisterCompleterEvent from .register_provider_event import RegisterProviderEvent +from .unregister_provider_event import UnregisterProviderEvent from .register_command_event import RegisterCommandEvent from .file_externally_modified_event import FileExternallyModifiedEvent from .file_externally_deleted_event import FileExternallyDeletedEvent diff --git a/src/libs/dto/code/create_source_view_event.py b/src/libs/dto/code/create_source_view_event.py new file mode 100644 index 0000000..3cee2a6 --- /dev/null +++ b/src/libs/dto/code/create_source_view_event.py @@ -0,0 +1,14 @@ +# Python imports +from dataclasses import dataclass + +# Lib imports + +# Application imports +from .code_event import CodeEvent +from libs.dto.states.source_view_states import SourceViewStates + + + +@dataclass +class CreateSourceViewEvent(CodeEvent): + state: SourceViewStates = SourceViewStates.INSERT diff --git a/src/libs/dto/code/register_completer_event.py b/src/libs/dto/code/register_completer_event.py new file mode 100644 index 0000000..38317e7 --- /dev/null +++ b/src/libs/dto/code/register_completer_event.py @@ -0,0 +1,17 @@ +# Python imports +from dataclasses import dataclass, field + +# Lib imports +import gi +gi.require_version('GtkSource', '4') + +from gi.repository import GtkSource + +# Application imports +from .code_event import CodeEvent + + + +@dataclass +class RegisterCompleterEvent(CodeEvent): + completer: GtkSource.Completion = None diff --git a/src/libs/dto/code/unregister_completer_event.py b/src/libs/dto/code/unregister_completer_event.py new file mode 100644 index 0000000..e339520 --- /dev/null +++ b/src/libs/dto/code/unregister_completer_event.py @@ -0,0 +1,17 @@ +# Python imports +from dataclasses import dataclass + +# Lib imports +import gi +gi.require_version('GtkSource', '4') + +from gi.repository import GtkSource + +# Application imports +from .code_event import CodeEvent + + + +@dataclass +class UnregisterCompleterEvent(CodeEvent): + completer: GtkSource.Completion = None diff --git a/src/libs/dto/code/unregister_provider_event.py b/src/libs/dto/code/unregister_provider_event.py new file mode 100644 index 0000000..7f8e9cf --- /dev/null +++ b/src/libs/dto/code/unregister_provider_event.py @@ -0,0 +1,13 @@ +# Python imports +from dataclasses import dataclass + +# Lib imports + +# Application imports +from .code_event import CodeEvent + + + +@dataclass +class UnregisterProviderEvent(CodeEvent): + provider_name: str = "" diff --git a/src/libs/dto/states/source_view_states.py b/src/libs/dto/states/source_view_states.py index b1c3c69..9c2ecbb 100644 --- a/src/libs/dto/states/source_view_states.py +++ b/src/libs/dto/states/source_view_states.py @@ -12,3 +12,4 @@ class SourceViewStates(Enum): MULTIINSERT = 1 COMMAND = 2 READONLY = 3 + INDEPENDENT = 4