Added temp cut/paste buffer commands; added zoom in/out commands; fixed tab closures leaking memory
This commit is contained in:
36
src/core/widgets/code/commands/cut_to_temp_buffer.py
Normal file
36
src/core/widgets/code/commands/cut_to_temp_buffer.py
Normal file
@@ -0,0 +1,36 @@
|
||||
# Python imports
|
||||
|
||||
# Lib imports
|
||||
import gi
|
||||
|
||||
gi.require_version('GtkSource', '4')
|
||||
|
||||
from gi.repository import GtkSource
|
||||
|
||||
# Application imports
|
||||
|
||||
|
||||
|
||||
def execute(
|
||||
view: GtkSource.View = None
|
||||
):
|
||||
logger.debug("Cut to Temp Buffer Command")
|
||||
|
||||
view.clear_temp_cut_buffer_delayed()
|
||||
|
||||
buffer = view.get_buffer()
|
||||
itr = buffer.get_iter_at_mark( buffer.get_insert() )
|
||||
start_itr = itr.copy()
|
||||
end_itr = itr.copy()
|
||||
start_line = itr.get_line() + 1
|
||||
start_char = itr.get_line_offset()
|
||||
|
||||
start_itr.backward_visible_line()
|
||||
start_itr.forward_line()
|
||||
end_itr.forward_line()
|
||||
|
||||
line_str = buffer.get_slice(start_itr, end_itr, True)
|
||||
view._cut_buffer += f"{line_str}"
|
||||
buffer.delete(start_itr, end_itr)
|
||||
|
||||
view.set_temp_cut_buffer_delayed()
|
||||
28
src/core/widgets/code/commands/paste_temp_buffer.py
Normal file
28
src/core/widgets/code/commands/paste_temp_buffer.py
Normal file
@@ -0,0 +1,28 @@
|
||||
# Python imports
|
||||
|
||||
# Lib imports
|
||||
import gi
|
||||
|
||||
gi.require_version('GtkSource', '4')
|
||||
|
||||
from gi.repository import GLib
|
||||
from gi.repository import GtkSource
|
||||
|
||||
# Application imports
|
||||
|
||||
|
||||
|
||||
def execute(
|
||||
view: GtkSource.View = None
|
||||
):
|
||||
logger.debug("Paste Temp Buffer Command")
|
||||
|
||||
view.clear_temp_cut_buffer_delayed()
|
||||
|
||||
buffer = view.get_buffer()
|
||||
itr = buffer.get_iter_at_mark( buffer.get_insert() )
|
||||
insert_itr = itr.copy()
|
||||
|
||||
buffer.insert(insert_itr, view._cut_buffer, -1)
|
||||
|
||||
view.set_temp_cut_buffer_delayed()
|
||||
23
src/core/widgets/code/commands/zoom_in.py
Normal file
23
src/core/widgets/code/commands/zoom_in.py
Normal file
@@ -0,0 +1,23 @@
|
||||
# Python imports
|
||||
|
||||
# Lib imports
|
||||
import gi
|
||||
|
||||
gi.require_version('GtkSource', '4')
|
||||
|
||||
from gi.repository import GtkSource
|
||||
|
||||
# Application imports
|
||||
|
||||
|
||||
|
||||
def execute(
|
||||
view: GtkSource.View = None
|
||||
):
|
||||
logger.debug("Zoom In Command")
|
||||
|
||||
ctx = view.get_style_context()
|
||||
if view.zoom_level < 99:
|
||||
ctx.remove_class(f"px{view.zoom_level}")
|
||||
view.zoom_level += 1
|
||||
ctx.add_class(f"px{view.zoom_level}")
|
||||
23
src/core/widgets/code/commands/zoom_out.py
Normal file
23
src/core/widgets/code/commands/zoom_out.py
Normal file
@@ -0,0 +1,23 @@
|
||||
# Python imports
|
||||
|
||||
# Lib imports
|
||||
import gi
|
||||
|
||||
gi.require_version('GtkSource', '4')
|
||||
|
||||
from gi.repository import GtkSource
|
||||
|
||||
# Application imports
|
||||
|
||||
|
||||
|
||||
def execute(
|
||||
view: GtkSource.View = None
|
||||
):
|
||||
logger.debug("Zoom Out Command")
|
||||
|
||||
ctx = view.get_style_context()
|
||||
if view.zoom_level > 1:
|
||||
ctx.remove_class(f"px{view.zoom_level}")
|
||||
view.zoom_level -= 1
|
||||
ctx.add_class(f"px{view.zoom_level}")
|
||||
@@ -13,8 +13,7 @@ class TabWidget(Gtk.Box):
|
||||
def __init__(self):
|
||||
super(TabWidget, self).__init__()
|
||||
|
||||
self._handler_ids: list = []
|
||||
self.file = None
|
||||
self.file = None
|
||||
|
||||
self._setup_styling()
|
||||
self._setup_signals()
|
||||
@@ -51,14 +50,12 @@ class TabWidget(Gtk.Box):
|
||||
self.add(self.close_btn)
|
||||
|
||||
def __del__(self):
|
||||
for handle_id in self._handler_ids:
|
||||
self.disconnect(handle_id)
|
||||
del self.file
|
||||
self._label_eve_box.disconnect(self._label_eve_box_id)
|
||||
self.close_btn.disconnect(self.close_btn_id)
|
||||
|
||||
def set_select_signal(self, callback):
|
||||
_id = self._label_eve_box.connect('button-release-event', callback, self.file)
|
||||
self._handler_ids.append(_id)
|
||||
self._label_eve_box_id = self._label_eve_box.connect('button-release-event', callback, self.file)
|
||||
|
||||
def set_close_signal(self, callback):
|
||||
_id = self.close_btn.connect('button-release-event', callback, self.file)
|
||||
self._handler_ids.append(_id)
|
||||
self.close_btn_id = self.close_btn.connect('button-release-event', callback, self.file)
|
||||
|
||||
@@ -26,7 +26,9 @@ class SourceView(GtkSource.View, ObservableMixin, SourceViewEventsMixin, SourceV
|
||||
def __init__(self):
|
||||
super(SourceView, self).__init__()
|
||||
|
||||
self.observers = []
|
||||
self.observers = []
|
||||
self._cut_temp_timeout_id = None
|
||||
self._cut_buffer = ""
|
||||
|
||||
self.sibling_right = None
|
||||
self.sibling_left = None
|
||||
@@ -38,8 +40,11 @@ class SourceView(GtkSource.View, ObservableMixin, SourceViewEventsMixin, SourceV
|
||||
|
||||
|
||||
def _setup_styles(self):
|
||||
ctx = self.get_style_context()
|
||||
self.zoom_level = settings_manager.settings.theming.default_zoom
|
||||
ctx = self.get_style_context()
|
||||
|
||||
ctx.add_class("source-view")
|
||||
ctx.add_class(f"px{self.zoom_level}")
|
||||
|
||||
self.set_vexpand(True)
|
||||
self.set_bottom_margin(800)
|
||||
@@ -111,3 +116,15 @@ class SourceView(GtkSource.View, ObservableMixin, SourceViewEventsMixin, SourceV
|
||||
def set_files_manager(self, files_manager: SourceFilesManager):
|
||||
self.files_manager = files_manager
|
||||
self.files_manager.add_observer(self)
|
||||
|
||||
def clear_temp_cut_buffer_delayed(self):
|
||||
if self._cut_temp_timeout_id:
|
||||
GLib.source_remove(self._cut_temp_timeout_id)
|
||||
|
||||
def set_temp_cut_buffer_delayed(self):
|
||||
def clear_temp_buffer():
|
||||
self._cut_buffer = ""
|
||||
self._cut_temp_timeout_id = None
|
||||
return False
|
||||
|
||||
self._cut_temp_timeout_id = GLib.timeout_add(15000, clear_temp_buffer)
|
||||
|
||||
@@ -9,6 +9,18 @@
|
||||
"line_down": {
|
||||
"held": "<Control>Down"
|
||||
},
|
||||
"zoom_in": {
|
||||
"held": "<Control>equal"
|
||||
},
|
||||
"zoom_out": {
|
||||
"held": "<Control>minus"
|
||||
},
|
||||
"cut_to_temp_buffer": {
|
||||
"held": "<Control>k"
|
||||
},
|
||||
"paste_temp_buffer": {
|
||||
"held": "<Control>u"
|
||||
},
|
||||
"new_file": {
|
||||
"released": "<Control>t"
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user