From 63eec6f1af66e0ed88744d819500629d2ffb9b06 Mon Sep 17 00:00:00 2001 From: itdominator <1itdominator@gmail.com> Date: Sat, 7 Sep 2024 16:46:57 -0500 Subject: [PATCH] Refactored buttons and call structures --- src/core/containers/center_container.py | 2 +- src/core/widgets/buttons/bottom_button_box.py | 103 +++++++++++++++--- src/core/widgets/log_list.py | 31 ++---- src/core/widgets/lsp_message_box.py | 74 +++++-------- src/core/widgets/lsp_notebook.py | 16 ++- src/core/widgets/lsp_ui.py | 7 +- src/core/widgets/lsp_window.py | 38 ------- 7 files changed, 139 insertions(+), 132 deletions(-) delete mode 100644 src/core/widgets/lsp_window.py diff --git a/src/core/containers/center_container.py b/src/core/containers/center_container.py index 329fd85..45d3d1f 100644 --- a/src/core/containers/center_container.py +++ b/src/core/containers/center_container.py @@ -21,7 +21,7 @@ class CenterContainer(Gtk.Box): self._subscribe_to_events() self._load_widgets() - self.show_all() + self.show() def _setup_styling(self): diff --git a/src/core/widgets/buttons/bottom_button_box.py b/src/core/widgets/buttons/bottom_button_box.py index ce7e260..9a0ed64 100644 --- a/src/core/widgets/buttons/bottom_button_box.py +++ b/src/core/widgets/buttons/bottom_button_box.py @@ -9,43 +9,112 @@ from gi.repository import Gtk -class BottomButtonBox(Gtk.ButtonBox): +class BottomButtonBox(Gtk.Box): def __init__(self): super(BottomButtonBox, self).__init__() self._setup_styling() self._setup_signals() self._subscribe_to_events() - self._load_widgets() + self._load_buttons() - self.show_all() + self.show() def _setup_styling(self): ctx = self.get_style_context() ctx.add_class("bottom-button-box") + self.set_property("halign", Gtk.Align.END) + def _setup_signals(self): ... def _subscribe_to_events(self): ... - def _load_widgets(self): - self.initialize_btn = Gtk.Button(label = "Send Initialize Message") + def _load_buttons(self): + self.initialize_btn = Gtk.Button(label = "Initialize Message") + self.initialized_btn = Gtk.Button(label = "Initialized Message") self.notification_btn = Gtk.Button(label = "Send Notification") - self.message_btn = Gtk.Button(label = "Send Message") - self.start_stop_lsp_btn = Gtk.Button(label = "Start LSP") + self.request_btn = Gtk.Button(label = "Send Request") + self.full_init_btn = Gtk.Button(label = "Full Init") + self.start_stop_lsp_btn = Gtk.Button(label = "LSP") + self.start_stop_lsp_btn.running = False - self.add(self.initialize_btn) - self.add(self.notification_btn) - self.add(self.message_btn) - self.add(self.start_stop_lsp_btn) + self.initialize_btn.connect("clicked", self.send_initialize_message) + self.initialized_btn.connect("clicked", self.send_initialized_message) + self.notification_btn.connect("clicked", self.send_notification) + self.request_btn.connect("clicked", self.send_request) + self.start_stop_lsp_btn.connect("clicked", self.start_stop_lsp) + self.full_init_btn.connect("clicked", self.full_init) - def connect_widget_signals(self, parent): - if not parent: return + self.start_stop_lsp_btn.show() + self.full_init_btn.show() - self.initialize_btn.connect("clicked", parent.send_initialize_message) - self.notification_btn.connect("clicked", parent.send_notification) - self.message_btn.connect("clicked", parent.send_message) - self.start_stop_lsp_btn.connect("clicked", parent.start_stop_lsp) \ No newline at end of file + for child in [ + self.initialize_btn, + self.initialized_btn, + self.notification_btn, + self.request_btn, + self.start_stop_lsp_btn, + self.full_init_btn + ]: + self.add(child) + # self.set_child_secondary(child, True) + child.set_always_show_image(True) + child.set_image( Gtk.Image.new_from_icon_name("gtk-media-play", Gtk.IconSize.BUTTON) ) + + self.start_stop_lsp_btn.set_image( Gtk.Image.new_from_icon_name("gtk-media-play", Gtk.IconSize.BUTTON) ) + self.full_init_btn.set_image( Gtk.Image.new_from_icon_name("gtk-media-play", Gtk.IconSize.BUTTON) ) + + def send_initialize_message(self, button, eve = None): + button.hide() + self.initialized_btn.show() + self.get_parent().send_initialize_message() + + def send_initialized_message(self, button, eve = None): + self.initialize_btn.hide() + self.initialized_btn.hide() + self.notification_btn.show() + self.request_btn.show() + + self.get_parent().send_initialized_message() + + def send_notification(self, button, eve = None): + children = self.get_children() + self.get_parent().button_send_notification() + + def send_request(self, button, eve = None): + children = self.get_children() + self.get_parent().button_send_request() + + def start_stop_lsp(self, button, eve = None): + if not button.running: + button.running = True + + self.initialize_btn.show() + self.full_init_btn.hide() + + button.set_image( Gtk.Image.new_from_icon_name("gtk-media-stop", Gtk.IconSize.BUTTON) ) + else: + self.rest_buttons() + + self.get_parent().start_stop_lsp() + + def full_init(self, button, eve = None): + button.hide() + self.start_stop_lsp(self.start_stop_lsp_btn) + self.send_initialize_message(self.initialize_btn) + self.send_initialized_message(self.initialized_btn) + + def rest_buttons(self): + self.start_stop_lsp_btn.running = False + + self.initialize_btn.hide() + self.initialized_btn.hide() + self.notification_btn.hide() + self.request_btn.hide() + self.full_init_btn.show() + + self.start_stop_lsp_btn.set_image( Gtk.Image.new_from_icon_name("gtk-media-play", Gtk.IconSize.BUTTON) ) diff --git a/src/core/widgets/log_list.py b/src/core/widgets/log_list.py index f8d1825..2a6f09c 100644 --- a/src/core/widgets/log_list.py +++ b/src/core/widgets/log_list.py @@ -46,27 +46,16 @@ class LogList(Gtk.ListBox): def _load_widgets(self): ... - def add_log_entry(self, m_type: str, data: str or dict): - message = None - json_data = None + def add_log_entry(self, m_type: str, data: dict): + message = json.dumps(data, separators = (',', ':'), indent = 4) - if isinstance(data, str): - parts = data.split("\n", 2) - jsonStr = parts[2] - json_data = json.loads(jsonStr) - messageStr = json.dumps(json_data, separators = (',', ':'), indent = 4) - message = f"{parts[0]}\r\n\r\n{messageStr}" - - if isinstance(data, dict): - json_data = data - message = json.dumps(data, separators = (',', ':'), indent = 4) - - frame = Gtk.Frame() - revealer = Gtk.Revealer() - label = Gtk.Label(label=message) + frame = Gtk.Frame() + revealer = Gtk.Revealer() + label = Gtk.Label(label=message) + lbl_str = f"> {m_type} Message: {data['id']}" if "id" in data.keys() else f"> {m_type} Notification" label.set_xalign(0.010) - frame.set_label( f"> {m_type}: {json_data['id']}" if "id" in json_data.keys() else f"> {m_type}" ) + frame.set_label(lbl_str) frame.set_label_align(0.010, 0.5) revealer.set_reveal_child(False) @@ -77,4 +66,8 @@ class LogList(Gtk.ListBox): frame.show_all() del message - del json_data + del lbl_str + + def clear(self): + for child in self.get_children(): + self.remove(child) diff --git a/src/core/widgets/lsp_message_box.py b/src/core/widgets/lsp_message_box.py index f826357..be2cf84 100644 --- a/src/core/widgets/lsp_message_box.py +++ b/src/core/widgets/lsp_message_box.py @@ -44,7 +44,7 @@ class LSPMessageBox(Gtk.Box): self._subscribe_to_events() self._load_widgets() - self.show_all() + self.show() def _setup_styling(self): @@ -67,30 +67,17 @@ class LSPMessageBox(Gtk.Box): self.top_buttons = TopButtonBox() self.bottom_buttons = BottomButtonBox() + scrolled_win.show_all() + scrolled_win.add(self.lsp_msg_src_vw) self.add(self.top_buttons) self.add(scrolled_win) self.add(self.bottom_buttons) - self.bottom_buttons.connect_widget_signals(self) - - self._disable_buttons() - - def _enable_buttons(self): - for button in self.bottom_buttons.get_children(): - button.set_sensitive(True) - - def _disable_buttons(self): - for button in self.bottom_buttons.get_children(): - button.set_sensitive(False) - - self.bottom_buttons.get_children()[-1].set_sensitive(True) - - def update_message_id_label(self): self.top_buttons.update_message_id_lbl(self._message_id) - def send_initialize_message(self, button, eve = None): + def send_initialize_message(self): parent = self.get_parent() folder_choser_btn = self.top_buttons.folder_choser_btn @@ -110,9 +97,7 @@ class LSPMessageBox(Gtk.Box): ] self._lsp_init_data["initializationOptions"] = json.loads(init_ops) - - self.make_request("initialize", self._lsp_init_data) - button.set_sensitive(False) + self.send_request("initialize", self._lsp_init_data) del init_ops del workspace_file @@ -121,27 +106,20 @@ class LSPMessageBox(Gtk.Box): del parent def send_initialized_message(self): - self.make_request("initialized") + self.send_notification("initialized") - def make_notification(self, method: str, params: {} = {}): + def send_notification(self, method: str, params: {} = {}): data = { "jsonrpc": "2.0", "method": method, "params": params } - message_str = json.dumps(data) - message_size = len(message_str) - message = f"Content-Length: {message_size}\r\n\r\n{message_str}" - self.lsp_process.stdin.write( message.encode("utf-8") ) - self.lsp_process.stdin.flush() + self._send_message(data) del data - del message_str - del message_size - del message - def make_request(self, method: str, params: {} = {}): + def send_request(self, method: str, params: {} = {}): self._monitor_lsp_response() data = { @@ -150,44 +128,49 @@ class LSPMessageBox(Gtk.Box): "method": method, "params": params } + + self._message_id += 1 + self._send_message(data) + + del data + + def _send_message(self, data: dict): + if not data: return + message_str = json.dumps(data) 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("Client Message", message) + self.get_parent().log_list.add_log_entry("Client", data) with self.write_lock: self.lsp_process.stdin.write( message.encode("utf-8") ) self.lsp_process.stdin.flush() - self._message_id += 1 self.update_message_id_label() - del data del message_str del message_size del message - def send_notification(self, button, eve = None): - pass - - def send_message(self, button, eve = None): + def button_send_notification(self): message = json.loads( self.lsp_msg_src_vw.get_text_str() ) - self.make_request(message["method"], message["params"]) + self.send_notification(message["method"], message["params"]) - def start_stop_lsp(self, button, eve = None): + def button_send_request(self): + message = json.loads( self.lsp_msg_src_vw.get_text_str() ) + self.send_request(message["method"], message["params"]) + + def start_stop_lsp(self): if self._lsp_pid == -1: pid = self.start_lsp() if not pid: return - button.set_label("Stop LSP") self._lsp_pid = pid self._monitor_lsp_response() - self._enable_buttons() else: - button.set_label("Start LSP") self.stop_lsp() - self._disable_buttons() + self.get_parent().log_list.clear() def start_lsp(self): parent = self.get_parent() @@ -260,7 +243,7 @@ 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 Response Message", lsp_result) + self.get_parent().log_list.add_log_entry("LSP Response", lsp_result) keys = lsp_result.keys() if "error" in keys: @@ -276,7 +259,6 @@ class LSPMessageBox(Gtk.Box): keys = lsp_result.keys() if "capabilities" in keys: logger.debug(f"LSP Capabilities Response:\n{lsp_result}") - self.send_initialized_message() if isinstance(lsp_result, list): diff --git a/src/core/widgets/lsp_notebook.py b/src/core/widgets/lsp_notebook.py index 76c778f..852666b 100644 --- a/src/core/widgets/lsp_notebook.py +++ b/src/core/widgets/lsp_notebook.py @@ -4,11 +4,9 @@ import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk -from gi.repository import GLib # Application imports -from .lsp_window import LSPWindow - +from .lsp_ui import LSPUI class LSPNotebook(Gtk.Notebook): @@ -23,7 +21,7 @@ class LSPNotebook(Gtk.Notebook): self._subscribe_to_events() self._load_widgets() - self.show_all() + self.show() def _setup_styling(self): @@ -46,9 +44,9 @@ class LSPNotebook(Gtk.Notebook): if "hidden" in data.keys() and data["hidden"]: continue - tab_widget = Gtk.Label(label=language) - lsp_window = LSPWindow(language, data) + tab_widget = Gtk.Label(label = language) + lsp_ui = LSPUI(language, data) - self.append_page(lsp_window, tab_widget) - self.set_tab_detachable(lsp_window, False) - self.set_tab_reorderable(lsp_window, False) \ No newline at end of file + self.append_page(lsp_ui, tab_widget) + self.set_tab_detachable(lsp_ui, False) + self.set_tab_reorderable(lsp_ui, False) \ No newline at end of file diff --git a/src/core/widgets/lsp_ui.py b/src/core/widgets/lsp_ui.py index 8d42b7c..4930d9f 100644 --- a/src/core/widgets/lsp_ui.py +++ b/src/core/widgets/lsp_ui.py @@ -28,7 +28,7 @@ class LSPUI(Gtk.Grid): self._subscribe_to_events() self._load_widgets() - self.show_all() + self.show() def _setup_styling(self): @@ -94,4 +94,7 @@ class LSPUI(Gtk.Grid): 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 + self.attach(scrolled_win2, 3, 1, 3, 11) + + for child in self.get_children(): + child.show() \ No newline at end of file diff --git a/src/core/widgets/lsp_window.py b/src/core/widgets/lsp_window.py deleted file mode 100644 index f41b6eb..0000000 --- a/src/core/widgets/lsp_window.py +++ /dev/null @@ -1,38 +0,0 @@ -# Python imports - -# Lib imports -import gi -gi.require_version('Gtk', '3.0') -from gi.repository import Gtk - -# Application imports -from .lsp_ui import LSPUI - - - -class LSPWindow(Gtk.ScrolledWindow): - def __init__(self, language, data): - super(LSPWindow, self).__init__() - - self._builder = settings_manager.get_builder() - - self._setup_styling() - self._setup_signals() - self._subscribe_to_events() - self._load_widgets(language, data) - - - def _setup_styling(self): - ctx = self.get_style_context() - ctx.add_class("lsp-window") - - def _setup_signals(self): - ... - - def _subscribe_to_events(self): - ... - - def _load_widgets(self, language, data): - viewport = Gtk.Viewport() - viewport.add( LSPUI(language, data) ) - self.add(viewport)