refactor(editor): remove legacy split-view system and introduce source view lifecycle
* remove toggle_source_view plugin and related command implementations * drop built-in sibling focus/move commands from core * simplify EditorsContainer (Paned → Box) and editor initialization * refactor source view creation to return (scrolled_window, source_view) * add source view lifecycle events (remove/removed) * rename GetNewCommandSystemEvent → CreateCommandSystemEvent * update CommandsController to handle command system creation and cleanup * ensure command systems are removed with their source views * improve focus border handling across sibling chains * clean up imports to use absolute core.* paths * update keybindings to remove deprecated split navigation commands
This commit is contained in:
@@ -34,7 +34,6 @@ class CodeBase:
|
||||
completion_controller = CompletionController()
|
||||
source_views_controller = SourceViewsController()
|
||||
|
||||
# self.controller_manager.register_controller("base", self)
|
||||
self.controller_manager.register_controller("files", files_controller)
|
||||
self.controller_manager.register_controller("commands", commands_controller)
|
||||
self.controller_manager.register_controller("completion", completion_controller)
|
||||
@@ -43,12 +42,13 @@ class CodeBase:
|
||||
self.controller_manager.register_controller("widgets", widget_registery)
|
||||
|
||||
def create_source_view(self):
|
||||
source_view = self.controller_manager["source_views"].create_source_view()
|
||||
scrolled_win, \
|
||||
source_view = self.controller_manager["source_views"].create_source_view()
|
||||
self.controller_manager["completion"].register_completer(
|
||||
source_view.get_completion()
|
||||
)
|
||||
|
||||
return source_view
|
||||
return scrolled_win, source_view
|
||||
|
||||
def first_map_load(self):
|
||||
self.controller_manager["source_views"].first_map_load()
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
# Python imports
|
||||
|
||||
# Lib imports
|
||||
import gi
|
||||
|
||||
gi.require_version('GtkSource', '4')
|
||||
|
||||
from gi.repository import GtkSource
|
||||
|
||||
# Application imports
|
||||
|
||||
|
||||
|
||||
def execute(
|
||||
view: GtkSource.View,
|
||||
*args,
|
||||
**kwargs
|
||||
):
|
||||
logger.debug("Command: Focus Left Sibling")
|
||||
if not view.sibling_left: return
|
||||
view.sibling_left.get_parent().show()
|
||||
view.sibling_left.grab_focus()
|
||||
@@ -1,22 +0,0 @@
|
||||
# Python imports
|
||||
|
||||
# Lib imports
|
||||
import gi
|
||||
|
||||
gi.require_version('GtkSource', '4')
|
||||
|
||||
from gi.repository import GtkSource
|
||||
|
||||
# Application imports
|
||||
|
||||
|
||||
|
||||
def execute(
|
||||
view: GtkSource.View,
|
||||
*args,
|
||||
**kwargs
|
||||
):
|
||||
logger.debug("Command: Focus Right Sibling")
|
||||
if not view.sibling_right: return
|
||||
view.sibling_right.get_parent().show()
|
||||
view.sibling_right.grab_focus()
|
||||
@@ -1,32 +0,0 @@
|
||||
# Python imports
|
||||
|
||||
# Lib imports
|
||||
import gi
|
||||
|
||||
gi.require_version('GtkSource', '4')
|
||||
|
||||
from gi.repository import GtkSource
|
||||
|
||||
# Application imports
|
||||
|
||||
|
||||
|
||||
def execute(
|
||||
view: GtkSource.View,
|
||||
*args,
|
||||
**kwargs
|
||||
):
|
||||
logger.debug("Command: Move To Left Sibling")
|
||||
if not view.sibling_left: return
|
||||
|
||||
buffer = view.get_buffer()
|
||||
popped_file, next_file = view.command.get_swap_file(view)
|
||||
|
||||
view.sibling_left.set_buffer(buffer)
|
||||
view.sibling_left.get_parent().show()
|
||||
view.sibling_left.grab_focus()
|
||||
|
||||
if next_file:
|
||||
view.set_buffer(next_file.buffer)
|
||||
else:
|
||||
view.command.exec("new_file")
|
||||
@@ -1,32 +0,0 @@
|
||||
# Python imports
|
||||
|
||||
# Lib imports
|
||||
import gi
|
||||
|
||||
gi.require_version('GtkSource', '4')
|
||||
|
||||
from gi.repository import GtkSource
|
||||
|
||||
# Application imports
|
||||
|
||||
|
||||
|
||||
def execute(
|
||||
view: GtkSource.View,
|
||||
*args,
|
||||
**kwargs
|
||||
):
|
||||
logger.debug("Command: Move To Right Sibling")
|
||||
if not view.sibling_right: return
|
||||
|
||||
buffer = view.get_buffer()
|
||||
popped_file, next_file = view.command.get_swap_file(view)
|
||||
|
||||
view.sibling_right.set_buffer(buffer)
|
||||
view.sibling_right.get_parent().show()
|
||||
view.sibling_right.grab_focus()
|
||||
|
||||
if next_file:
|
||||
view.set_buffer(next_file.buffer)
|
||||
else:
|
||||
view.command.exec("new_file")
|
||||
@@ -20,9 +20,14 @@ def execute(
|
||||
ctx = view.get_parent().get_style_context()
|
||||
ctx.add_class("source-view-focused")
|
||||
|
||||
if view.sibling_right:
|
||||
ctx = view.sibling_right.get_parent().get_style_context()
|
||||
elif view.sibling_left:
|
||||
ctx = view.sibling_left.get_parent().get_style_context()
|
||||
lview = view.sibling_left
|
||||
while lview is not None:
|
||||
ctx = lview.get_parent().get_style_context()
|
||||
ctx.remove_class("source-view-focused")
|
||||
lview = lview.sibling_left
|
||||
|
||||
ctx.remove_class("source-view-focused")
|
||||
rview = view.sibling_right
|
||||
while rview is not None:
|
||||
ctx = rview.get_parent().get_style_context()
|
||||
ctx.remove_class("source-view-focused")
|
||||
rview = rview.sibling_right
|
||||
|
||||
@@ -17,10 +17,12 @@ class CommandsController(ControllerBase, list):
|
||||
|
||||
|
||||
def _controller_message(self, event: Code_Event_Types.CodeEvent):
|
||||
if isinstance(event, Code_Event_Types.GetNewCommandSystemEvent):
|
||||
event.response = self.get_new_command_system()
|
||||
if isinstance(event, Code_Event_Types.CreateCommandSystemEvent):
|
||||
event.response = self.create_command_system()
|
||||
elif isinstance(event, Code_Event_Types.RemovedSourceViewEvent):
|
||||
self.remove_command_system(event)
|
||||
|
||||
def get_new_command_system(self):
|
||||
def create_command_system(self):
|
||||
command_system = SourceViewCommandSystem()
|
||||
command_system.emit = self.emit
|
||||
command_system.emit_to = self.emit_to
|
||||
@@ -28,3 +30,6 @@ class CommandsController(ControllerBase, list):
|
||||
self.append(command_system)
|
||||
|
||||
return command_system
|
||||
|
||||
def remove_command_system(self, event: Code_Event_Types.RemovedSourceViewEvent):
|
||||
self.remove(event.view.command)
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
# Python imports
|
||||
|
||||
# Lib imports
|
||||
import gi
|
||||
gi.require_version('Gtk', '3.0')
|
||||
from gi.repository import Gtk
|
||||
|
||||
# Application imports
|
||||
from libs.controllers.controller_base import ControllerBase
|
||||
@@ -29,6 +32,8 @@ class SourceViewsController(ControllerBase, list):
|
||||
def _controller_message(self, event: Code_Event_Types.CodeEvent):
|
||||
if isinstance(event, Code_Event_Types.CreateSourceViewEvent):
|
||||
event.response = self.create_source_view(event.state)
|
||||
elif isinstance(event, Code_Event_Types.RemoveSourceViewEvent):
|
||||
self._remove_source_view(event)
|
||||
elif isinstance(event, Code_Event_Types.RemovedFileEvent):
|
||||
self._remove_file(event)
|
||||
elif isinstance(event, Code_Event_Types.RegisterCommandEvent):
|
||||
@@ -86,7 +91,7 @@ class SourceViewsController(ControllerBase, list):
|
||||
)
|
||||
|
||||
def _get_command_system(self):
|
||||
event = Event_Factory.create_event("get_new_command_system")
|
||||
event = Event_Factory.create_event("create_command_system")
|
||||
self.message_to("commands", event)
|
||||
command = event.response
|
||||
|
||||
@@ -103,21 +108,33 @@ class SourceViewsController(ControllerBase, list):
|
||||
|
||||
source_view.set_buffer(event.next_file.buffer)
|
||||
|
||||
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)
|
||||
def _remove_source_view(self, event: Code_Event_Types.RemovedFileEvent):
|
||||
event = Event_Factory.create_event("removed_source_view", view = event.view)
|
||||
self.message(event)
|
||||
|
||||
self.remove(event.view)
|
||||
self.signal_mapper.disconnect_signals(event.view)
|
||||
|
||||
def create_source_view(self, state: SourceViewStates = SourceViewStates.INSERT):
|
||||
scrolled_win: Gtk.ScrolledWindow = Gtk.ScrolledWindow()
|
||||
source_view: SourceView = SourceView(state)
|
||||
source_view.command = self._get_command_system()
|
||||
|
||||
scrolled_win.set_hexpand(True)
|
||||
scrolled_win.set_vexpand(True)
|
||||
|
||||
source_view.command.set_data(source_view)
|
||||
self.signal_mapper.connect_signals(source_view)
|
||||
|
||||
self.append(source_view)
|
||||
scrolled_win.add(source_view)
|
||||
|
||||
event = Event_Factory.create_event(
|
||||
"created_source_view", view = source_view
|
||||
)
|
||||
self.emit(event)
|
||||
|
||||
return source_view
|
||||
return scrolled_win, source_view
|
||||
|
||||
def first_map_load(self):
|
||||
for source_view in self:
|
||||
|
||||
Reference in New Issue
Block a user