refactor: remove InfoBarWidget in favor of plugin-based one
- Replace direct InfoBarWidget with set_info_labels command that emits events to plugins - Replace mini view widget in favor of plugin-based one - Add widget registry exposure for code-container and editors-container - Fix DND mixin exec_with_args call (tuple args issue) - Add break statements in tabs_widget loops for efficiency - Add _update_transparency call to BaseContainer
This commit is contained in:
3
plugins/code/code_minimap/__init__.py
Normal file
3
plugins/code/code_minimap/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
"""
|
||||||
|
Pligin Module
|
||||||
|
"""
|
||||||
3
plugins/code/code_minimap/__main__.py
Normal file
3
plugins/code/code_minimap/__main__.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
"""
|
||||||
|
Pligin Package
|
||||||
|
"""
|
||||||
50
plugins/code/code_minimap/code_minimap.py
Normal file
50
plugins/code/code_minimap/code_minimap.py
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
# Python imports
|
||||||
|
|
||||||
|
# Lib imports
|
||||||
|
import gi
|
||||||
|
gi.require_version('GtkSource', '4')
|
||||||
|
from gi.repository.GtkSource import Map
|
||||||
|
from gi.repository import Pango
|
||||||
|
|
||||||
|
# Application imports
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class CodeMiniMap(Map):
|
||||||
|
def __init__(self):
|
||||||
|
super(CodeMiniMap, self).__init__()
|
||||||
|
|
||||||
|
self._setup_styling()
|
||||||
|
self._setup_signals()
|
||||||
|
self._subscribe_to_events()
|
||||||
|
self._load_widgets()
|
||||||
|
|
||||||
|
self.show()
|
||||||
|
|
||||||
|
|
||||||
|
def _setup_styling(self):
|
||||||
|
ctx = self.get_style_context()
|
||||||
|
ctx.add_class("mini-view")
|
||||||
|
|
||||||
|
self.set_hexpand(False)
|
||||||
|
self._set_font_desc()
|
||||||
|
|
||||||
|
def _setup_signals(self):
|
||||||
|
...
|
||||||
|
|
||||||
|
def _subscribe_to_events(self):
|
||||||
|
event_system.subscribe(f"set-mini-view", self.set_smini_view)
|
||||||
|
|
||||||
|
def _load_widgets(self):
|
||||||
|
...
|
||||||
|
|
||||||
|
def _set_font_desc(self):
|
||||||
|
default_font = 'Monospace 1'
|
||||||
|
desc = Pango.FontDescription(default_font)
|
||||||
|
|
||||||
|
desc.set_size(Pango.SCALE) # Set size to 1pt
|
||||||
|
desc.set_family('BuilderBlocks,' + desc.get_family())
|
||||||
|
self.set_property('font-desc', desc)
|
||||||
|
|
||||||
|
def set_smini_view(self, source_view):
|
||||||
|
self.set_view(source_view)
|
||||||
7
plugins/code/code_minimap/manifest.json
Normal file
7
plugins/code/code_minimap/manifest.json
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"name": "Code MiniMap",
|
||||||
|
"author": "ITDominator",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"support": "",
|
||||||
|
"requests": {}
|
||||||
|
}
|
||||||
32
plugins/code/code_minimap/plugin.py
Normal file
32
plugins/code/code_minimap/plugin.py
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# Python imports
|
||||||
|
|
||||||
|
# Lib imports
|
||||||
|
|
||||||
|
# Application imports
|
||||||
|
from libs.event_factory import Event_Factory, Code_Event_Types
|
||||||
|
|
||||||
|
from plugins.plugin_types import PluginCode
|
||||||
|
|
||||||
|
from .code_minimap import CodeMiniMap
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
code_minimap = CodeMiniMap()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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):
|
||||||
|
code_minimap.set_smini_view(event.view)
|
||||||
|
|
||||||
|
def load(self):
|
||||||
|
editors_container = self.requests_ui_element("editors-container")
|
||||||
|
editors_container.add( code_minimap )
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
...
|
||||||
3
plugins/code/info_bar/__init__.py
Normal file
3
plugins/code/info_bar/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
"""
|
||||||
|
Pligin Module
|
||||||
|
"""
|
||||||
3
plugins/code/info_bar/__main__.py
Normal file
3
plugins/code/info_bar/__main__.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
"""
|
||||||
|
Pligin Package
|
||||||
|
"""
|
||||||
@@ -33,11 +33,7 @@ class InfoBarWidget(Gtk.Box):
|
|||||||
...
|
...
|
||||||
|
|
||||||
def _subscribe_to_events(self):
|
def _subscribe_to_events(self):
|
||||||
event_system.subscribe("set-info-labels", self._set_info_labels)
|
...
|
||||||
event_system.subscribe("set-path-label", self._set_path_label)
|
|
||||||
event_system.subscribe("set-encoding-label", self._set_encoding_label)
|
|
||||||
event_system.subscribe("set-line-char-label", self._set_line_char_label)
|
|
||||||
event_system.subscribe("set-file-type-label", self._set_file_type_label)
|
|
||||||
|
|
||||||
|
|
||||||
def _load_widgets(self):
|
def _load_widgets(self):
|
||||||
7
plugins/code/info_bar/manifest.json
Normal file
7
plugins/code/info_bar/manifest.json
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"name": "Info Bar",
|
||||||
|
"author": "ITDominator",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"support": "",
|
||||||
|
"requests": {}
|
||||||
|
}
|
||||||
32
plugins/code/info_bar/plugin.py
Normal file
32
plugins/code/info_bar/plugin.py
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# Python imports
|
||||||
|
|
||||||
|
# Lib imports
|
||||||
|
|
||||||
|
# Application imports
|
||||||
|
from libs.event_factory import Event_Factory, Code_Event_Types
|
||||||
|
|
||||||
|
from plugins.plugin_types import PluginCode
|
||||||
|
|
||||||
|
from .info_bar_widget import InfoBarWidget
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
info_bar_widget = InfoBarWidget()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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.SetInfoLabelsEvent):
|
||||||
|
info_bar_widget._set_info_labels(*event.info)
|
||||||
|
|
||||||
|
def load(self):
|
||||||
|
header = self.requests_ui_element("header-container")
|
||||||
|
header.add( info_bar_widget )
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
...
|
||||||
@@ -29,6 +29,7 @@ class BaseContainer(Gtk.Box):
|
|||||||
self.ctx.add_class("base-container")
|
self.ctx.add_class("base-container")
|
||||||
|
|
||||||
self.set_orientation(Gtk.Orientation.VERTICAL)
|
self.set_orientation(Gtk.Orientation.VERTICAL)
|
||||||
|
self._update_transparency()
|
||||||
|
|
||||||
def _setup_signals(self):
|
def _setup_signals(self):
|
||||||
...
|
...
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ from gi.repository import Gtk
|
|||||||
from ...widgets.code.code_base import CodeBase
|
from ...widgets.code.code_base import CodeBase
|
||||||
|
|
||||||
from ...widgets.separator_widget import Separator
|
from ...widgets.separator_widget import Separator
|
||||||
from ...widgets.code.mini_view_widget import MiniViewWidget
|
|
||||||
|
|
||||||
from .editors_container import EditorsContainer
|
from .editors_container import EditorsContainer
|
||||||
|
|
||||||
@@ -48,9 +47,11 @@ class CodeContainer(Gtk.Box):
|
|||||||
def _create_editor_widget(self, code_base: CodeBase):
|
def _create_editor_widget(self, code_base: CodeBase):
|
||||||
editors_container = Gtk.Box()
|
editors_container = Gtk.Box()
|
||||||
|
|
||||||
|
widget_registery.expose_object("code-container", self)
|
||||||
|
widget_registery.expose_object("editors-container", editors_container)
|
||||||
|
|
||||||
editors_container.add( Separator("separator_left") )
|
editors_container.add( Separator("separator_left") )
|
||||||
editors_container.add( EditorsContainer(code_base) )
|
editors_container.add( EditorsContainer(code_base) )
|
||||||
editors_container.add( Separator("separator_right") )
|
editors_container.add( Separator("separator_right") )
|
||||||
editors_container.add( code_base.get_mini_view_widget() )
|
|
||||||
|
|
||||||
return editors_container
|
return editors_container
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ class EditorsContainer(Gtk.Paned):
|
|||||||
self.ctx = self.get_style_context()
|
self.ctx = self.get_style_context()
|
||||||
self.ctx.add_class("paned-editors-container")
|
self.ctx.add_class("paned-editors-container")
|
||||||
|
|
||||||
self.set_size_request(-1, 300)
|
|
||||||
self.set_hexpand(True)
|
self.set_hexpand(True)
|
||||||
self.set_vexpand(True)
|
self.set_vexpand(True)
|
||||||
self.set_wide_handle(True)
|
self.set_wide_handle(True)
|
||||||
|
|||||||
@@ -47,6 +47,14 @@ class CommandSystem:
|
|||||||
...
|
...
|
||||||
|
|
||||||
|
|
||||||
|
def set_info_labels(self, data: tuple[str]):
|
||||||
|
event = Event_Factory.create_event(
|
||||||
|
"set_info_labels",
|
||||||
|
info = data
|
||||||
|
)
|
||||||
|
|
||||||
|
self.emit_to("plugins", event)
|
||||||
|
|
||||||
def get_file(self, view: SourceView):
|
def get_file(self, view: SourceView):
|
||||||
event = Event_Factory.create_event(
|
event = Event_Factory.create_event(
|
||||||
"get_file",
|
"get_file",
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ def execute(
|
|||||||
column = iter.get_line_offset()
|
column = iter.get_line_offset()
|
||||||
ftype = file.ftype.get_id() if hasattr(file.ftype, "get_id") else file.ftype
|
ftype = file.ftype.get_id() if hasattr(file.ftype, "get_id") else file.ftype
|
||||||
|
|
||||||
event_system.emit(
|
view.command.set_info_labels(
|
||||||
"set-info-labels",
|
|
||||||
(file.fpath, f"{line}:{column}", ftype, file.encoding)
|
(file.fpath, f"{line}:{column}", ftype, file.encoding)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -37,4 +37,4 @@ class SourceViewDnDMixin:
|
|||||||
|
|
||||||
if not uris: return
|
if not uris: return
|
||||||
|
|
||||||
self.command.exec_with_args("dnd_load_files", (self, uris))
|
self.command.exec_with_args("dnd_load_files", self, uris)
|
||||||
|
|||||||
@@ -116,6 +116,8 @@ class TabsWidget(Gtk.Notebook):
|
|||||||
|
|
||||||
self.handler_unblock(self.switch_page_id)
|
self.handler_unblock(self.switch_page_id)
|
||||||
|
|
||||||
|
break
|
||||||
|
|
||||||
def modified_changed(self, buffer):
|
def modified_changed(self, buffer):
|
||||||
for page_widget in self.get_children():
|
for page_widget in self.get_children():
|
||||||
tab = self.get_tab_label(page_widget)
|
tab = self.get_tab_label(page_widget)
|
||||||
@@ -128,12 +130,16 @@ class TabsWidget(Gtk.Notebook):
|
|||||||
else:
|
else:
|
||||||
ctx.remove_class("file-changed")
|
ctx.remove_class("file-changed")
|
||||||
|
|
||||||
|
break
|
||||||
|
|
||||||
def externally_deleted(self, buffer):
|
def externally_deleted(self, buffer):
|
||||||
for page_widget in self.get_children():
|
for page_widget in self.get_children():
|
||||||
tab = self.get_tab_label(page_widget)
|
tab = self.get_tab_label(page_widget)
|
||||||
if not buffer == tab.file.buffer: continue
|
if not buffer == tab.file.buffer: continue
|
||||||
ctx = tab.label.get_style_context()
|
ctx = tab.label.get_style_context()
|
||||||
ctx.add_class("file-deleted")
|
ctx.add_class("file-deleted")
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
def close_item(self, menu_item, page_widget):
|
def close_item(self, menu_item, page_widget):
|
||||||
tab = self.get_tab_label(page_widget)
|
tab = self.get_tab_label(page_widget)
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ from .register_provider_event import RegisterProviderEvent
|
|||||||
from .register_command_event import RegisterCommandEvent
|
from .register_command_event import RegisterCommandEvent
|
||||||
from .file_externally_modified_event import FileExternallyModifiedEvent
|
from .file_externally_modified_event import FileExternallyModifiedEvent
|
||||||
from .file_externally_deleted_event import FileExternallyDeletedEvent
|
from .file_externally_deleted_event import FileExternallyDeletedEvent
|
||||||
|
from .set_info_labels_event import SetInfoLabelsEvent
|
||||||
|
|
||||||
from .get_new_command_system_event import GetNewCommandSystemEvent
|
from .get_new_command_system_event import GetNewCommandSystemEvent
|
||||||
from .request_completion_event import RequestCompletionEvent
|
from .request_completion_event import RequestCompletionEvent
|
||||||
|
|||||||
15
src/libs/dto/code/set_info_labels_event.py
Normal file
15
src/libs/dto/code/set_info_labels_event.py
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# Python imports
|
||||||
|
from dataclasses import dataclass, field
|
||||||
|
|
||||||
|
# Lib imports
|
||||||
|
import gi
|
||||||
|
from gi.repository import Gio
|
||||||
|
|
||||||
|
# Application imports
|
||||||
|
from .code_event import CodeEvent
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class SetInfoLabelsEvent(CodeEvent):
|
||||||
|
info: tuple[str or Gio.File] = None
|
||||||
Reference in New Issue
Block a user