Added more commands to code; refactored container classes; general cleanup
This commit is contained in:
@@ -16,8 +16,6 @@ class BaseContainer(Gtk.Box):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(BaseContainer, self).__init__()
|
super(BaseContainer, self).__init__()
|
||||||
|
|
||||||
self.ctx = self.get_style_context()
|
|
||||||
|
|
||||||
self._setup_styling()
|
self._setup_styling()
|
||||||
self._setup_signals()
|
self._setup_signals()
|
||||||
self._subscribe_to_events()
|
self._subscribe_to_events()
|
||||||
@@ -27,9 +25,11 @@ class BaseContainer(Gtk.Box):
|
|||||||
|
|
||||||
|
|
||||||
def _setup_styling(self):
|
def _setup_styling(self):
|
||||||
self.set_orientation(Gtk.Orientation.VERTICAL)
|
self.ctx = self.get_style_context()
|
||||||
self.ctx.add_class("base-container")
|
self.ctx.add_class("base-container")
|
||||||
|
|
||||||
|
self.set_orientation(Gtk.Orientation.VERTICAL)
|
||||||
|
|
||||||
def _setup_signals(self):
|
def _setup_signals(self):
|
||||||
...
|
...
|
||||||
|
|
||||||
@@ -38,9 +38,9 @@ class BaseContainer(Gtk.Box):
|
|||||||
event_system.subscribe("remove-transparency", self._remove_transparency)
|
event_system.subscribe("remove-transparency", self._remove_transparency)
|
||||||
|
|
||||||
def _load_widgets(self):
|
def _load_widgets(self):
|
||||||
self.add(HeaderContainer())
|
self.add( HeaderContainer() )
|
||||||
self.add(BodyContainer())
|
self.add( BodyContainer() )
|
||||||
self.add(FooterContainer())
|
self.add( FooterContainer() )
|
||||||
|
|
||||||
def _update_transparency(self):
|
def _update_transparency(self):
|
||||||
self.ctx.add_class(f"mw_transparency_{settings.theming.transparency}")
|
self.ctx.add_class(f"mw_transparency_{settings.theming.transparency}")
|
||||||
|
|||||||
@@ -16,8 +16,6 @@ class BodyContainer(Gtk.Box):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(BodyContainer, self).__init__()
|
super(BodyContainer, self).__init__()
|
||||||
|
|
||||||
self.ctx = self.get_style_context()
|
|
||||||
|
|
||||||
self._setup_styling()
|
self._setup_styling()
|
||||||
self._setup_signals()
|
self._setup_signals()
|
||||||
self._subscribe_to_events()
|
self._subscribe_to_events()
|
||||||
@@ -27,8 +25,10 @@ class BodyContainer(Gtk.Box):
|
|||||||
|
|
||||||
|
|
||||||
def _setup_styling(self):
|
def _setup_styling(self):
|
||||||
self.set_orientation(Gtk.Orientation.HORIZONTAL)
|
self.ctx = self.get_style_context()
|
||||||
self.ctx.add_class("body-container")
|
self.ctx.add_class("body-container")
|
||||||
|
|
||||||
|
self.set_orientation(Gtk.Orientation.HORIZONTAL)
|
||||||
self.set_homogeneous(True)
|
self.set_homogeneous(True)
|
||||||
|
|
||||||
def _setup_signals(self):
|
def _setup_signals(self):
|
||||||
@@ -37,8 +37,7 @@ class BodyContainer(Gtk.Box):
|
|||||||
def _subscribe_to_events(self):
|
def _subscribe_to_events(self):
|
||||||
...
|
...
|
||||||
|
|
||||||
|
|
||||||
def _load_widgets(self):
|
def _load_widgets(self):
|
||||||
self.add(LeftContainer())
|
self.add( LeftContainer() )
|
||||||
self.add(CenterContainer())
|
self.add( CenterContainer() )
|
||||||
self.add(RightContainer())
|
self.add( RightContainer() )
|
||||||
@@ -25,14 +25,13 @@ class CenterContainer(Gtk.Box):
|
|||||||
|
|
||||||
|
|
||||||
def _setup_styling(self):
|
def _setup_styling(self):
|
||||||
self.set_orientation(Gtk.Orientation.VERTICAL)
|
self.ctx = self.get_style_context()
|
||||||
|
self.ctx.add_class("center-container")
|
||||||
|
|
||||||
|
self.set_orientation(Gtk.Orientation.VERTICAL)
|
||||||
self.set_hexpand(True)
|
self.set_hexpand(True)
|
||||||
self.set_vexpand(True)
|
self.set_vexpand(True)
|
||||||
|
|
||||||
ctx = self.get_style_context()
|
|
||||||
ctx.add_class("center-container")
|
|
||||||
|
|
||||||
def _setup_signals(self):
|
def _setup_signals(self):
|
||||||
...
|
...
|
||||||
|
|
||||||
@@ -41,7 +40,7 @@ class CenterContainer(Gtk.Box):
|
|||||||
|
|
||||||
def _load_widgets(self):
|
def _load_widgets(self):
|
||||||
glade_box = self._builder.get_object("glade_box")
|
glade_box = self._builder.get_object("glade_box")
|
||||||
button = Gtk.Button(label = "Click Me!")
|
button = Gtk.Button(label = "Click Me!")
|
||||||
|
|
||||||
button.connect("clicked", self._hello_world)
|
button.connect("clicked", self._hello_world)
|
||||||
|
|
||||||
|
|||||||
3
src/core/containers/code/__init__.py
Normal file
3
src/core/containers/code/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
"""
|
||||||
|
Containers Package
|
||||||
|
"""
|
||||||
40
src/core/containers/code/editors_container.py
Normal file
40
src/core/containers/code/editors_container.py
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# Python imports
|
||||||
|
|
||||||
|
# Lib imports
|
||||||
|
import gi
|
||||||
|
gi.require_version('Gtk', '3.0')
|
||||||
|
from gi.repository import Gtk
|
||||||
|
|
||||||
|
# Application imports
|
||||||
|
from ...widgets.separator_widget import Separator
|
||||||
|
from ...widgets.code.miniview_widget import MiniViewWidget
|
||||||
|
from .paned_editors_container import PanedEditorsContainer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class EditorsContainer(Gtk.Box):
|
||||||
|
def __init__(self):
|
||||||
|
super(EditorsContainer, 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):
|
||||||
|
self.add( Separator("separator_left") )
|
||||||
|
self.add( PanedEditorsContainer() )
|
||||||
|
self.add( Separator("separator_right") )
|
||||||
|
self.add( MiniViewWidget() )
|
||||||
75
src/core/containers/code/paned_editors_container.py
Normal file
75
src/core/containers/code/paned_editors_container.py
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
# Python imports
|
||||||
|
|
||||||
|
# Lib imports
|
||||||
|
import gi
|
||||||
|
gi.require_version('Gtk', '3.0')
|
||||||
|
from gi.repository import Gtk
|
||||||
|
from gi.repository import GLib
|
||||||
|
|
||||||
|
# Application imports
|
||||||
|
from ...widgets.code.view import SourceView
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class PanedEditorsContainer(Gtk.Paned):
|
||||||
|
def __init__(self):
|
||||||
|
super(PanedEditorsContainer, self).__init__()
|
||||||
|
|
||||||
|
self._setup_styling()
|
||||||
|
self._setup_signals()
|
||||||
|
self._subscribe_to_events()
|
||||||
|
self._load_widgets()
|
||||||
|
|
||||||
|
self.show()
|
||||||
|
|
||||||
|
|
||||||
|
def _setup_styling(self):
|
||||||
|
self.ctx = self.get_style_context()
|
||||||
|
self.ctx.add_class("paned-editors-container")
|
||||||
|
|
||||||
|
self.set_hexpand(True)
|
||||||
|
self.set_vexpand(True)
|
||||||
|
# self.set_homogeneous(True)
|
||||||
|
self.set_wide_handle(True)
|
||||||
|
|
||||||
|
def _setup_signals(self):
|
||||||
|
self.map_id = self.connect("map", self._init_map)
|
||||||
|
|
||||||
|
def _subscribe_to_events(self):
|
||||||
|
...
|
||||||
|
|
||||||
|
def _load_widgets(self):
|
||||||
|
scrolled_win1 = Gtk.ScrolledWindow()
|
||||||
|
scrolled_win2 = Gtk.ScrolledWindow()
|
||||||
|
source_view1 = SourceView()
|
||||||
|
source_view2 = SourceView()
|
||||||
|
|
||||||
|
source_view1.sibling_right = source_view2
|
||||||
|
source_view2.sibling_left = source_view1
|
||||||
|
|
||||||
|
scrolled_win1.add( source_view1 )
|
||||||
|
scrolled_win2.add( source_view2 )
|
||||||
|
|
||||||
|
self.add1(scrolled_win1)
|
||||||
|
self.add2(scrolled_win2)
|
||||||
|
|
||||||
|
scrolled_win1.show_all()
|
||||||
|
scrolled_win2.show_all()
|
||||||
|
|
||||||
|
def _init_map(self, view):
|
||||||
|
def _first_show_init():
|
||||||
|
self.disconnect(self.map_id)
|
||||||
|
del self.map_id
|
||||||
|
|
||||||
|
self._handle_first_show()
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
# GLib.timeout_add(1000, _first_show_init)
|
||||||
|
GLib.idle_add(_first_show_init)
|
||||||
|
|
||||||
|
def _handle_first_show(self):
|
||||||
|
self.set_position(
|
||||||
|
self.get_allocated_width() / 2
|
||||||
|
)
|
||||||
|
|
||||||
@@ -13,8 +13,6 @@ class FooterContainer(Gtk.Box):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(FooterContainer, self).__init__()
|
super(FooterContainer, self).__init__()
|
||||||
|
|
||||||
self.ctx = self.get_style_context()
|
|
||||||
|
|
||||||
self._setup_styling()
|
self._setup_styling()
|
||||||
self._setup_signals()
|
self._setup_signals()
|
||||||
self._subscribe_to_events()
|
self._subscribe_to_events()
|
||||||
@@ -24,12 +22,12 @@ class FooterContainer(Gtk.Box):
|
|||||||
|
|
||||||
|
|
||||||
def _setup_styling(self):
|
def _setup_styling(self):
|
||||||
self.set_orientation(Gtk.Orientation.HORIZONTAL)
|
self.ctx = self.get_style_context()
|
||||||
|
|
||||||
self.set_hexpand(True)
|
|
||||||
|
|
||||||
self.ctx.add_class("footer-container")
|
self.ctx.add_class("footer-container")
|
||||||
|
|
||||||
|
self.set_orientation(Gtk.Orientation.HORIZONTAL)
|
||||||
|
self.set_hexpand(True)
|
||||||
|
|
||||||
def _setup_signals(self):
|
def _setup_signals(self):
|
||||||
...
|
...
|
||||||
|
|
||||||
|
|||||||
@@ -15,8 +15,6 @@ class HeaderContainer(Gtk.Box):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(HeaderContainer, self).__init__()
|
super(HeaderContainer, self).__init__()
|
||||||
|
|
||||||
self.ctx = self.get_style_context()
|
|
||||||
|
|
||||||
self._setup_styling()
|
self._setup_styling()
|
||||||
self._setup_signals()
|
self._setup_signals()
|
||||||
self._subscribe_to_events()
|
self._subscribe_to_events()
|
||||||
@@ -26,19 +24,18 @@ class HeaderContainer(Gtk.Box):
|
|||||||
|
|
||||||
|
|
||||||
def _setup_styling(self):
|
def _setup_styling(self):
|
||||||
self.set_orientation(Gtk.Orientation.HORIZONTAL)
|
self.ctx = self.get_style_context()
|
||||||
|
|
||||||
self.set_hexpand(True)
|
|
||||||
|
|
||||||
self.ctx.add_class("header-container")
|
self.ctx.add_class("header-container")
|
||||||
|
|
||||||
|
self.set_orientation(Gtk.Orientation.HORIZONTAL)
|
||||||
|
self.set_hexpand(True)
|
||||||
|
|
||||||
def _setup_signals(self):
|
def _setup_signals(self):
|
||||||
...
|
...
|
||||||
|
|
||||||
def _subscribe_to_events(self):
|
def _subscribe_to_events(self):
|
||||||
event_system.subscribe("tggl-top-main-menubar", self.tggl_top_main_menubar)
|
event_system.subscribe("tggl-top-main-menubar", self.tggl_top_main_menubar)
|
||||||
|
|
||||||
|
|
||||||
def _load_widgets(self):
|
def _load_widgets(self):
|
||||||
button = Gtk.Button(label = "Interactive Debug")
|
button = Gtk.Button(label = "Interactive Debug")
|
||||||
button.connect("clicked", self._interactive_debug)
|
button.connect("clicked", self._interactive_debug)
|
||||||
|
|||||||
@@ -22,13 +22,12 @@ class LeftContainer(Gtk.Box):
|
|||||||
|
|
||||||
|
|
||||||
def _setup_styling(self):
|
def _setup_styling(self):
|
||||||
|
self.ctx = self.get_style_context()
|
||||||
|
self.ctx.add_class("left-container")
|
||||||
|
|
||||||
self.set_orientation(Gtk.Orientation.VERTICAL)
|
self.set_orientation(Gtk.Orientation.VERTICAL)
|
||||||
|
|
||||||
self.set_vexpand(True)
|
self.set_vexpand(True)
|
||||||
|
|
||||||
ctx = self.get_style_context()
|
|
||||||
ctx.add_class("left-container")
|
|
||||||
|
|
||||||
def _setup_signals(self):
|
def _setup_signals(self):
|
||||||
...
|
...
|
||||||
|
|
||||||
|
|||||||
@@ -23,13 +23,12 @@ class RightContainer(Gtk.Box):
|
|||||||
|
|
||||||
|
|
||||||
def _setup_styling(self):
|
def _setup_styling(self):
|
||||||
|
self.ctx = self.get_style_context()
|
||||||
|
self.ctx.add_class("right-container")
|
||||||
|
|
||||||
self.set_orientation(Gtk.Orientation.VERTICAL)
|
self.set_orientation(Gtk.Orientation.VERTICAL)
|
||||||
|
|
||||||
self.set_vexpand(True)
|
self.set_vexpand(True)
|
||||||
|
|
||||||
ctx = self.get_style_context()
|
|
||||||
ctx.add_class("right-container")
|
|
||||||
|
|
||||||
def _setup_signals(self):
|
def _setup_signals(self):
|
||||||
...
|
...
|
||||||
|
|
||||||
|
|||||||
@@ -12,8 +12,7 @@ from gi.repository import GtkSource
|
|||||||
|
|
||||||
|
|
||||||
def execute(
|
def execute(
|
||||||
editor: GtkSource.View = None,
|
editor: GtkSource.View = None
|
||||||
buffer: GtkSource.Buffer= None
|
|
||||||
):
|
):
|
||||||
logger.debug("Close File Command")
|
logger.debug("Close File Command")
|
||||||
file = editor.files.new()
|
file = editor.files.new()
|
||||||
|
|||||||
19
src/core/widgets/code/commands/focus_left_sibling.py
Normal file
19
src/core/widgets/code/commands/focus_left_sibling.py
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# Python imports
|
||||||
|
|
||||||
|
# Lib imports
|
||||||
|
import gi
|
||||||
|
|
||||||
|
gi.require_version('GtkSource', '4')
|
||||||
|
|
||||||
|
from gi.repository import GtkSource
|
||||||
|
|
||||||
|
# Application imports
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def execute(
|
||||||
|
editor: GtkSource.View = None
|
||||||
|
):
|
||||||
|
logger.debug("Focus Left Sibling Command")
|
||||||
|
if not editor.sibling_left: return
|
||||||
|
editor.sibling_left.grab_focus()
|
||||||
19
src/core/widgets/code/commands/focus_right_sibling.py
Normal file
19
src/core/widgets/code/commands/focus_right_sibling.py
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# Python imports
|
||||||
|
|
||||||
|
# Lib imports
|
||||||
|
import gi
|
||||||
|
|
||||||
|
gi.require_version('GtkSource', '4')
|
||||||
|
|
||||||
|
from gi.repository import GtkSource
|
||||||
|
|
||||||
|
# Application imports
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def execute(
|
||||||
|
editor: GtkSource.View = None
|
||||||
|
):
|
||||||
|
logger.debug("Focus Right Sibling Command")
|
||||||
|
if not editor.sibling_right: return
|
||||||
|
editor.sibling_right.grab_focus()
|
||||||
@@ -12,8 +12,7 @@ from gi.repository import GtkSource
|
|||||||
|
|
||||||
|
|
||||||
def execute(
|
def execute(
|
||||||
editor: GtkSource.View = None,
|
editor: GtkSource.View = None
|
||||||
buffer: GtkSource.Buffer= None
|
|
||||||
):
|
):
|
||||||
logger.debug("Line Up Command")
|
logger.debug("Line Up Command")
|
||||||
editor.emit("move-lines", True)
|
editor.emit("move-lines", True)
|
||||||
|
|||||||
@@ -12,8 +12,7 @@ from gi.repository import GtkSource
|
|||||||
|
|
||||||
|
|
||||||
def execute(
|
def execute(
|
||||||
editor: GtkSource.View = None,
|
editor: GtkSource.View = None
|
||||||
buffer: GtkSource.Buffer= None
|
|
||||||
):
|
):
|
||||||
logger.debug("Line Up Command")
|
logger.debug("Line Up Command")
|
||||||
editor.emit("move-lines", False)
|
editor.emit("move-lines", False)
|
||||||
|
|||||||
26
src/core/widgets/code/commands/move_to_left_sibling.py
Normal file
26
src/core/widgets/code/commands/move_to_left_sibling.py
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# Python imports
|
||||||
|
|
||||||
|
# Lib imports
|
||||||
|
import gi
|
||||||
|
|
||||||
|
gi.require_version('GtkSource', '4')
|
||||||
|
|
||||||
|
from gi.repository import GtkSource
|
||||||
|
|
||||||
|
# Application imports
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def execute(
|
||||||
|
editor: GtkSource.View = None
|
||||||
|
):
|
||||||
|
logger.debug("Move To Left Sibling Command")
|
||||||
|
if not editor.sibling_left: return
|
||||||
|
|
||||||
|
buffer = editor.get_buffer()
|
||||||
|
sibling_file, popped_file = editor.files.pop_file(buffer)
|
||||||
|
|
||||||
|
editor.set_buffer(sibling_file.buffer)
|
||||||
|
editor.sibling_left.set_buffer(buffer)
|
||||||
|
editor.sibling_left.files.append(popped_file)
|
||||||
|
editor.sibling_left.grab_focus()
|
||||||
27
src/core/widgets/code/commands/move_to_right_sibling.py
Normal file
27
src/core/widgets/code/commands/move_to_right_sibling.py
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
# Python imports
|
||||||
|
|
||||||
|
# Lib imports
|
||||||
|
import gi
|
||||||
|
|
||||||
|
gi.require_version('GtkSource', '4')
|
||||||
|
|
||||||
|
from gi.repository import GtkSource
|
||||||
|
|
||||||
|
# Application imports
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def execute(
|
||||||
|
editor: GtkSource.View = None
|
||||||
|
):
|
||||||
|
logger.debug("Move To Right Sibling Command")
|
||||||
|
if not editor.sibling_right: return
|
||||||
|
|
||||||
|
buffer = editor.get_buffer()
|
||||||
|
sibling_file, popped_file = editor.files.pop_file(buffer)
|
||||||
|
|
||||||
|
editor.set_buffer(sibling_file.buffer)
|
||||||
|
editor.sibling_right.set_buffer(buffer)
|
||||||
|
editor.sibling_right.files.append(popped_file)
|
||||||
|
editor.sibling_right.grab_focus()
|
||||||
|
|
||||||
@@ -12,8 +12,7 @@ from gi.repository import GtkSource
|
|||||||
|
|
||||||
|
|
||||||
def execute(
|
def execute(
|
||||||
editor: GtkSource.View = None,
|
editor: GtkSource.View = None
|
||||||
buffer: GtkSource.Buffer= None
|
|
||||||
):
|
):
|
||||||
logger.debug("New File Command")
|
logger.debug("New File Command")
|
||||||
file = editor.files.new()
|
file = editor.files.new()
|
||||||
|
|||||||
@@ -12,17 +12,16 @@ from gi.repository import GtkSource
|
|||||||
|
|
||||||
|
|
||||||
def execute(
|
def execute(
|
||||||
editor: GtkSource.View = None,
|
editor: GtkSource.View = None
|
||||||
buffer: GtkSource.Buffer= None
|
|
||||||
):
|
):
|
||||||
logger.debug("Open File(s) Command")
|
logger.debug("Open File(s) Command")
|
||||||
gfiles = event_system.emit_and_await("open_files")
|
gfiles = event_system.emit_and_await("open-files")
|
||||||
if not gfiles: return
|
if not gfiles: return
|
||||||
|
|
||||||
size = len(gfiles)
|
size = len(gfiles)
|
||||||
for i, gfile in enumerate(gfiles):
|
for i, gfile in enumerate(gfiles):
|
||||||
file = editor.files.new()
|
file = editor.files.new()
|
||||||
file.set_path(gfile)
|
file.load_path(gfile)
|
||||||
|
|
||||||
language = editor.language_manager \
|
language = editor.language_manager \
|
||||||
.guess_language(file.fname, None)
|
.guess_language(file.fname, None)
|
||||||
|
|||||||
30
src/core/widgets/code/commands/save_file.py
Normal file
30
src/core/widgets/code/commands/save_file.py
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# Python imports
|
||||||
|
|
||||||
|
# Lib imports
|
||||||
|
import gi
|
||||||
|
|
||||||
|
gi.require_version('GtkSource', '4')
|
||||||
|
|
||||||
|
from gi.repository import GtkSource
|
||||||
|
|
||||||
|
# Application imports
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def execute(
|
||||||
|
editor: GtkSource.View = None
|
||||||
|
):
|
||||||
|
logger.debug("Save File Command")
|
||||||
|
buffer = editor.get_buffer()
|
||||||
|
file = editor.files.get_file(buffer)
|
||||||
|
|
||||||
|
if file.ftype == "buffer":
|
||||||
|
file.save_as()
|
||||||
|
language = editor.language_manager \
|
||||||
|
.guess_language(file.fname, None)
|
||||||
|
file.ftype = language
|
||||||
|
file.buffer.set_language(language)
|
||||||
|
return
|
||||||
|
|
||||||
|
file.save()
|
||||||
|
|
||||||
26
src/core/widgets/code/commands/save_file_as.py
Normal file
26
src/core/widgets/code/commands/save_file_as.py
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# Python imports
|
||||||
|
|
||||||
|
# Lib imports
|
||||||
|
import gi
|
||||||
|
|
||||||
|
gi.require_version('GtkSource', '4')
|
||||||
|
|
||||||
|
from gi.repository import GtkSource
|
||||||
|
|
||||||
|
# Application imports
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def execute(
|
||||||
|
editor: GtkSource.View = None
|
||||||
|
):
|
||||||
|
logger.info("Save File As Command")
|
||||||
|
buffer = editor.get_buffer()
|
||||||
|
file = editor.files.get_file(buffer)
|
||||||
|
|
||||||
|
file.save_as()
|
||||||
|
|
||||||
|
language = editor.language_manager \
|
||||||
|
.guess_language(file.fname, None)
|
||||||
|
file.ftype = language
|
||||||
|
file.buffer.set_language(language)
|
||||||
@@ -12,7 +12,7 @@ from gi.repository import GtkSource
|
|||||||
|
|
||||||
|
|
||||||
def execute(
|
def execute(
|
||||||
editor: GtkSource.View = None,
|
editor: GtkSource.View = None
|
||||||
buffer: GtkSource.Buffer= None
|
|
||||||
):
|
):
|
||||||
logger.debug("Show Completion Command")
|
logger.debug("Show Completion Command")
|
||||||
|
editor.completion.request_completion()
|
||||||
|
|||||||
@@ -5,30 +5,33 @@ import gi
|
|||||||
from gi.repository import GLib
|
from gi.repository import GLib
|
||||||
|
|
||||||
# Application imports
|
# Application imports
|
||||||
from .custom_completion_providers.lsp_completion_provider import LSPCompletionProvider
|
from .completion_providers.example_completion_provider import ExampleCompletionProvider
|
||||||
|
from .completion_providers.lsp_completion_provider import LSPCompletionProvider
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class CompletionManager():
|
class CompletionManager():
|
||||||
def __init__(self, completer):
|
def __init__(self):
|
||||||
super(CompletionManager, self).__init__()
|
super(CompletionManager, self).__init__()
|
||||||
|
|
||||||
self._completor = completer
|
|
||||||
self._lsp_provider = LSPCompletionProvider()
|
self._lsp_provider = LSPCompletionProvider()
|
||||||
self._timeout_id = None
|
self._timeout_id = None
|
||||||
|
|
||||||
|
|
||||||
|
def set_completer(self, completer):
|
||||||
|
self._completor = completer
|
||||||
|
|
||||||
def request_completion(self):
|
def request_completion(self):
|
||||||
if self._timeout_id:
|
if self._timeout_id:
|
||||||
GLib.source_remove(self._timeout_id)
|
GLib.source_remove(self._timeout_id)
|
||||||
|
|
||||||
self._timeout_id = GLib.timeout_add(
|
self._timeout_id = GLib.timeout_add(
|
||||||
1000,
|
800,
|
||||||
self._process_request_completion
|
self._process_request_completion
|
||||||
)
|
)
|
||||||
|
|
||||||
def _process_request_completion(self):
|
def _process_request_completion(self):
|
||||||
print('hello')
|
self._start_completion()
|
||||||
|
|
||||||
self._timeout_id = None
|
self._timeout_id = None
|
||||||
return False
|
return False
|
||||||
@@ -51,11 +54,12 @@ class CompletionManager():
|
|||||||
"""
|
"""
|
||||||
Note: Use IF NO providers have been added to completion...
|
Note: Use IF NO providers have been added to completion...
|
||||||
"""
|
"""
|
||||||
self._completion.start(
|
self._completor.start(
|
||||||
[
|
[
|
||||||
|
ExampleCompletionProvider(),
|
||||||
self._lsp_provider
|
self._lsp_provider
|
||||||
],
|
],
|
||||||
self._completion.create_context()
|
self._completor.create_context()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -19,14 +19,14 @@ class ExampleCompletionProvider(GObject.GObject, GtkSource.CompletionProvider):
|
|||||||
This is a custom Completion Example Provider.
|
This is a custom Completion Example Provider.
|
||||||
# NOTE: used information from here --> https://warroom.rsmus.com/do-that-auto-complete/
|
# NOTE: used information from here --> https://warroom.rsmus.com/do-that-auto-complete/
|
||||||
"""
|
"""
|
||||||
__gtype_name__ = 'CustomProvider'
|
__gtype_name__ = 'ExampleCompletionProvider'
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
GObject.Object.__init__(self)
|
GObject.Object.__init__(self)
|
||||||
|
|
||||||
def do_get_name(self):
|
def do_get_name(self):
|
||||||
""" Returns: a new string containing the name of the provider. """
|
""" Returns: a new string containing the name of the provider. """
|
||||||
return _('ExampleProvider')
|
return 'Example Completion Provider'
|
||||||
|
|
||||||
def do_match(self, context):
|
def do_match(self, context):
|
||||||
""" Get whether the provider match the context of completion detailed in context. """
|
""" Get whether the provider match the context of completion detailed in context. """
|
||||||
@@ -34,6 +34,16 @@ class ExampleCompletionProvider(GObject.GObject, GtkSource.CompletionProvider):
|
|||||||
# TODO: Fix me
|
# TODO: Fix me
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def do_get_priority(self):
|
||||||
|
""" Determin position in result list along other providor results. """
|
||||||
|
return 1
|
||||||
|
|
||||||
|
# def do_get_activation(self):
|
||||||
|
# """ The context for when a provider will show results """
|
||||||
|
# return GtkSource.CompletionActivation.NONE
|
||||||
|
# return GtkSource.CompletionActivation.USER_REQUESTED
|
||||||
|
# return GtkSource.CompletionActivation.INTERACTIVE
|
||||||
|
|
||||||
def do_populate(self, context):
|
def do_populate(self, context):
|
||||||
"""
|
"""
|
||||||
In this instance, it will do 2 things:
|
In this instance, it will do 2 things:
|
||||||
@@ -46,7 +56,7 @@ class ExampleCompletionProvider(GObject.GObject, GtkSource.CompletionProvider):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
proposals = [
|
proposals = [
|
||||||
# GtkSource.CompletionItem(label='Hello World!', text = 'Hello World!', icon = None, info = None) # NOTE: Always proposed...
|
GtkSource.CompletionItem(label='Hello World!', text = 'Hello World!', icon = None, info = None) # NOTE: Always proposed...
|
||||||
]
|
]
|
||||||
|
|
||||||
# Gtk Versions differ on get_iter responses...
|
# Gtk Versions differ on get_iter responses...
|
||||||
@@ -28,6 +28,9 @@ class LSPCompletionProvider(GObject.Object, GtkSource.CompletionProvider):
|
|||||||
self.lsp_data = None
|
self.lsp_data = None
|
||||||
|
|
||||||
|
|
||||||
|
def pre_populate(self, context):
|
||||||
|
...
|
||||||
|
|
||||||
def do_get_name(self):
|
def do_get_name(self):
|
||||||
return "LSP Code Completion"
|
return "LSP Code Completion"
|
||||||
|
|
||||||
@@ -35,19 +38,36 @@ class LSPCompletionProvider(GObject.Object, GtkSource.CompletionProvider):
|
|||||||
return context.get_iter()[1] if isinstance(context.get_iter(), tuple) else context.get_iter()
|
return context.get_iter()[1] if isinstance(context.get_iter(), tuple) else context.get_iter()
|
||||||
|
|
||||||
def do_match(self, context):
|
def do_match(self, context):
|
||||||
|
iter = self.get_iter_correctly(context)
|
||||||
|
iter.backward_char()
|
||||||
|
|
||||||
|
buffer = iter.get_buffer()
|
||||||
|
if buffer.get_context_classes_at_iter(iter) != ['no-spell-check']:
|
||||||
|
return False
|
||||||
|
|
||||||
|
ch = iter.get_char()
|
||||||
|
# NOTE: Look to re-add or apply supprting logic to use spaces
|
||||||
|
# As is it slows down the editor in certain contexts...
|
||||||
|
# if not (ch in ('_', '.', ' ') or ch.isalnum()):
|
||||||
|
if not (ch in ('_', '.') or ch.isalnum()):
|
||||||
|
return False
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def do_get_priority(self):
|
def do_get_priority(self):
|
||||||
return 1
|
return 5
|
||||||
|
|
||||||
def do_get_activation(self):
|
|
||||||
return GtkSource.CompletionActivation.USER_REQUESTED
|
|
||||||
|
|
||||||
|
|
||||||
def do_populate(self, context, items = []):
|
def do_populate(self, context, items = []):
|
||||||
self.lsp_data
|
# self.lsp_data
|
||||||
|
proposals = []
|
||||||
|
|
||||||
|
comp_item = GtkSource.CompletionItem.new()
|
||||||
|
comp_item.set_label("LSP Class")
|
||||||
|
comp_item.set_text("LSP Code")
|
||||||
|
# comp_item.set_icon(self.get_icon_for_type(completion.type))
|
||||||
|
comp_item.set_info("A test LSP completion item...")
|
||||||
|
|
||||||
|
context.add_proposals(self, [comp_item], True)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -93,15 +93,14 @@ class KeyMapper:
|
|||||||
self.states = copy.deepcopy(self._map)
|
self.states = copy.deepcopy(self._map)
|
||||||
|
|
||||||
def _key_press_event(self, eve):
|
def _key_press_event(self, eve):
|
||||||
keyname = Gdk.keyval_name(eve.keyval)
|
keyname = Gdk.keyval_name(eve.keyval).lower()
|
||||||
print(keyname)
|
|
||||||
|
|
||||||
self._set_key_state(eve)
|
self._set_key_state(eve)
|
||||||
if keyname in self.states[self.state].held:
|
if keyname in self.states[self.state].held:
|
||||||
return self.states[self.state].held[keyname]
|
return self.states[self.state].held[keyname]
|
||||||
|
|
||||||
def _key_release_event(self, eve):
|
def _key_release_event(self, eve):
|
||||||
keyname = Gdk.keyval_name(eve.keyval)
|
keyname = Gdk.keyval_name(eve.keyval).lower()
|
||||||
|
|
||||||
self._set_key_state(eve)
|
self._set_key_state(eve)
|
||||||
if keyname in self.states[self.state].released:
|
if keyname in self.states[self.state].released:
|
||||||
|
|||||||
40
src/core/widgets/code/miniview_widget.py
Normal file
40
src/core/widgets/code/miniview_widget.py
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# Python imports
|
||||||
|
|
||||||
|
# Lib imports
|
||||||
|
import gi
|
||||||
|
gi.require_version('GtkSource', '4')
|
||||||
|
from gi.repository.GtkSource import Map
|
||||||
|
|
||||||
|
|
||||||
|
# Application imports
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class MiniViewWidget(Map):
|
||||||
|
def __init__(self):
|
||||||
|
super(MiniViewWidget, self).__init__()
|
||||||
|
|
||||||
|
self._setup_styling()
|
||||||
|
self._setup_signals()
|
||||||
|
self._subscribe_to_events()
|
||||||
|
self._load_widgets()
|
||||||
|
|
||||||
|
self.show_all()
|
||||||
|
|
||||||
|
|
||||||
|
def _setup_styling(self):
|
||||||
|
self.set_hexpand(False)
|
||||||
|
ctx = self.get_style_context()
|
||||||
|
ctx.add_class("mini-view")
|
||||||
|
|
||||||
|
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_smini_view(self, source_view):
|
||||||
|
self.set_view(source_view)
|
||||||
@@ -30,16 +30,20 @@ class SourceFile(GtkSource.File):
|
|||||||
self._set_signals()
|
self._set_signals()
|
||||||
|
|
||||||
|
|
||||||
def set_path(self, gfile: Gio.File.new_for_path):
|
def load_path(self, gfile: Gio.File):
|
||||||
if not gfile: return
|
if not gfile: return
|
||||||
|
|
||||||
|
self.set_path(gfile)
|
||||||
|
data = gfile.load_bytes()[0].get_data().decode("UTF-8")
|
||||||
|
|
||||||
|
self.buffer.insert_at_cursor(data)
|
||||||
|
|
||||||
|
def set_path(self, gfile: Gio.File):
|
||||||
|
if not gfile: return
|
||||||
self.set_location(gfile)
|
self.set_location(gfile)
|
||||||
|
|
||||||
self.fpath = gfile.get_parent().get_path(),
|
self.fpath = gfile.get_parent().get_path(),
|
||||||
self.fname = gfile.get_basename()
|
self.fname = gfile.get_basename()
|
||||||
data = gfile.load_bytes()[0].get_data().decode("UTF-8")
|
|
||||||
|
|
||||||
self.buffer.insert_at_cursor(data)
|
|
||||||
|
|
||||||
def _set_signals(self):
|
def _set_signals(self):
|
||||||
self.buffer.set_signals(
|
self.buffer.set_signals(
|
||||||
@@ -70,8 +74,33 @@ class SourceFile(GtkSource.File):
|
|||||||
# logger.info("SourceFile._mark_set")
|
# logger.info("SourceFile._mark_set")
|
||||||
...
|
...
|
||||||
|
|
||||||
def _modified_changed(self,buffer: SourceBuffer):
|
def _modified_changed(self, buffer: SourceBuffer):
|
||||||
logger.info("SourceFile._modified_changed")
|
logger.info("SourceFile._modified_changed")
|
||||||
|
|
||||||
|
def _write_file(self, gfile: Gio.File):
|
||||||
|
if not gfile: return
|
||||||
|
|
||||||
|
with open(gfile.get_path(), 'w') as f:
|
||||||
|
start_itr = self.buffer.get_start_iter()
|
||||||
|
end_itr = self.buffer.get_end_iter()
|
||||||
|
text = self.buffer.get_text(start_itr, end_itr, True)
|
||||||
|
|
||||||
|
f.write(text)
|
||||||
|
|
||||||
|
return gfile
|
||||||
|
|
||||||
|
def save(self):
|
||||||
|
self._write_file( self.get_location() )
|
||||||
|
|
||||||
|
def save_as(self):
|
||||||
|
print("poop")
|
||||||
|
file = event_system.emit_and_await("save-file-dialog")
|
||||||
|
if not file: return
|
||||||
|
|
||||||
|
self._write_file(file)
|
||||||
|
self.set_path(file)
|
||||||
|
|
||||||
|
return file
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
del self.buffer
|
del self.buffer
|
||||||
@@ -24,6 +24,28 @@ class SourceFilesManager(list):
|
|||||||
|
|
||||||
super().append(file)
|
super().append(file)
|
||||||
|
|
||||||
|
def get_file(self, buffer: SourceBuffer):
|
||||||
|
if not buffer: return
|
||||||
|
|
||||||
|
for i, file in enumerate(self):
|
||||||
|
if not buffer == file.buffer: continue
|
||||||
|
return file
|
||||||
|
|
||||||
|
def pop_file(self, buffer: SourceBuffer):
|
||||||
|
if not buffer: return
|
||||||
|
|
||||||
|
for i, file in enumerate(self):
|
||||||
|
if not buffer == file.buffer: continue
|
||||||
|
|
||||||
|
popped_file = self.pop(i)
|
||||||
|
sibling_file = None
|
||||||
|
if len(self) == 0:
|
||||||
|
sibling_file = self.new()
|
||||||
|
else:
|
||||||
|
sibling_file = self[ i - 1 if i > 0 else i + 1]
|
||||||
|
|
||||||
|
return sibling_file, popped_file
|
||||||
|
|
||||||
def remove_file(self, buffer: SourceBuffer):
|
def remove_file(self, buffer: SourceBuffer):
|
||||||
if not buffer: return
|
if not buffer: return
|
||||||
|
|
||||||
|
|||||||
@@ -16,11 +16,14 @@ from .command_system import CommandSystem
|
|||||||
from .key_mapper import KeyMapper
|
from .key_mapper import KeyMapper
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class SourceView(GtkSource.View):
|
class SourceView(GtkSource.View):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(SourceView, self).__init__()
|
super(SourceView, self).__init__()
|
||||||
|
|
||||||
self.key_mapper = KeyMapper()
|
self.sibling_right = None
|
||||||
|
self.sibling_left = None
|
||||||
|
self.key_mapper = KeyMapper()
|
||||||
|
|
||||||
self._setup_styles()
|
self._setup_styles()
|
||||||
self._setup_signals()
|
self._setup_signals()
|
||||||
@@ -84,14 +87,18 @@ class SourceView(GtkSource.View):
|
|||||||
self.style_scheme_manager = GtkSource.StyleSchemeManager()
|
self.style_scheme_manager = GtkSource.StyleSchemeManager()
|
||||||
self.command = CommandSystem()
|
self.command = CommandSystem()
|
||||||
self.files = SourceFilesManager()
|
self.files = SourceFilesManager()
|
||||||
self.completion = CompletionManager(
|
self.completion = CompletionManager()
|
||||||
self.get_completion()
|
|
||||||
|
self.completion.set_completer( self.get_completion() )
|
||||||
|
|
||||||
|
self.style_scheme_manager.append_search_path(
|
||||||
|
f"{settings_manager.get_home_config_path()}/code_styles"
|
||||||
|
)
|
||||||
|
self.syntax_theme = self.style_scheme_manager.get_scheme(
|
||||||
|
f"{settings.theming.syntax_theme}"
|
||||||
)
|
)
|
||||||
|
|
||||||
self.style_scheme_manager.append_search_path(f"{settings_manager.get_home_config_path()}/code_styles")
|
self.command.set_data(self)
|
||||||
self.syntax_theme = self.style_scheme_manager.get_scheme("penguins-in-space")
|
|
||||||
|
|
||||||
self.command.set_data(self, self.get_buffer())
|
|
||||||
self.exec_command("new_file")
|
self.exec_command("new_file")
|
||||||
|
|
||||||
def _key_press_event(self, view, eve):
|
def _key_press_event(self, view, eve):
|
||||||
@@ -108,8 +115,5 @@ class SourceView(GtkSource.View):
|
|||||||
self.exec_command(command)
|
self.exec_command(command)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _show_completion(self, view):
|
|
||||||
self.completion.request_completion()
|
|
||||||
|
|
||||||
def exec_command(self, command: str):
|
def exec_command(self, command: str):
|
||||||
self.command.exec(command)
|
self.command.exec(command)
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ class OpenFilesButton(Gtk.Button):
|
|||||||
self.connect("button-release-event", self._open_files)
|
self.connect("button-release-event", self._open_files)
|
||||||
|
|
||||||
def _subscribe_to_events(self):
|
def _subscribe_to_events(self):
|
||||||
event_system.subscribe("open_files", self._open_files)
|
event_system.subscribe("open-files", self._open_files)
|
||||||
|
|
||||||
def _load_widgets(self):
|
def _load_widgets(self):
|
||||||
...
|
...
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ from dataclasses import dataclass
|
|||||||
@dataclass
|
@dataclass
|
||||||
class Theming:
|
class Theming:
|
||||||
transparency: int = 64
|
transparency: int = 64
|
||||||
|
default_zoom: int = 12
|
||||||
|
syntax_theme: str = "penguins-in-space"
|
||||||
success_color: str = "#88cc27"
|
success_color: str = "#88cc27"
|
||||||
warning_color: str = "#ffa800"
|
warning_color: str = "#ffa800"
|
||||||
error_color: str = "#ff0000"
|
error_color: str = "#ff0000"
|
||||||
|
|||||||
Reference in New Issue
Block a user