generated from itdominator/Python-With-Gtk-Template
Refactoring file layout
This commit is contained in:
parent
72bea6386b
commit
404aba0c2e
|
@ -7,7 +7,7 @@ from gi.repository import Gtk
|
||||||
|
|
||||||
# Application imports
|
# Application imports
|
||||||
from .widgets.base.banner_controls import BannerControls
|
from .widgets.base.banner_controls import BannerControls
|
||||||
from .widgets.base.editer_notebook import EditorNotebook
|
from .widgets.base.notebook.editor_notebook import EditorNotebook
|
||||||
from .widgets.base.bottom_status_info_widget import BottomStatusInfoWidget
|
from .widgets.base.bottom_status_info_widget import BottomStatusInfoWidget
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
"""
|
||||||
|
Notebook Module
|
||||||
|
"""
|
|
@ -0,0 +1,32 @@
|
||||||
|
# Python imports
|
||||||
|
|
||||||
|
# Lib imports
|
||||||
|
|
||||||
|
# Application imports
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class EditorControllerMixin:
|
||||||
|
def action_controller(self, action = "", query = ""):
|
||||||
|
page_num = self.get_current_page()
|
||||||
|
container = self.get_nth_page( page_num )
|
||||||
|
source_view = container.get_source_view()
|
||||||
|
|
||||||
|
if action == "do_text_search":
|
||||||
|
self.do_text_search(source_view, query)
|
||||||
|
if action == "set_buffer_language":
|
||||||
|
self.set_buffer_language(source_view, query)
|
||||||
|
if action == "set_buffer_style":
|
||||||
|
self.set_buffer_style(source_view, query)
|
||||||
|
if action == "toggle_highlight_line":
|
||||||
|
self.toggle_highlight_line(source_view)
|
||||||
|
if action == "scale_up_text":
|
||||||
|
self.scale_up_text(source_view)
|
||||||
|
if action == "scale_down_text":
|
||||||
|
self.scale_down_text(source_view)
|
||||||
|
if action == "close_tab":
|
||||||
|
self.close_tab(None, container, source_view)
|
||||||
|
if action == "keyboard_prev_tab":
|
||||||
|
self.keyboard_prev_tab(page_num)
|
||||||
|
if action == "keyboard_next_tab":
|
||||||
|
self.keyboard_next_tab(page_num)
|
|
@ -0,0 +1,64 @@
|
||||||
|
# Python imports
|
||||||
|
|
||||||
|
# Lib imports
|
||||||
|
|
||||||
|
# Application imports
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class EditorEventsMixin:
|
||||||
|
def _toggle_highlight_line(self):
|
||||||
|
self.action_controller("toggle_highlight_line")
|
||||||
|
|
||||||
|
def _keyboard_close_tab(self):
|
||||||
|
self.action_controller("close_tab")
|
||||||
|
|
||||||
|
def _keyboard_create_tab(self, _gfile):
|
||||||
|
self.create_view(gfile=_gfile)
|
||||||
|
|
||||||
|
def _keyboard_next_tab(self):
|
||||||
|
self.action_controller("keyboard_next_tab")
|
||||||
|
|
||||||
|
def _keyboard_prev_tab(self):
|
||||||
|
self.action_controller("keyboard_prev_tab")
|
||||||
|
|
||||||
|
def _keyboard_scale_up_text(self):
|
||||||
|
self.action_controller("scale_up_text")
|
||||||
|
|
||||||
|
def _keyboard_scale_down_text(self):
|
||||||
|
self.action_controller("scale_down_text")
|
||||||
|
|
||||||
|
def _keyboard_save_file(self):
|
||||||
|
...
|
||||||
|
|
||||||
|
def _keyboard_save_file_as(self):
|
||||||
|
...
|
||||||
|
|
||||||
|
def _text_search(self, widget = None, eve = None):
|
||||||
|
self.action_controller("do_text_search", widget.get_text())
|
||||||
|
|
||||||
|
def do_text_search(self, query = ""):
|
||||||
|
source_view.scale_down_text()
|
||||||
|
|
||||||
|
def set_buffer_language(self, source_view, language = "python3"):
|
||||||
|
source_view.set_buffer_language(language)
|
||||||
|
|
||||||
|
def set_buffer_style(self, source_view, style = "tango"):
|
||||||
|
source_view.set_buffer_style(style)
|
||||||
|
|
||||||
|
def keyboard_prev_tab(self, page_num):
|
||||||
|
page_num = self.get_n_pages() - 1 if page_num == 0 else page_num - 1
|
||||||
|
self.set_current_page(page_num)
|
||||||
|
|
||||||
|
def keyboard_next_tab(self, page_num):
|
||||||
|
page_num = 0 if self.get_n_pages() - 1 == page_num else page_num + 1
|
||||||
|
self.set_current_page(page_num)
|
||||||
|
|
||||||
|
def scale_up_text(self, source_view):
|
||||||
|
source_view.scale_up_text()
|
||||||
|
|
||||||
|
def scale_down_text(self, source_view):
|
||||||
|
source_view.scale_down_text()
|
||||||
|
|
||||||
|
def toggle_highlight_line(self, source_view):
|
||||||
|
source_view.toggle_highlight_line()
|
|
@ -9,11 +9,15 @@ from gi.repository import Gdk
|
||||||
from gi.repository import Gio
|
from gi.repository import Gio
|
||||||
|
|
||||||
# Application imports
|
# Application imports
|
||||||
from .sourceview_container import SourceViewContainer
|
from ..sourceview_container import SourceViewContainer
|
||||||
|
from .editor_controller import EditorControllerMixin
|
||||||
|
from .editor_events import EditorEventsMixin
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class EditorNotebook(Gtk.Notebook):
|
# NOTE: https://github.com/Axel-Erfurt/TextEdit/tree/b65f09be945196eb05bef83d81a6abcd129b4eb0
|
||||||
|
|
||||||
|
class EditorNotebook(EditorEventsMixin, EditorControllerMixin, Gtk.Notebook):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(EditorNotebook, self).__init__()
|
super(EditorNotebook, self).__init__()
|
||||||
|
|
||||||
|
@ -48,6 +52,8 @@ class EditorNotebook(Gtk.Notebook):
|
||||||
event_system.subscribe("keyboard_next_tab", self._keyboard_next_tab)
|
event_system.subscribe("keyboard_next_tab", self._keyboard_next_tab)
|
||||||
event_system.subscribe("keyboard_scale_up_text", self._keyboard_scale_up_text)
|
event_system.subscribe("keyboard_scale_up_text", self._keyboard_scale_up_text)
|
||||||
event_system.subscribe("keyboard_scale_down_text", self._keyboard_scale_down_text)
|
event_system.subscribe("keyboard_scale_down_text", self._keyboard_scale_down_text)
|
||||||
|
event_system.subscribe("keyboard_save_file", self._keyboard_save_file)
|
||||||
|
event_system.subscribe("keyboard_save_file_as", self._keyboard_save_file_as)
|
||||||
|
|
||||||
def _add_action_widgets(self):
|
def _add_action_widgets(self):
|
||||||
start_box = Gtk.Box()
|
start_box = Gtk.Box()
|
||||||
|
@ -75,9 +81,6 @@ class EditorNotebook(Gtk.Notebook):
|
||||||
def _load_widgets(self):
|
def _load_widgets(self):
|
||||||
self.create_view()
|
self.create_view()
|
||||||
|
|
||||||
def _keyboard_create_tab(self, _gfile):
|
|
||||||
self.create_view(gfile=_gfile)
|
|
||||||
|
|
||||||
def create_view(self, widget = None, eve = None, gfile = None):
|
def create_view(self, widget = None, eve = None, gfile = None):
|
||||||
container = SourceViewContainer(self.close_tab)
|
container = SourceViewContainer(self.close_tab)
|
||||||
|
|
||||||
|
@ -109,75 +112,3 @@ class EditorNotebook(Gtk.Notebook):
|
||||||
def _dbl_click_create_view(self, notebook, eve):
|
def _dbl_click_create_view(self, notebook, eve):
|
||||||
if eve.type == Gdk.EventType.DOUBLE_BUTTON_PRESS and eve.button == 1: # l-click
|
if eve.type == Gdk.EventType.DOUBLE_BUTTON_PRESS and eve.button == 1: # l-click
|
||||||
...
|
...
|
||||||
|
|
||||||
def _toggle_highlight_line(self):
|
|
||||||
self.action_controller("toggle_highlight_line")
|
|
||||||
|
|
||||||
def _keyboard_close_tab(self):
|
|
||||||
self.action_controller("close_tab")
|
|
||||||
|
|
||||||
def _keyboard_next_tab(self):
|
|
||||||
self.action_controller("keyboard_next_tab")
|
|
||||||
|
|
||||||
def _keyboard_prev_tab(self):
|
|
||||||
self.action_controller("keyboard_prev_tab")
|
|
||||||
|
|
||||||
def _keyboard_scale_up_text(self):
|
|
||||||
self.action_controller("scale_up_text")
|
|
||||||
|
|
||||||
def _keyboard_scale_down_text(self):
|
|
||||||
self.action_controller("scale_down_text")
|
|
||||||
|
|
||||||
def _text_search(self, widget = None, eve = None):
|
|
||||||
self.action_controller("do_text_search", widget.get_text())
|
|
||||||
|
|
||||||
def action_controller(self, action = "", query = ""):
|
|
||||||
page_num = self.get_current_page()
|
|
||||||
container = self.get_nth_page( page_num )
|
|
||||||
source_view = container.get_source_view()
|
|
||||||
|
|
||||||
if action == "do_text_search":
|
|
||||||
self.do_text_search(source_view, query)
|
|
||||||
if action == "set_buffer_language":
|
|
||||||
self.set_buffer_language(source_view, query)
|
|
||||||
if action == "set_buffer_style":
|
|
||||||
self.set_buffer_style(source_view, query)
|
|
||||||
if action == "toggle_highlight_line":
|
|
||||||
self.toggle_highlight_line(source_view)
|
|
||||||
if action == "scale_up_text":
|
|
||||||
self.scale_up_text(source_view)
|
|
||||||
if action == "scale_down_text":
|
|
||||||
self.scale_down_text(source_view)
|
|
||||||
if action == "close_tab":
|
|
||||||
self.close_tab(None, container, source_view)
|
|
||||||
if action == "keyboard_prev_tab":
|
|
||||||
self.keyboard_prev_tab(page_num)
|
|
||||||
if action == "keyboard_next_tab":
|
|
||||||
self.keyboard_next_tab(page_num)
|
|
||||||
|
|
||||||
|
|
||||||
def do_text_search(self, query = ""):
|
|
||||||
source_view.scale_down_text()
|
|
||||||
|
|
||||||
def set_buffer_language(self, source_view, language = "python3"):
|
|
||||||
source_view.set_buffer_language(language)
|
|
||||||
|
|
||||||
def set_buffer_style(self, source_view, style = "tango"):
|
|
||||||
source_view.set_buffer_style(style)
|
|
||||||
|
|
||||||
def keyboard_prev_tab(self, page_num):
|
|
||||||
page_num = self.get_n_pages() - 1 if page_num == 0 else page_num - 1
|
|
||||||
self.set_current_page(page_num)
|
|
||||||
|
|
||||||
def keyboard_next_tab(self, page_num):
|
|
||||||
page_num = 0 if self.get_n_pages() - 1 == page_num else page_num + 1
|
|
||||||
self.set_current_page(page_num)
|
|
||||||
|
|
||||||
def scale_up_text(self, source_view):
|
|
||||||
source_view.scale_up_text()
|
|
||||||
|
|
||||||
def scale_down_text(self, source_view):
|
|
||||||
source_view.scale_down_text()
|
|
||||||
|
|
||||||
def toggle_highlight_line(self, source_view):
|
|
||||||
source_view.toggle_highlight_line()
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
"""
|
||||||
|
SourceView Module
|
||||||
|
"""
|
|
@ -11,10 +11,11 @@ from gi.repository import Gio
|
||||||
from gi.repository import GtkSource
|
from gi.repository import GtkSource
|
||||||
|
|
||||||
# Application imports
|
# Application imports
|
||||||
|
from .source_view_events import SourceViewEventsMixin
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class SourceView(GtkSource.View):
|
class SourceView(SourceViewEventsMixin, GtkSource.View):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(SourceView, self).__init__()
|
super(SourceView, self).__init__()
|
||||||
|
|
||||||
|
@ -25,6 +26,8 @@ class SourceView(GtkSource.View):
|
||||||
self._file_watcher = None
|
self._file_watcher = None
|
||||||
self._is_changed = False
|
self._is_changed = False
|
||||||
|
|
||||||
|
self._current_file: Gio.File = None
|
||||||
|
self._file_loader = None
|
||||||
self._buffer = self.get_buffer()
|
self._buffer = self.get_buffer()
|
||||||
|
|
||||||
self._setup_styling()
|
self._setup_styling()
|
||||||
|
@ -56,27 +59,19 @@ class SourceView(GtkSource.View):
|
||||||
def _setup_signals(self):
|
def _setup_signals(self):
|
||||||
self.connect("drag-data-received", self._on_drag_data_received)
|
self.connect("drag-data-received", self._on_drag_data_received)
|
||||||
self._buffer.connect("mark-set", self._on_cursor_move)
|
self._buffer.connect("mark-set", self._on_cursor_move)
|
||||||
|
self._buffer.connect('changed', self._is_modified)
|
||||||
# self.completion.add_provider(srcCompleteonSnippets)
|
# self.completion.add_provider(srcCompleteonSnippets)
|
||||||
# self.completion.add_provider(srcCompleteonWords)
|
# self.completion.add_provider(srcCompleteonWords)
|
||||||
|
|
||||||
def _subscribe_to_events(self):
|
def _subscribe_to_events(self):
|
||||||
...
|
...
|
||||||
|
|
||||||
|
|
||||||
def _load_widgets(self):
|
def _load_widgets(self):
|
||||||
...
|
...
|
||||||
|
|
||||||
def _create_default_tag(self):
|
def _is_modified(self, *args):
|
||||||
self._general_style_tag = self._buffer.create_tag('general_style')
|
self._is_changed = True
|
||||||
self._general_style_tag.set_property('size', 100)
|
self.update_cursor_position()
|
||||||
self._general_style_tag.set_property('scale', 100)
|
|
||||||
|
|
||||||
def set_buffer_language(self, language = "python3"):
|
|
||||||
self._buffer.set_language( self._language_manager.get_language(language) )
|
|
||||||
|
|
||||||
def set_buffer_style(self, style = "tango"):
|
|
||||||
self._buffer.set_style_scheme( self._style_scheme_manager.get_scheme(style) )
|
|
||||||
|
|
||||||
|
|
||||||
def get_file_watcher(self):
|
def get_file_watcher(self):
|
||||||
return self._file_watcher
|
return self._file_watcher
|
||||||
|
@ -109,28 +104,6 @@ class SourceView(GtkSource.View):
|
||||||
if eve_type in [ Gio.FileMonitorEvent.CHANGED ]:
|
if eve_type in [ Gio.FileMonitorEvent.CHANGED ]:
|
||||||
...
|
...
|
||||||
|
|
||||||
|
|
||||||
def toggle_highlight_line(self, widget = None, eve = None):
|
|
||||||
self.set_highlight_current_line( not self.get_highlight_current_line() )
|
|
||||||
|
|
||||||
def scale_up_text(self, scale_step = 10):
|
|
||||||
current_scale = self._general_style_tag.get_property('scale')
|
|
||||||
start_itr = self._buffer.get_start_iter()
|
|
||||||
end_itr = self._buffer.get_end_iter()
|
|
||||||
|
|
||||||
self._general_style_tag.set_property('scale', current_scale + scale_step)
|
|
||||||
self._buffer.apply_tag(self._general_style_tag, start_itr, end_itr)
|
|
||||||
|
|
||||||
def scale_down_text(self, scale_step = 10):
|
|
||||||
tag_table = self._buffer.get_tag_table()
|
|
||||||
start_itr = self._buffer.get_start_iter()
|
|
||||||
end_itr = self._buffer.get_end_iter()
|
|
||||||
tag = tag_table.lookup('general_style')
|
|
||||||
|
|
||||||
tag.set_property('scale', tag.get_property('scale') - scale_step)
|
|
||||||
self._buffer.apply_tag(tag, start_itr, end_itr)
|
|
||||||
|
|
||||||
|
|
||||||
def _set_up_dnd(self):
|
def _set_up_dnd(self):
|
||||||
URI_TARGET_TYPE = 80
|
URI_TARGET_TYPE = 80
|
||||||
uri_target = Gtk.TargetEntry.new('text/uri-list', Gtk.TargetFlags(0), URI_TARGET_TYPE)
|
uri_target = Gtk.TargetEntry.new('text/uri-list', Gtk.TargetFlags(0), URI_TARGET_TYPE)
|
||||||
|
@ -145,80 +118,61 @@ class SourceView(GtkSource.View):
|
||||||
uris = data.get_text().split("\n")
|
uris = data.get_text().split("\n")
|
||||||
|
|
||||||
if self._is_changed:
|
if self._is_changed:
|
||||||
|
# TODO: Impliment change detection and offer to save as new file
|
||||||
|
# Need to insure self._current_file gets set for further flow logic to work
|
||||||
# self.maybe_saved()
|
# self.maybe_saved()
|
||||||
...
|
...
|
||||||
|
|
||||||
|
if not self._current_file:
|
||||||
gfile = Gio.File.new_for_uri(uris[0])
|
gfile = Gio.File.new_for_uri(uris[0])
|
||||||
self.open_file(gfile)
|
self.open_file(gfile)
|
||||||
|
|
||||||
uris.pop(0)
|
uris.pop(0)
|
||||||
|
|
||||||
for uri in uris:
|
for uri in uris:
|
||||||
|
gfile = None
|
||||||
|
try:
|
||||||
gfile = Gio.File.new_for_uri(uri)
|
gfile = Gio.File.new_for_uri(uri)
|
||||||
|
except Exception as e:
|
||||||
|
gfile = Gio.File.new_for_path(uri)
|
||||||
|
|
||||||
event_system.emit('create_view', (None, None, gfile,))
|
event_system.emit('create_view', (None, None, gfile,))
|
||||||
|
|
||||||
|
|
||||||
def open_file(self, gfile, *args):
|
def open_file(self, gfile, *args):
|
||||||
|
self._current_file = gfile
|
||||||
|
|
||||||
|
self.load_file_info(gfile)
|
||||||
|
self.load_file_async(gfile)
|
||||||
|
self.grab_focus()
|
||||||
|
|
||||||
|
def load_file_info(self, gfile):
|
||||||
info = gfile.query_info("standard::*", 0, cancellable=None)
|
info = gfile.query_info("standard::*", 0, cancellable=None)
|
||||||
content_type = info.get_content_type()
|
content_type = info.get_content_type()
|
||||||
display_name = info.get_display_name()
|
display_name = info.get_display_name()
|
||||||
tab_widget = self.get_parent().get_tab_widget()
|
tab_widget = self.get_parent().get_tab_widget()
|
||||||
lm = self._language_manager.guess_language(None, content_type)
|
|
||||||
|
|
||||||
tab_widget.set_tab_label(display_name)
|
|
||||||
event_system.emit("set_bottom_labels", (gfile, info))
|
|
||||||
|
|
||||||
logger.debug(f"Detected Content Type: {content_type}")
|
|
||||||
with open(gfile.get_path(), 'r') as f:
|
|
||||||
data = f.read()
|
|
||||||
self._buffer.set_text(data)
|
|
||||||
try:
|
try:
|
||||||
|
lm = self._language_manager.guess_language(None, content_type)
|
||||||
self.set_buffer_language( lm.get_id() )
|
self.set_buffer_language( lm.get_id() )
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
...
|
...
|
||||||
|
|
||||||
# self.current_file = myfile
|
logger.debug(f"Detected Content Type: {content_type}")
|
||||||
# self.current_filename = myfile.rpartition("/")[2]
|
tab_widget.set_tab_label(display_name)
|
||||||
# self.current_folder = path.dirname(myfile)
|
event_system.emit("set_bottom_labels", (gfile, info))
|
||||||
f.close()
|
|
||||||
# self.headerbar.set_subtitle(myfile)
|
|
||||||
# self.status_label.set_text(f"'{myfile}' loaded")
|
|
||||||
# self.headerbar.set_title("TextEdit")
|
|
||||||
self.grab_focus()
|
|
||||||
# self.is_changed = False
|
|
||||||
|
|
||||||
|
def load_file_async(self, gfile):
|
||||||
|
file = GtkSource.File()
|
||||||
|
file.set_location(gfile)
|
||||||
|
self._file_loader = GtkSource.FileLoader.new(self._buffer, file)
|
||||||
|
|
||||||
|
def finish_load_callback(obj, res, user_data=None):
|
||||||
|
self._file_loader.load_finish(res)
|
||||||
|
self._is_changed = False
|
||||||
|
|
||||||
def _on_cursor_move(self, buf, cursor_iter, mark, user_data = None):
|
self._file_loader.load_async(io_priority=98,
|
||||||
if mark != buf.get_insert():
|
cancellable=None,
|
||||||
return
|
progress_callback=None,
|
||||||
|
progress_callback_data=None,
|
||||||
self.update_cursor_position()
|
callback=finish_load_callback,
|
||||||
|
user_data=(None))
|
||||||
|
|
||||||
def update_cursor_position(self):
|
|
||||||
iter = self._buffer.get_iter_at_mark(self._buffer.get_insert())
|
|
||||||
chars = iter.get_offset()
|
|
||||||
row = iter.get_line() + 1
|
|
||||||
col = self.get_visual_column(iter) + 1
|
|
||||||
|
|
||||||
classes = self._buffer.get_context_classes_at_iter(iter)
|
|
||||||
classes_str = ""
|
|
||||||
|
|
||||||
i = 0
|
|
||||||
for c in classes:
|
|
||||||
if len(classes) != i + 1:
|
|
||||||
classes_str += c + ", "
|
|
||||||
else:
|
|
||||||
classes_str += c
|
|
||||||
|
|
||||||
cursor_data = f"char: {chars}, line: {row}, column: {col}, classes: {classes_str}"
|
|
||||||
logger.debug(cursor_data)
|
|
||||||
event_system.emit("set_line_char_label", (f"{row}:{col}",))
|
|
||||||
|
|
||||||
|
|
||||||
# https://github.com/ptomato/inform7-ide/blob/main/src/actions.c
|
|
||||||
def action_uncomment_selection(self):
|
|
||||||
...
|
|
||||||
|
|
||||||
def action_comment_out_selection(self):
|
|
||||||
pass
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
# Python imports
|
||||||
|
|
||||||
|
# Lib imports
|
||||||
|
|
||||||
|
# Application imports
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class SourceViewEventsMixin:
|
||||||
|
def _create_default_tag(self):
|
||||||
|
self._general_style_tag = self._buffer.create_tag('general_style')
|
||||||
|
self._general_style_tag.set_property('size', 100)
|
||||||
|
self._general_style_tag.set_property('scale', 100)
|
||||||
|
|
||||||
|
def set_buffer_language(self, language = "python3"):
|
||||||
|
self._buffer.set_language( self._language_manager.get_language(language) )
|
||||||
|
|
||||||
|
def set_buffer_style(self, style = "tango"):
|
||||||
|
self._buffer.set_style_scheme( self._style_scheme_manager.get_scheme(style) )
|
||||||
|
|
||||||
|
def toggle_highlight_line(self, widget = None, eve = None):
|
||||||
|
self.set_highlight_current_line( not self.get_highlight_current_line() )
|
||||||
|
|
||||||
|
def scale_up_text(self, scale_step = 10):
|
||||||
|
current_scale = self._general_style_tag.get_property('scale')
|
||||||
|
start_itr = self._buffer.get_start_iter()
|
||||||
|
end_itr = self._buffer.get_end_iter()
|
||||||
|
|
||||||
|
self._general_style_tag.set_property('scale', current_scale + scale_step)
|
||||||
|
self._buffer.apply_tag(self._general_style_tag, start_itr, end_itr)
|
||||||
|
|
||||||
|
def scale_down_text(self, scale_step = 10):
|
||||||
|
tag_table = self._buffer.get_tag_table()
|
||||||
|
start_itr = self._buffer.get_start_iter()
|
||||||
|
end_itr = self._buffer.get_end_iter()
|
||||||
|
tag = tag_table.lookup('general_style')
|
||||||
|
|
||||||
|
tag.set_property('scale', tag.get_property('scale') - scale_step)
|
||||||
|
self._buffer.apply_tag(tag, start_itr, end_itr)
|
||||||
|
|
||||||
|
def _on_cursor_move(self, buf, cursor_iter, mark, user_data = None):
|
||||||
|
if mark != buf.get_insert():
|
||||||
|
return
|
||||||
|
|
||||||
|
self.update_cursor_position()
|
||||||
|
|
||||||
|
def update_cursor_position(self):
|
||||||
|
iter = self._buffer.get_iter_at_mark(self._buffer.get_insert())
|
||||||
|
chars = iter.get_offset()
|
||||||
|
row = iter.get_line() + 1
|
||||||
|
col = self.get_visual_column(iter) + 1
|
||||||
|
|
||||||
|
classes = self._buffer.get_context_classes_at_iter(iter)
|
||||||
|
classes_str = ""
|
||||||
|
|
||||||
|
i = 0
|
||||||
|
for c in classes:
|
||||||
|
if len(classes) != i + 1:
|
||||||
|
classes_str += c + ", "
|
||||||
|
else:
|
||||||
|
classes_str += c
|
||||||
|
|
||||||
|
cursor_data = f"char: {chars}, line: {row}, column: {col}, classes: {classes_str}"
|
||||||
|
logger.debug(cursor_data)
|
||||||
|
event_system.emit("set_line_char_label", (f"{row}:{col}",))
|
||||||
|
|
||||||
|
|
||||||
|
# https://github.com/ptomato/inform7-ide/blob/main/src/actions.c
|
||||||
|
def action_uncomment_selection(self):
|
||||||
|
...
|
||||||
|
|
||||||
|
def action_comment_out_selection(self):
|
||||||
|
pass
|
|
@ -7,12 +7,10 @@ from gi.repository import Gtk
|
||||||
|
|
||||||
# Application imports
|
# Application imports
|
||||||
from ..tab_header_widget import TabHeaderWidget
|
from ..tab_header_widget import TabHeaderWidget
|
||||||
from .source_view import SourceView
|
from .sourceview.source_view import SourceView
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# NOTE: https://github.com/Axel-Erfurt/TextEdit/tree/b65f09be945196eb05bef83d81a6abcd129b4eb0
|
|
||||||
|
|
||||||
class SourceViewContainer(Gtk.ScrolledWindow):
|
class SourceViewContainer(Gtk.ScrolledWindow):
|
||||||
def __init__(self, close_tab):
|
def __init__(self, close_tab):
|
||||||
super(SourceViewContainer, self).__init__()
|
super(SourceViewContainer, self).__init__()
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
"open_files" : "<Control>o",
|
"open_files" : "<Control>o",
|
||||||
"keyboard_create_tab" : "<Control>t",
|
"keyboard_create_tab" : "<Control>t",
|
||||||
"keyboard_close_tab" : "<Control>w",
|
"keyboard_close_tab" : "<Control>w",
|
||||||
|
"keyboard_save_file" : "<Control>s",
|
||||||
|
"keyboard_save_file_as" : "<Shift><Control>s",
|
||||||
"keyboard_up" : "Up",
|
"keyboard_up" : "Up",
|
||||||
"keyboard_down" : "Down",
|
"keyboard_down" : "Down",
|
||||||
"keyboard_left" : "Left",
|
"keyboard_left" : "Left",
|
||||||
|
|
Loading…
Reference in New Issue