generated from itdominator/Python-With-Gtk-Template
added basic lsp message logging view
This commit is contained in:
parent
4b07816777
commit
6b99c5c0d7
|
@ -26,6 +26,8 @@ class TopButtonBox(Gtk.ButtonBox):
|
||||||
ctx = self.get_style_context()
|
ctx = self.get_style_context()
|
||||||
ctx.add_class("top-button-box")
|
ctx.add_class("top-button-box")
|
||||||
|
|
||||||
|
self.set_homogeneous(True)
|
||||||
|
|
||||||
def _setup_signals(self):
|
def _setup_signals(self):
|
||||||
...
|
...
|
||||||
|
|
||||||
|
@ -33,13 +35,15 @@ class TopButtonBox(Gtk.ButtonBox):
|
||||||
...
|
...
|
||||||
|
|
||||||
def _load_widgets(self):
|
def _load_widgets(self):
|
||||||
|
box = Gtk.Box()
|
||||||
self.message_id_lbl = Gtk.Label(label = "Message ID: 0")
|
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.folder_choser_btn = FolderChoserButton()
|
||||||
|
|
||||||
self.add(self.message_id_lbl)
|
self.add(self.message_id_lbl)
|
||||||
self.add(self.folder_choser_lbl)
|
box.add(self.folder_choser_lbl)
|
||||||
self.add(self.folder_choser_btn)
|
box.add(self.folder_choser_btn)
|
||||||
|
self.add(box)
|
||||||
|
|
||||||
def update_message_id_lbl(self, id: int):
|
def update_message_id_lbl(self, id: int):
|
||||||
self.message_id_lbl.set_label(f"Message ID: {id}")
|
self.message_id_lbl.set_label(f"Message ID: {id}")
|
|
@ -27,7 +27,6 @@ class AltCommandEntry(Gtk.Entry):
|
||||||
ctx = self.get_style_context()
|
ctx = self.get_style_context()
|
||||||
ctx.add_class("alt-command-entry")
|
ctx.add_class("alt-command-entry")
|
||||||
|
|
||||||
self.set_hexpand(True)
|
|
||||||
self.set_placeholder_text("Alt Command:")
|
self.set_placeholder_text("Alt Command:")
|
||||||
|
|
||||||
def _setup_signals(self):
|
def _setup_signals(self):
|
||||||
|
@ -38,4 +37,3 @@ class AltCommandEntry(Gtk.Entry):
|
||||||
|
|
||||||
def _load_widgets(self):
|
def _load_widgets(self):
|
||||||
...
|
...
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,6 @@ class CommandEntry(Gtk.Entry):
|
||||||
ctx = self.get_style_context()
|
ctx = self.get_style_context()
|
||||||
ctx.add_class("command-entry")
|
ctx.add_class("command-entry")
|
||||||
|
|
||||||
self.set_hexpand(True)
|
|
||||||
self.set_placeholder_text("Command:")
|
self.set_placeholder_text("Command:")
|
||||||
|
|
||||||
def _setup_signals(self):
|
def _setup_signals(self):
|
||||||
|
@ -38,4 +37,3 @@ class CommandEntry(Gtk.Entry):
|
||||||
|
|
||||||
def _load_widgets(self):
|
def _load_widgets(self):
|
||||||
...
|
...
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,6 @@ class InitOptionsSourceView(GtkSource.View):
|
||||||
ctx = self.get_style_context()
|
ctx = self.get_style_context()
|
||||||
|
|
||||||
self.set_vexpand(True)
|
self.set_vexpand(True)
|
||||||
self.set_hexpand(True)
|
|
||||||
self.set_indent_width(4)
|
self.set_indent_width(4)
|
||||||
self.set_tab_width(4)
|
self.set_tab_width(4)
|
||||||
self.set_insert_spaces_instead_of_tabs(True)
|
self.set_insert_spaces_instead_of_tabs(True)
|
||||||
|
|
|
@ -88,7 +88,6 @@ class LspMessageSourceView(GtkSource.View):
|
||||||
ctx = self.get_style_context()
|
ctx = self.get_style_context()
|
||||||
|
|
||||||
self.set_vexpand(True)
|
self.set_vexpand(True)
|
||||||
self.set_hexpand(True)
|
|
||||||
self.set_indent_width(4)
|
self.set_indent_width(4)
|
||||||
self.set_tab_width(4)
|
self.set_tab_width(4)
|
||||||
self.set_insert_spaces_instead_of_tabs(True)
|
self.set_insert_spaces_instead_of_tabs(True)
|
||||||
|
|
|
@ -27,7 +27,6 @@ class SocketEntry(Gtk.Entry):
|
||||||
ctx = self.get_style_context()
|
ctx = self.get_style_context()
|
||||||
ctx.add_class("socket-entry")
|
ctx.add_class("socket-entry")
|
||||||
|
|
||||||
self.set_hexpand(True)
|
|
||||||
self.set_placeholder_text("Socket:")
|
self.set_placeholder_text("Socket:")
|
||||||
|
|
||||||
def _setup_signals(self):
|
def _setup_signals(self):
|
||||||
|
@ -38,4 +37,3 @@ class SocketEntry(Gtk.Entry):
|
||||||
|
|
||||||
def _load_widgets(self):
|
def _load_widgets(self):
|
||||||
...
|
...
|
||||||
|
|
||||||
|
|
|
@ -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()
|
|
@ -154,6 +154,9 @@ class LSPMessageBox(Gtk.Box):
|
||||||
message_size = len(message_str)
|
message_size = len(message_str)
|
||||||
message = f"Content-Length: {message_size}\r\n\r\n{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:
|
with self.write_lock:
|
||||||
self.lsp_process.stdin.write( message.encode("utf-8") )
|
self.lsp_process.stdin.write( message.encode("utf-8") )
|
||||||
self.lsp_process.stdin.flush()
|
self.lsp_process.stdin.flush()
|
||||||
|
@ -258,6 +261,8 @@ class LSPMessageBox(Gtk.Box):
|
||||||
GLib.idle_add(self.handle_lsp_response, response_id, lsp_result)
|
GLib.idle_add(self.handle_lsp_response, response_id, lsp_result)
|
||||||
|
|
||||||
def handle_lsp_response(self, id: int, 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()
|
keys = lsp_result.keys()
|
||||||
if "error" in keys:
|
if "error" in keys:
|
||||||
lsp_result = lsp_result["error"]
|
lsp_result = lsp_result["error"]
|
||||||
|
|
|
@ -12,6 +12,7 @@ from .enteries.command_entry import CommandEntry
|
||||||
from .enteries.socket_entry import SocketEntry
|
from .enteries.socket_entry import SocketEntry
|
||||||
from .enteries.init_options_source_view import InitOptionsSourceView
|
from .enteries.init_options_source_view import InitOptionsSourceView
|
||||||
from .buttons.info_link_button import InfoLinkButton
|
from .buttons.info_link_button import InfoLinkButton
|
||||||
|
from .log_list import LogList
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -48,12 +49,16 @@ class LSPUI(Gtk.Grid):
|
||||||
...
|
...
|
||||||
|
|
||||||
def _load_widgets(self):
|
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:")
|
alt_command_lbl = Gtk.Label(label="Alt Command:")
|
||||||
command_lbl = Gtk.Label(label="Command:")
|
command_lbl = Gtk.Label(label="Command:")
|
||||||
socket_lbl = Gtk.Label(label="Socket:")
|
socket_lbl = Gtk.Label(label="Socket:")
|
||||||
init_options_lbl = Gtk.Label(label="Initialization Options:")
|
init_options_lbl = Gtk.Label(label="Initialization Options")
|
||||||
message_box_lbl = Gtk.Label(label="Message Box:")
|
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.link_btn = InfoLinkButton(self._language.title(), self._data["info"])
|
||||||
self.alt_command_entry = AltCommandEntry( self._data["alt-command"] )
|
self.alt_command_entry = AltCommandEntry( self._data["alt-command"] )
|
||||||
|
@ -64,22 +69,29 @@ class LSPUI(Gtk.Grid):
|
||||||
|
|
||||||
init_options_lbl.set_margin_top(10)
|
init_options_lbl.set_margin_top(10)
|
||||||
message_box_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
|
# 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(alt_command_lbl, 0, 1, 1, 1)
|
||||||
self.attach(command_lbl, 0, 2, 1, 1)
|
self.attach(command_lbl, 0, 2, 1, 1)
|
||||||
self.attach(socket_lbl, 0, 3, 1, 1)
|
self.attach(socket_lbl, 0, 3, 1, 1)
|
||||||
|
|
||||||
self.attach(self.alt_command_entry, 1, 1, 2, 1)
|
self.attach(self.alt_command_entry, 1, 1, 2, 1)
|
||||||
self.attach(self.command_entry, 1, 2, 2, 1)
|
self.attach(self.command_entry, 1, 2, 2, 1)
|
||||||
self.attach(self.socket_entry, 1, 3, 2, 1)
|
self.attach(self.socket_entry, 1, 3, 2, 1)
|
||||||
|
|
||||||
self.attach(init_options_lbl, 0, 4, 3, 1)
|
self.attach(init_options_lbl, 0, 4, 3, 1)
|
||||||
self.attach(scrolled_win, 0, 5, 3, 1)
|
self.attach(scrolled_win1, 0, 5, 3, 1)
|
||||||
|
|
||||||
self.attach(message_box_lbl, 0, 6, 3, 1)
|
self.attach(message_box_lbl, 0, 6, 3, 1)
|
||||||
self.attach(self.message_box, 0, 7, 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)
|
Loading…
Reference in New Issue