generated from itdominator/Python-With-Gtk-Template
165 lines
6.2 KiB
Python
165 lines
6.2 KiB
Python
# Python imports
|
|
import json
|
|
import traceback
|
|
|
|
# Lib imports
|
|
import gi
|
|
gi.require_version('Gdk', '3.0')
|
|
gi.require_version('WebKit2', '4.0')
|
|
from gi.repository import Gdk
|
|
from gi.repository import WebKit2
|
|
from gi.repository import GLib
|
|
|
|
# Application imports
|
|
from libs.data_types import Event
|
|
from libs.settings_manager.other.webkit_ui_settings import WebkitUISettings
|
|
|
|
|
|
|
|
class AceEditor(WebKit2.WebView):
|
|
def __init__(self, index):
|
|
super(AceEditor, self).__init__()
|
|
|
|
# self.get_context().set_sandbox_enabled(False)
|
|
self.INDEX = index
|
|
|
|
self._load_settings()
|
|
self._setup_styling()
|
|
self._setup_signals()
|
|
self._subscribe_to_events()
|
|
self._setup_content_manager()
|
|
|
|
self.show_all()
|
|
|
|
if settings_manager.is_debug() or settings_manager.is_launch_inspector():
|
|
inspector = self.get_inspector()
|
|
inspector.show()
|
|
|
|
def _setup_styling(self):
|
|
self.set_vexpand(True)
|
|
self.set_hexpand(True)
|
|
self.set_background_color( Gdk.RGBA(0, 0, 0, 0.0) )
|
|
|
|
def _setup_signals(self):
|
|
self._map_eve_id = self.connect("map", self._on_map_eve)
|
|
|
|
def _on_map_eve(self, widget):
|
|
self.disconnect(self._map_eve_id)
|
|
self._load_view()
|
|
|
|
def _subscribe_to_events(self):
|
|
event_system.subscribe(f"load_file_{self.INDEX}", self.load_file)
|
|
event_system.subscribe(f"send_script_data_{self.INDEX}", self.send_script_data)
|
|
event_system.subscribe(f"new_session_{self.INDEX}", self.new_session)
|
|
event_system.subscribe(f"switch_session_{self.INDEX}", self.switch_session)
|
|
event_system.subscribe(f"updated_session_{self.INDEX}", self.updated_session)
|
|
event_system.subscribe(f"close_session_{self.INDEX}", self.close_session)
|
|
event_system.subscribe(f"remove_session_{self.INDEX}", self.remove_session)
|
|
event_system.subscribe(f"keyboard_scale_up_text_{self.INDEX}", self.keyboard_scale_up_text)
|
|
event_system.subscribe(f"keyboard_scale_down_text_{self.INDEX}", self.keyboard_scale_down_text)
|
|
event_system.subscribe(f"toggle_highlight_line_{self.INDEX}", self.toggle_highlight_line)
|
|
event_system.subscribe(f"find_entry_{self.INDEX}", self.find_entry)
|
|
event_system.subscribe(f"find_next_entry_{self.INDEX}", self.find_next_entry)
|
|
event_system.subscribe(f"find_previous_entry_{self.INDEX}", self.find_previous_entry)
|
|
event_system.subscribe(f"replace_entry_{self.INDEX}", self.replace_entry)
|
|
event_system.subscribe(f"replace_all_{self.INDEX}", self.replace_all)
|
|
event_system.subscribe(f"ui_message_{self.INDEX}", self.ui_message)
|
|
|
|
def _load_settings(self):
|
|
self.set_settings( WebkitUISettings() )
|
|
|
|
def _load_view(self):
|
|
path = settings_manager.get_context_path()
|
|
data = None
|
|
|
|
with open(f"{path}/index.html", "r") as f:
|
|
data = f.read()
|
|
|
|
self.load_html(content = data, base_uri = f"file://{path}/")
|
|
|
|
def _setup_content_manager(self):
|
|
content_manager = self.get_user_content_manager()
|
|
|
|
content_manager.connect("script-message-received", self._process_js_message)
|
|
content_manager.register_script_message_handler("backend")
|
|
|
|
def _process_js_message(self, user_content_manager, js_result):
|
|
js_value = js_result.get_js_value()
|
|
message = js_value.to_string()
|
|
|
|
try:
|
|
event = Event( **json.loads(message) )
|
|
event.originator = self.INDEX
|
|
event_system.emit("handle_bridge_event", (event,))
|
|
except Exception as e:
|
|
logger.info(traceback.format_exc())
|
|
|
|
def load_file(self, ftype: str, fname: str, fpath: str, content: str, line: int = 0):
|
|
command = f"loadFile('{ftype}', '{fname}', '{fpath}', '{content}', '{line}')"
|
|
self.run_javascript(command, None, None)
|
|
|
|
def send_script_data(self, fname, content):
|
|
command = f"importScriptFromBackendResponse('{fname}','{content}')"
|
|
self.run_javascript(command, None, None)
|
|
|
|
def new_session(self):
|
|
command = f"newSession()"
|
|
self.run_javascript(command, None, None)
|
|
|
|
def switch_session(self, fhash):
|
|
command = f"switchSession('{fhash}')"
|
|
self.run_javascript(command, None, None)
|
|
|
|
def updated_session(self, fhash, ftype, fname, fpath):
|
|
command = f"updateSession('{fhash}', '{ftype}', '{fname}', '{fpath}')"
|
|
self.run_javascript(command, None, None)
|
|
|
|
def close_session(self, fhash):
|
|
command = f"closeSession('{fhash}')"
|
|
self.run_javascript(command, None, None)
|
|
|
|
def remove_session(self, fhash):
|
|
command = f"removeSession('{fhash}')"
|
|
self.run_javascript(command, None, None)
|
|
|
|
def keyboard_scale_up_text(self):
|
|
command = "zoomIn()"
|
|
self.run_javascript(command, None, None)
|
|
|
|
def keyboard_scale_down_text(self):
|
|
command = "zoomOut()"
|
|
self.run_javascript(command, None, None)
|
|
|
|
def toggle_highlight_line(self):
|
|
command = "toggleLineHighlight()"
|
|
self.run_javascript(command, None, None)
|
|
|
|
def ui_message(self, message, mtype):
|
|
command = f"displayMessage('{message}', '{mtype}', '3')"
|
|
self.run_javascript(command, None, None)
|
|
|
|
def find_entry(self, query, isBackwwards, isWrap, isCaseSensitive,
|
|
useWholeWord,
|
|
useRegExp):
|
|
command = f"findEntry('{query}', '{isBackwwards}', '{isWrap}', '{isCaseSensitive}', '{useWholeWord}', '{useRegExp}')"
|
|
self.run_javascript(command, None, None)
|
|
|
|
def find_next_entry(self):
|
|
command = f"findNextEntry()"
|
|
self.run_javascript(command, None, None)
|
|
|
|
def find_previous_entry(self):
|
|
command = f"findPreviousEntry()"
|
|
self.run_javascript(command, None, None)
|
|
|
|
def replace_entry(self, fromStr, toStr):
|
|
command = f"replaceEntry('{fromStr}', '{toStr}')"
|
|
self.run_javascript(command, None, None)
|
|
|
|
def replace_all(self, fromStr, toStr):
|
|
command = f"replaceAll('{fromStr}', '{toStr}')"
|
|
self.run_javascript(command, None, None)
|
|
|
|
def run_javascript(self, script, cancellable, callback):
|
|
logger.debug(script)
|
|
super().run_javascript(script, cancellable, callback) |