From 6b99c5c0d77bc13ea9cb7c668911581e335c61fd Mon Sep 17 00:00:00 2001 From: itdominator <1itdominator@gmail.com> Date: Fri, 6 Sep 2024 22:57:10 -0500 Subject: [PATCH] added basic lsp message logging view --- src/core/widgets/buttons/top_button_box.py | 10 ++- .../widgets/enteries/alt_command_entry.py | 2 - src/core/widgets/enteries/command_entry.py | 4 +- .../enteries/init_options_source_view.py | 1 - .../enteries/lsp_message_source_view.py | 1 - src/core/widgets/enteries/socket_entry.py | 2 - src/core/widgets/log_list.py | 65 +++++++++++++++++++ src/core/widgets/lsp_message_box.py | 5 ++ src/core/widgets/lsp_ui.py | 40 ++++++++---- 9 files changed, 104 insertions(+), 26 deletions(-) create mode 100644 src/core/widgets/log_list.py diff --git a/src/core/widgets/buttons/top_button_box.py b/src/core/widgets/buttons/top_button_box.py index fa1703c..1835196 100644 --- a/src/core/widgets/buttons/top_button_box.py +++ b/src/core/widgets/buttons/top_button_box.py @@ -26,6 +26,8 @@ class TopButtonBox(Gtk.ButtonBox): ctx = self.get_style_context() ctx.add_class("top-button-box") + self.set_homogeneous(True) + def _setup_signals(self): ... @@ -33,13 +35,15 @@ class TopButtonBox(Gtk.ButtonBox): ... def _load_widgets(self): + box = Gtk.Box() self.message_id_lbl = Gtk.Label(label = "Message ID: 0") - self.folder_choser_lbl = Gtk.Label(label = "Workspace Folder:") + self.folder_choser_lbl = Gtk.Label(label = "Workspace Folder: ") self.folder_choser_btn = FolderChoserButton() self.add(self.message_id_lbl) - self.add(self.folder_choser_lbl) - self.add(self.folder_choser_btn) + box.add(self.folder_choser_lbl) + box.add(self.folder_choser_btn) + self.add(box) def update_message_id_lbl(self, id: int): self.message_id_lbl.set_label(f"Message ID: {id}") \ No newline at end of file diff --git a/src/core/widgets/enteries/alt_command_entry.py b/src/core/widgets/enteries/alt_command_entry.py index e3cbf2e..02c73a5 100644 --- a/src/core/widgets/enteries/alt_command_entry.py +++ b/src/core/widgets/enteries/alt_command_entry.py @@ -27,7 +27,6 @@ class AltCommandEntry(Gtk.Entry): ctx = self.get_style_context() ctx.add_class("alt-command-entry") - self.set_hexpand(True) self.set_placeholder_text("Alt Command:") def _setup_signals(self): @@ -38,4 +37,3 @@ class AltCommandEntry(Gtk.Entry): def _load_widgets(self): ... - diff --git a/src/core/widgets/enteries/command_entry.py b/src/core/widgets/enteries/command_entry.py index ed1bd7e..1bf3915 100644 --- a/src/core/widgets/enteries/command_entry.py +++ b/src/core/widgets/enteries/command_entry.py @@ -27,7 +27,6 @@ class CommandEntry(Gtk.Entry): ctx = self.get_style_context() ctx.add_class("command-entry") - self.set_hexpand(True) self.set_placeholder_text("Command:") def _setup_signals(self): @@ -37,5 +36,4 @@ class CommandEntry(Gtk.Entry): ... def _load_widgets(self): - ... - + ... \ No newline at end of file diff --git a/src/core/widgets/enteries/init_options_source_view.py b/src/core/widgets/enteries/init_options_source_view.py index 2578eb3..84bd1fd 100644 --- a/src/core/widgets/enteries/init_options_source_view.py +++ b/src/core/widgets/enteries/init_options_source_view.py @@ -34,7 +34,6 @@ class InitOptionsSourceView(GtkSource.View): ctx = self.get_style_context() self.set_vexpand(True) - self.set_hexpand(True) self.set_indent_width(4) self.set_tab_width(4) self.set_insert_spaces_instead_of_tabs(True) diff --git a/src/core/widgets/enteries/lsp_message_source_view.py b/src/core/widgets/enteries/lsp_message_source_view.py index 7ba1402..b530692 100644 --- a/src/core/widgets/enteries/lsp_message_source_view.py +++ b/src/core/widgets/enteries/lsp_message_source_view.py @@ -88,7 +88,6 @@ class LspMessageSourceView(GtkSource.View): ctx = self.get_style_context() self.set_vexpand(True) - self.set_hexpand(True) self.set_indent_width(4) self.set_tab_width(4) self.set_insert_spaces_instead_of_tabs(True) diff --git a/src/core/widgets/enteries/socket_entry.py b/src/core/widgets/enteries/socket_entry.py index f6fc11f..ac45e63 100644 --- a/src/core/widgets/enteries/socket_entry.py +++ b/src/core/widgets/enteries/socket_entry.py @@ -27,7 +27,6 @@ class SocketEntry(Gtk.Entry): ctx = self.get_style_context() ctx.add_class("socket-entry") - self.set_hexpand(True) self.set_placeholder_text("Socket:") def _setup_signals(self): @@ -38,4 +37,3 @@ class SocketEntry(Gtk.Entry): def _load_widgets(self): ... - diff --git a/src/core/widgets/log_list.py b/src/core/widgets/log_list.py new file mode 100644 index 0000000..9104930 --- /dev/null +++ b/src/core/widgets/log_list.py @@ -0,0 +1,65 @@ +# Python imports +import json + +# Lib imports +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk + +# Application imports + + + +class LogList(Gtk.ListBox): + def __init__(self): + super(LogList, self).__init__() + + self._setup_styling() + self._setup_signals() + self._subscribe_to_events() + self._load_widgets() + + self.show_all() + + + def _setup_styling(self): + ctx = self.get_style_context() + ctx.add_class("log-list-listbox") + + self.set_placeholder( Gtk.Label(label="Empty Log List...") ) + self.set_selection_mode(Gtk.SelectionMode.NONE) + + def _setup_signals(self): + # self.connect("row-activated", sink_call) + # self.connect("row-selected", sink_call) + ... + + def _subscribe_to_events(self): + ... + + def _load_widgets(self): + ... + + def add_log_entry(self, data: str or dict): + message = None + if isinstance(data, str): + parts = data.split("\n", 2) + jsonStr = parts[2] + messageStr = json.dumps(json.loads(jsonStr), separators = (',', ':'), indent = 4) + message = f"{parts[0]}\r\n\r\n{messageStr}" + + if isinstance(data, dict): + message = json.dumps(data, separators = (',', ':'), indent = 4) + + box = Gtk.Frame() + label = Gtk.Label(label=message) + + label.set_xalign(0.010) + + box.set_label(">") + box.set_label_align(0.010, 0.5) + + box.add(label) + self.add(box) + + box.show_all() diff --git a/src/core/widgets/lsp_message_box.py b/src/core/widgets/lsp_message_box.py index d8d2917..5c79b94 100644 --- a/src/core/widgets/lsp_message_box.py +++ b/src/core/widgets/lsp_message_box.py @@ -154,6 +154,9 @@ class LSPMessageBox(Gtk.Box): message_size = len(message_str) message = f"Content-Length: {message_size}\r\n\r\n{message_str}" + self.get_parent().log_list.add_log_entry(message) + event_system.subscribe("add-log-entry", message) + with self.write_lock: self.lsp_process.stdin.write( message.encode("utf-8") ) self.lsp_process.stdin.flush() @@ -258,6 +261,8 @@ class LSPMessageBox(Gtk.Box): GLib.idle_add(self.handle_lsp_response, response_id, lsp_result) def handle_lsp_response(self, id: int, lsp_result: {}): + self.get_parent().log_list.add_log_entry(lsp_result) + keys = lsp_result.keys() if "error" in keys: lsp_result = lsp_result["error"] diff --git a/src/core/widgets/lsp_ui.py b/src/core/widgets/lsp_ui.py index b5bd515..8d42b7c 100644 --- a/src/core/widgets/lsp_ui.py +++ b/src/core/widgets/lsp_ui.py @@ -12,6 +12,7 @@ from .enteries.command_entry import CommandEntry from .enteries.socket_entry import SocketEntry from .enteries.init_options_source_view import InitOptionsSourceView from .buttons.info_link_button import InfoLinkButton +from .log_list import LogList @@ -48,12 +49,16 @@ class LSPUI(Gtk.Grid): ... def _load_widgets(self): - scrolled_win = Gtk.ScrolledWindow() + scrolled_win1 = Gtk.ScrolledWindow() + scrolled_win2 = Gtk.ScrolledWindow() + self.log_list = LogList() + alt_command_lbl = Gtk.Label(label="Alt Command:") command_lbl = Gtk.Label(label="Command:") socket_lbl = Gtk.Label(label="Socket:") - init_options_lbl = Gtk.Label(label="Initialization Options:") - message_box_lbl = Gtk.Label(label="Message Box:") + init_options_lbl = Gtk.Label(label="Initialization Options") + message_box_lbl = Gtk.Label(label="Message Box") + log_list_lbl = Gtk.Label(label="Logs") self.link_btn = InfoLinkButton(self._language.title(), self._data["info"]) self.alt_command_entry = AltCommandEntry( self._data["alt-command"] ) @@ -64,22 +69,29 @@ class LSPUI(Gtk.Grid): init_options_lbl.set_margin_top(10) message_box_lbl.set_margin_top(10) + log_list_lbl.set_margin_top(10) + log_list_lbl.set_margin_bottom(10) + scrolled_win2.set_size_request(320, -1) - scrolled_win.add(self.init_ops_src_vw) + scrolled_win1.add(self.init_ops_src_vw) + scrolled_win2.add(self.log_list) # child, left, top, width, height - self.attach(self.link_btn, 0, 0, 3, 1) + self.attach(self.link_btn, 0, 0, 3, 1) - self.attach(alt_command_lbl, 0, 1, 1, 1) - self.attach(command_lbl, 0, 2, 1, 1) - self.attach(socket_lbl, 0, 3, 1, 1) + self.attach(alt_command_lbl, 0, 1, 1, 1) + self.attach(command_lbl, 0, 2, 1, 1) + self.attach(socket_lbl, 0, 3, 1, 1) self.attach(self.alt_command_entry, 1, 1, 2, 1) - self.attach(self.command_entry, 1, 2, 2, 1) - self.attach(self.socket_entry, 1, 3, 2, 1) + self.attach(self.command_entry, 1, 2, 2, 1) + self.attach(self.socket_entry, 1, 3, 2, 1) - self.attach(init_options_lbl, 0, 4, 3, 1) - self.attach(scrolled_win, 0, 5, 3, 1) + self.attach(init_options_lbl, 0, 4, 3, 1) + self.attach(scrolled_win1, 0, 5, 3, 1) - self.attach(message_box_lbl, 0, 6, 3, 1) - self.attach(self.message_box, 0, 7, 3, 1) + self.attach(message_box_lbl, 0, 6, 3, 1) + self.attach(self.message_box, 0, 7, 3, 1) + + self.attach(log_list_lbl, 3, 0, 3, 1) + self.attach(scrolled_win2, 3, 1, 3, 11) \ No newline at end of file