diff --git a/plugins/code/autopairs/plugin.py b/plugins/code/autopairs/plugin.py index 164500c..d034cea 100644 --- a/plugins/code/autopairs/plugin.py +++ b/plugins/code/autopairs/plugin.py @@ -37,7 +37,7 @@ class Plugin(PluginCode): ] ) - self.message_to("source_views", event) + self.emit_to("source_views", event) def run(self): ... diff --git a/plugins/code/code_minimap/plugin.py b/plugins/code/code_minimap/plugin.py index a37db78..2b13d74 100644 --- a/plugins/code/code_minimap/plugin.py +++ b/plugins/code/code_minimap/plugin.py @@ -25,7 +25,7 @@ class Plugin(PluginCode): code_minimap.set_smini_view(event.view) def load(self): - editors_container = self.requests_ui_element("editors-container") + editors_container = self.request_ui_element("editors-container") editors_container.add( code_minimap ) def run(self): diff --git a/plugins/code/colorize/plugin.py b/plugins/code/colorize/plugin.py index 97e2509..5db3eb7 100644 --- a/plugins/code/colorize/plugin.py +++ b/plugins/code/colorize/plugin.py @@ -34,7 +34,7 @@ class Plugin(PluginCode): binding = "c" ) - self.message_to("source_views", event) + self.emit_to("source_views", event) def run(self): ... diff --git a/plugins/code/commentzar/plugin.py b/plugins/code/commentzar/plugin.py index a753e03..c882182 100644 --- a/plugins/code/commentzar/plugin.py +++ b/plugins/code/commentzar/plugin.py @@ -34,7 +34,7 @@ class Plugin(PluginCode): binding = "slash" ) - self.message_to("source_views", event) + self.emit_to("source_views", event) def run(self): ... diff --git a/plugins/code/completers/example_completer/plugin.py b/plugins/code/completers/example_completer/plugin.py index 479fdd0..d95e8a4 100644 --- a/plugins/code/completers/example_completer/plugin.py +++ b/plugins/code/completers/example_completer/plugin.py @@ -33,7 +33,7 @@ class Plugin(PluginCode): provider = self.provider, language_ids = [] ) - self.message_to("completion", event) + self.emit_to("completion", event) def run(self): ... diff --git a/plugins/code/completers/lsp_completer/plugin.py b/plugins/code/completers/lsp_completer/plugin.py index b37a718..379dd73 100644 --- a/plugins/code/completers/lsp_completer/plugin.py +++ b/plugins/code/completers/lsp_completer/plugin.py @@ -33,7 +33,7 @@ class Plugin(PluginCode): provider = self.provider, language_ids = [] ) - self.message_to("completion", event) + self.emit_to("completion", event) def run(self): ... diff --git a/plugins/code/completers/python_completer/plugin.py b/plugins/code/completers/python_completer/plugin.py index 5be143b..ca85852 100644 --- a/plugins/code/completers/python_completer/plugin.py +++ b/plugins/code/completers/python_completer/plugin.py @@ -33,7 +33,7 @@ class Plugin(PluginCode): provider = self.provider, language_ids = [] ) - self.message_to("completion", event) + self.emit_to("completion", event) def run(self): ... diff --git a/plugins/code/completers/snippets_completer/plugin.py b/plugins/code/completers/snippets_completer/plugin.py index 45f7f17..b303184 100644 --- a/plugins/code/completers/snippets_completer/plugin.py +++ b/plugins/code/completers/snippets_completer/plugin.py @@ -33,7 +33,7 @@ class Plugin(PluginCode): provider = self.provider, language_ids = [] ) - self.message_to("completion", event) + self.emit_to("completion", event) def run(self): ... diff --git a/plugins/code/completers/words_completer/plugin.py b/plugins/code/completers/words_completer/plugin.py index 937cb00..2db9079 100644 --- a/plugins/code/completers/words_completer/plugin.py +++ b/plugins/code/completers/words_completer/plugin.py @@ -33,7 +33,7 @@ class Plugin(PluginCode): provider = self.provider, language_ids = [] ) - self.message_to("completion", event) + self.emit_to("completion", event) def run(self): ... diff --git a/plugins/code/info_bar/plugin.py b/plugins/code/info_bar/plugin.py index 594569b..5fe0b15 100644 --- a/plugins/code/info_bar/plugin.py +++ b/plugins/code/info_bar/plugin.py @@ -25,7 +25,7 @@ class Plugin(PluginCode): info_bar_widget._set_info_labels(*event.info) def load(self): - header = self.requests_ui_element("header-container") + header = self.request_ui_element("header-container") header.add( info_bar_widget ) def run(self): diff --git a/plugins/code/markdown_preview/plugin.py b/plugins/code/markdown_preview/plugin.py index 233c6bd..a07411f 100644 --- a/plugins/code/markdown_preview/plugin.py +++ b/plugins/code/markdown_preview/plugin.py @@ -24,7 +24,8 @@ class Plugin(PluginCode): event = Event_Factory.create_event( "get_file", buffer = buffer ) - self.message_to("files", event) + self.emit_to("files", event) + if not event.response.get_location(): return markdown_preview.fpath = event.response.get_location().get_path() @@ -38,7 +39,7 @@ class Plugin(PluginCode): markdown_preview._do_markdown_translate(event.buffer) def load(self): - separator_right = self.requests_ui_element("separator-right") + separator_right = self.request_ui_element("separator-right") markdown_preview.set_relative_to(separator_right) event = Event_Factory.create_event("register_command", @@ -48,7 +49,7 @@ class Plugin(PluginCode): binding = "m" ) - self.message_to("source_views", event) + self.emit_to("source_views", event) def run(self): ... diff --git a/plugins/code/search_replace/plugin.py b/plugins/code/search_replace/plugin.py index 0ac3e4f..af76f11 100644 --- a/plugins/code/search_replace/plugin.py +++ b/plugins/code/search_replace/plugin.py @@ -37,17 +37,17 @@ class Plugin(PluginCode): ) def load(self): - footer = self.requests_ui_element("footer-container") + footer = self.request_ui_element("footer-container") footer.add( search_replace ) event = Event_Factory.create_event("register_command", command_name = "search_replace", command = Handler, binding_mode = "released", - binding = "f" + binding = ["f", "r"] ) - self.message_to("source_views", event) + self.emit_to("source_views", event) def run(self): ... @@ -62,4 +62,5 @@ class Handler: ): logger.debug("Command: Search/Replace") + search_replace.last_key = args[0] search_replace.hide() if search_replace.is_visible() else search_replace.show() diff --git a/plugins/code/search_replace/search_replace.py b/plugins/code/search_replace/search_replace.py index 1e393f7..6380a63 100644 --- a/plugins/code/search_replace/search_replace.py +++ b/plugins/code/search_replace/search_replace.py @@ -19,9 +19,10 @@ class SearchReplace(Gtk.Grid, SearchReplaceMixin): def __init__(self): super(SearchReplace, self).__init__() - self.active_view = None - self.highlight_tag = None - self.matches: list[tuple] = [] + self.active_view = None + self.highlight_tag: Gtk.TextTag = None + self.matches: list[tuple] = [] + self.last_key: str = None self._setup_styling() self._setup_signals() @@ -112,7 +113,13 @@ class SearchReplace(Gtk.Grid, SearchReplaceMixin): def _handle_show(self, widget): self.find_entry.set_text("") - self.find_entry.grab_focus() + if not self.last_key == "r": + self.find_entry.grab_focus() + return + + self.replace_entry.grab_focus() + # Fake focus call to prompt search + self._find_entry_focus_in_event(self.find_entry, None) def _handle_hide(self, widget): if not self.active_view: return diff --git a/plugins/code/tabs_bar/plugin.py b/plugins/code/tabs_bar/plugin.py index bc3f934..2cec4d4 100644 --- a/plugins/code/tabs_bar/plugin.py +++ b/plugins/code/tabs_bar/plugin.py @@ -21,7 +21,7 @@ class Plugin(PluginCode): def load(self): tabs_controller = TabsController() - code_container = self.requests_ui_element("code-container") + code_container = self.request_ui_element("code-container") self.register_controller("tabs", tabs_controller) diff --git a/plugins/code/tabs_bar/tabs_controller.py b/plugins/code/tabs_bar/tabs_controller.py index 42ef088..a30ac64 100644 --- a/plugins/code/tabs_bar/tabs_controller.py +++ b/plugins/code/tabs_bar/tabs_controller.py @@ -22,7 +22,7 @@ class TabsController(ControllerBase): super(TabsController, self).__init__() self.tabs_widget: TabsWidget = TabsWidget() - self.tabs_widget.message = self.message + self.tabs_widget.emit = self.emit def _controller_message(self, event: Code_Event_Types.CodeEvent): diff --git a/plugins/code/tabs_bar/tabs_widget.py b/plugins/code/tabs_bar/tabs_widget.py index 5d13c71..d2cee4a 100644 --- a/plugins/code/tabs_bar/tabs_widget.py +++ b/plugins/code/tabs_bar/tabs_widget.py @@ -56,7 +56,7 @@ class TabsWidget(Gtk.Notebook): buffer = file.buffer ) - self.message(event) + self.emit(event) def _switch_page(self, notebook, page_widget, page_num): tab = self.get_tab_label(page_widget) @@ -65,7 +65,7 @@ class TabsWidget(Gtk.Notebook): buffer = tab.file.buffer ) - self.message(event) + self.emit(event) def _bind_tab_menu(self, tab, page_widget): def do_context_menu(tab, eve, page_widget): diff --git a/plugins/code/telescope/__init__.py b/plugins/code/telescope/__init__.py new file mode 100644 index 0000000..d36fa8c --- /dev/null +++ b/plugins/code/telescope/__init__.py @@ -0,0 +1,3 @@ +""" + Pligin Module +""" diff --git a/plugins/code/telescope/__main__.py b/plugins/code/telescope/__main__.py new file mode 100644 index 0000000..a576329 --- /dev/null +++ b/plugins/code/telescope/__main__.py @@ -0,0 +1,3 @@ +""" + Pligin Package +""" diff --git a/plugins/code/telescope/manifest.json b/plugins/code/telescope/manifest.json new file mode 100644 index 0000000..74378c2 --- /dev/null +++ b/plugins/code/telescope/manifest.json @@ -0,0 +1,7 @@ +{ + "name": "Telescope", + "author": "ITDominator", + "version": "0.0.1", + "support": "", + "requests": {} +} diff --git a/plugins/code/telescope/plugin.py b/plugins/code/telescope/plugin.py new file mode 100644 index 0000000..a605ebc --- /dev/null +++ b/plugins/code/telescope/plugin.py @@ -0,0 +1,53 @@ +# Python imports + +# Lib imports + +# Application imports +from libs.event_factory import Event_Factory, Code_Event_Types + +from plugins.plugin_types import PluginCode + +from .telescope import Telescope + + + +telescope = Telescope() + + + +class Plugin(PluginCode): + def __init__(self): + super(Plugin, self).__init__() + + + def _controller_message(self, event: Code_Event_Types.CodeEvent): + if isinstance(event, Code_Event_Types.FocusedViewEvent): + ... + + def load(self): + window = self.request_ui_element("main-window") + telescope.set_transient_for(window) + + event = Event_Factory.create_event("register_command", + command_name = "telescope", + command = Handler, + binding_mode = "released", + binding = "b" + ) + + self.emit_to("source_views", event) + + def run(self): + ... + + +class Handler: + @staticmethod + def execute( + view: any, + *args, + **kwargs + ): + logger.debug("Command: Telescope") + + telescope.hide() if telescope.is_visible() else telescope.show() diff --git a/plugins/code/telescope/telescope.py b/plugins/code/telescope/telescope.py new file mode 100644 index 0000000..2735dff --- /dev/null +++ b/plugins/code/telescope/telescope.py @@ -0,0 +1,55 @@ +# Python imports + +# Lib imports +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk +from gi.repository import GLib + +# Application imports + + + +class Telescope(Gtk.Window): + def __init__(self): + super(Telescope, self).__init__(Gtk.WindowType.POPUP) + + self._setup_styling() + self._setup_signals() + self._subscribe_to_events() + self._load_widgets() + + + def _setup_styling(self): + self.set_decorated(False) + self.set_modal(False) + self.set_destroy_with_parent(True) + self.set_skip_pager_hint(True) + self.set_skip_taskbar_hint(True) + self.set_size_request(620, 480) + self.set_position(Gtk.WindowPosition.CENTER_ON_PARENT) + + def _setup_signals(self): +# self.connect("page-added", self._page_added) + ... + + def _subscribe_to_events(self): + ... + + def _load_widgets(self): + main_box = Gtk.Box() + left_box = Gtk.Box() + list_box = Gtk.ListBox() + search_entry = Gtk.SearchEntry() + + left_box.set_orientation(Gtk.Orientation.VERTICAL) + list_box.set_vexpand(True) + list_box.set_size_request(120, -1) + + left_box.add(list_box) + left_box.add(search_entry) + main_box.add(left_box) + self.add(main_box) + + main_box.show_all() + diff --git a/plugins/code/toggle_source_view/plugin.py b/plugins/code/toggle_source_view/plugin.py index 8db8b70..ff50e86 100644 --- a/plugins/code/toggle_source_view/plugin.py +++ b/plugins/code/toggle_source_view/plugin.py @@ -24,7 +24,7 @@ class Plugin(PluginCode): binding = "h" ) - self.message_to("source_views", event) + self.emit_to("source_views", event) def run(self): ... diff --git a/plugins/ui/template/plugin.py b/plugins/ui/template/plugin.py index fd843eb..bd7fcb6 100644 --- a/plugins/ui/template/plugin.py +++ b/plugins/ui/template/plugin.py @@ -21,7 +21,7 @@ class Plugin(PluginUI): ... def load(self): - ui_element = self.requests_ui_element("header-container") + ui_element = self.request_ui_element("header-container") ui_element.add( self.generate_plugin_element() ) def run(self): 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..23ac7ee 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 @@ -74,8 +76,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) diff --git a/src/core/window.py b/src/core/window.py index ea1a123..fc03ad8 100644 --- a/src/core/window.py +++ b/src/core/window.py @@ -76,6 +76,8 @@ class Window(Gtk.ApplicationWindow): event_system.subscribe("load-interactive-debug", self._load_interactive_debug) def _load_widgets(self): + widget_registery.expose_object("main-window", self) + if settings_manager.is_debug(): self.set_interactive_debugging(True) diff --git a/src/libs/controllers/emit_dispatcher.py b/src/libs/controllers/emit_dispatcher.py index 0a19427..878ce67 100644 --- a/src/libs/controllers/emit_dispatcher.py +++ b/src/libs/controllers/emit_dispatcher.py @@ -24,3 +24,6 @@ class EmitDispatcher: def emit_to(self, controller: str, event: BaseEvent): self.message_to(controller, event) + + def emit_to_selected(self, names: list[str], event: BaseEvent): + self.message_to_selected(names, event) diff --git a/src/plugins/controller.py b/src/plugins/controller.py index c3888fa..d09431b 100644 --- a/src/plugins/controller.py +++ b/src/plugins/controller.py @@ -56,8 +56,8 @@ class PluginsController(ControllerBase, PluginsControllerMixin, PluginReloadMixi locations.append(path) for file in os.listdir(path): _path = os.path.join(path, file) - if os.path.isdir(_path): - self._collect_search_locations(_path, locations) + if not os.path.isdir(_path): continue + self._collect_search_locations(_path, locations) def _load_plugins( self, @@ -150,12 +150,10 @@ class PluginsController(ControllerBase, PluginsControllerMixin, PluginReloadMixi def create_plugin_context(self): plugin_context: PluginContext = PluginContext() - plugin_context.requests_ui_element: callable = self.requests_ui_element - plugin_context.message: callable = self.message - plugin_context.message_to: callable = self.message_to - plugin_context.message_to_selected: callable = self.message_to_selected - plugin_context.emit: callable = event_system.emit - plugin_context.emit_and_await: callable = event_system.emit_and_await + plugin_context.request_ui_element: callable = self.request_ui_element + plugin_context.emit: callable = self.emit + plugin_context.emit_to: callable = self.emit_to + plugin_context.emit_to_selected: callable = self.emit_to_selected plugin_context.register_controller: callable = self.register_controller return plugin_context diff --git a/src/plugins/plugin_context.py b/src/plugins/plugin_context.py index 0841392..3957c97 100644 --- a/src/plugins/plugin_context.py +++ b/src/plugins/plugin_context.py @@ -18,26 +18,21 @@ class PluginContext: def __init__(self): super(PluginContext, self).__init__() - def requests_ui_element(self, element_id: str): - raise PluginContextException("Plugin Context 'requests_ui_element' must be overridden...") def _controller_message(self, event: BaseEvent): raise PluginContextException("Plugin Context '_controller_message' must be overridden...") - def message(self, event: BaseEvent): - raise PluginContextException("Plugin Context 'message' must be overridden...") + def request_ui_element(self, element_id: str): + raise PluginContextException("Plugin Context 'request_ui_element' must be overridden...") - def message_to(self, name: str, event: BaseEvent): - raise PluginContextException("Plugin Context 'message_to' must be overridden...") - - def message_to_selected(self, names: list[str], event: BaseEvent): - raise PluginContextException("Plugin Context 'message_to_selected' must be overridden...") - - def emit(self, event_type: str, data: tuple = ()): + def emit(self, event: BaseEvent): raise PluginContextException("Plugin Context 'emit' must be overridden...") - def emit_and_await(self, event_type: str, data: tuple = ()): - raise PluginContextException("Plugin Context 'emit_and_await' must be overridden...") + def emit_to(self, name: str, event: BaseEvent): + raise PluginContextException("Plugin Context 'emit_to' must be overridden...") + + def emit_to_selected(self, names: list[str], event: BaseEvent): + raise PluginContextException("Plugin Context 'emit_to_selected' must be overridden...") def register_controller(self, name: str, controller): raise PluginContextException("Plugin Context 'register_controller' must be overridden...") diff --git a/src/plugins/plugin_types/plugin_base.py b/src/plugins/plugin_types/plugin_base.py index 1b1b97a..92a819c 100644 --- a/src/plugins/plugin_types/plugin_base.py +++ b/src/plugins/plugin_types/plugin_base.py @@ -30,20 +30,14 @@ class PluginBase: def run(self): raise PluginBaseException("Plugin Base 'run' must be overriden by Plugin") - def requests_ui_element(self, element_id: str): - raise PluginBaseException("Plugin Base 'requests_ui_element' must be overriden by Plugin") + def request_ui_element(self, element_id: str): + raise PluginBaseException("Plugin Base 'request_ui_element' must be overriden by Plugin") - def message(self, event: BaseEvent): - raise PluginBaseException("Plugin Base 'message' must be overriden by Plugin") - - def message_to(self, name: str, event: BaseEvent): - raise PluginBaseException("Plugin Base 'message_to' must be overriden by Plugin") - - def message_to_selected(self, names: list[str], event: BaseEvent): - raise PluginBaseException("Plugin Base 'message_to_selected' must be overriden by Plugin") - - def emit(self, event_type: str, data: tuple = ()): + def emit(self, event: BaseEvent): raise PluginBaseException("Plugin Base 'emit' must be overriden by Plugin") - def emit_and_await(self, event_type: str, data: tuple = ()): - raise PluginBaseException("Plugin Base 'emit_and_await' must be overriden by Plugin") + def emit_to(self, name: str, event: BaseEvent): + raise PluginBaseException("Plugin Base 'emit_to' must be overriden by Plugin") + + def emit_to_selected(self, names: list[str], event: BaseEvent): + raise PluginBaseException("Plugin Base 'emit_to_selected' must be overriden by Plugin") diff --git a/src/plugins/plugin_types/plugin_code.py b/src/plugins/plugin_types/plugin_code.py index 26e0983..95aa9e9 100644 --- a/src/plugins/plugin_types/plugin_code.py +++ b/src/plugins/plugin_types/plugin_code.py @@ -31,17 +31,17 @@ class PluginCode(PluginBase): def run(self): raise PluginCodeException("Plugin Code 'run' must be overriden by Plugin") - def requests_ui_element(self, element_id: str): - return self.plugin_context.requests_ui_element(element_id) - - def message(self, event: BaseEvent): - return self.plugin_context.message(event) - - def message_to(self, name: str, event: BaseEvent): - return self.plugin_context.message_to(name, event) - - def message_to_selected(self, names: list[str], event: BaseEvent): - return self.plugin_context.message_to_selected(names, event) - def register_controller(self, name: str, controller): return self.plugin_context.register_controller(name, controller) + + def request_ui_element(self, element_id: str): + return self.plugin_context.request_ui_element(element_id) + + def emit(self, event: BaseEvent): + return self.plugin_context.emit(event) + + def emit_to(self, name: str, event: BaseEvent): + return self.plugin_context.emit_to(name, event) + + def emit_to_selected(self, names: list[str], event: BaseEvent): + return self.plugin_context.emit_to_selected(names, event) diff --git a/src/plugins/plugin_types/plugin_ui.py b/src/plugins/plugin_types/plugin_ui.py index f5e3534..f09e09f 100644 --- a/src/plugins/plugin_types/plugin_ui.py +++ b/src/plugins/plugin_types/plugin_ui.py @@ -31,20 +31,14 @@ class PluginUI(PluginBase): def run(self): raise PluginCodeException("Plugin UI 'run' must be overriden by Plugin") - def requests_ui_element(self, element_id: str): - return self.plugin_context.requests_ui_element(element_id) + def request_ui_element(self, element_id: str): + return self.plugin_context.request_ui_element(element_id) - def message(self, event: BaseEvent): - return self.plugin_context.message(event) + def emit(self, event: BaseEvent): + return self.plugin_context.emit(event) - def message_to(self, name: str, event: BaseEvent): - return self.plugin_context.message_to(name, event) + def emit_to(self, name: str, event: BaseEvent): + return self.plugin_context.emit_to(name, event) - def message_to_selected(self, names: list[str], event: BaseEvent): - return self.plugin_context.message_to_selected(names, event) - - def emit(self, event_type: str, data: tuple = ()): - self.plugin_context.emit(event_type, data) - - def emit_and_await(self, event_type: str, data: tuple = ()): - self.plugin_context.emit_and_await(event_type, data) + def emit_to_selected(self, names: list[str], event: BaseEvent): + return self.plugin_context.emit_to_selected(names, event) diff --git a/src/plugins/plugins_controller_mixin.py b/src/plugins/plugins_controller_mixin.py index 565d04f..2dc72be 100644 --- a/src/plugins/plugins_controller_mixin.py +++ b/src/plugins/plugins_controller_mixin.py @@ -13,7 +13,7 @@ class InvalidPluginException(Exception): class PluginsControllerMixin: - def requests_ui_element(self, target_id: str): + def request_ui_element(self, target_id: str): if not target_id in widget_registery.objects: raise InvalidPluginException('Unknown UI "target_id" given in requests.')