diff --git a/src/core/containers/header_container.py b/src/core/containers/header_container.py index 0216562..9c8956f 100644 --- a/src/core/containers/header_container.py +++ b/src/core/containers/header_container.py @@ -6,7 +6,7 @@ gi.require_version('Gtk', '3.0') from gi.repository import Gtk # Application imports -from ..widgets.controls.open_files_button import OpenFilesButton +from ..widgets.buttons.open_files_button import OpenFilesButton from ..widgets.controls.transparency_scale import TransparencyScale diff --git a/src/core/widgets/__init__.py b/src/core/widgets/__init__.py index 72b072b..da519bc 100644 --- a/src/core/widgets/__init__.py +++ b/src/core/widgets/__init__.py @@ -1,3 +1,3 @@ """ Widgets Module -""" +""" \ No newline at end of file diff --git a/src/core/widgets/buttons/__init__.py b/src/core/widgets/buttons/__init__.py new file mode 100644 index 0000000..95cfa97 --- /dev/null +++ b/src/core/widgets/buttons/__init__.py @@ -0,0 +1,3 @@ +""" + Buttons Module +""" \ No newline at end of file diff --git a/src/core/widgets/buttons/bottom_button_box.py b/src/core/widgets/buttons/bottom_button_box.py new file mode 100644 index 0000000..ce7e260 --- /dev/null +++ b/src/core/widgets/buttons/bottom_button_box.py @@ -0,0 +1,51 @@ +# Python imports + +# Lib imports +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk + +# Application imports + + + +class BottomButtonBox(Gtk.ButtonBox): + def __init__(self): + super(BottomButtonBox, 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("bottom-button-box") + + def _setup_signals(self): + ... + + def _subscribe_to_events(self): + ... + + def _load_widgets(self): + self.initialize_btn = Gtk.Button(label = "Send Initialize 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.add(self.initialize_btn) + self.add(self.notification_btn) + self.add(self.message_btn) + self.add(self.start_stop_lsp_btn) + + def connect_widget_signals(self, parent): + if not parent: return + + 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 diff --git a/src/core/widgets/buttons/folder_choser_button.py b/src/core/widgets/buttons/folder_choser_button.py new file mode 100644 index 0000000..78fa782 --- /dev/null +++ b/src/core/widgets/buttons/folder_choser_button.py @@ -0,0 +1,40 @@ +# Python imports + +# Lib imports +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk + +# Application imports + + + +class FolderChoserButton(Gtk.FileChooserButton): + def __init__(self): + super(FolderChoserButton, 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("folder-choser-button") + + self.set_title("Chose Workspace") + self.set_action( Gtk.FileChooserAction.SELECT_FOLDER ) + self.set_uri("file:///home/abaddon/Coding/Projects/Active/Python_Projects/testing/lsp_manager") + + + def _setup_signals(self): + ... + + def _subscribe_to_events(self): + ... + + def _load_widgets(self): + ... diff --git a/src/core/widgets/buttons/info_link_button.py b/src/core/widgets/buttons/info_link_button.py new file mode 100644 index 0000000..25fad78 --- /dev/null +++ b/src/core/widgets/buttons/info_link_button.py @@ -0,0 +1,42 @@ +# Python imports + +# Lib imports +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk + +# Application imports + + + +class InfoLinkButton(Gtk.LinkButton): + def __init__(self, title: str = "[NO INFO TITLE PASSED]", + info_link: str or None = None): + super(InfoLinkButton, self).__init__() + + info_link_title = f"{title} LSP Info" if info_link else "Generic LSP Info" + info_link = info_link if info_link else "https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#contentPart" + + self.set_label(info_link_title) + self.set_uri(info_link) + + 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("info-link-button") + + def _setup_signals(self): + ... + + def _subscribe_to_events(self): + ... + + def _load_widgets(self): + ... diff --git a/src/core/widgets/controls/open_files_button.py b/src/core/widgets/buttons/open_files_button.py similarity index 100% rename from src/core/widgets/controls/open_files_button.py rename to src/core/widgets/buttons/open_files_button.py diff --git a/src/core/widgets/buttons/top_button_box.py b/src/core/widgets/buttons/top_button_box.py new file mode 100644 index 0000000..fa1703c --- /dev/null +++ b/src/core/widgets/buttons/top_button_box.py @@ -0,0 +1,45 @@ +# Python imports + +# Lib imports +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk + +# Application imports +from .folder_choser_button import FolderChoserButton + + + +class TopButtonBox(Gtk.ButtonBox): + def __init__(self): + super(TopButtonBox, 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("top-button-box") + + def _setup_signals(self): + ... + + def _subscribe_to_events(self): + ... + + def _load_widgets(self): + self.message_id_lbl = Gtk.Label(label = "Message ID: 0") + 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) + + 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/__init__.py b/src/core/widgets/enteries/__init__.py new file mode 100644 index 0000000..d1deb1f --- /dev/null +++ b/src/core/widgets/enteries/__init__.py @@ -0,0 +1,3 @@ +""" + Enteries Module +""" \ 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 new file mode 100644 index 0000000..e3cbf2e --- /dev/null +++ b/src/core/widgets/enteries/alt_command_entry.py @@ -0,0 +1,41 @@ +# Python imports + +# Lib imports +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk + +# Application imports + + + +class AltCommandEntry(Gtk.Entry): + def __init__(self, alt_command): + super(AltCommandEntry, self).__init__() + + self.set_text(alt_command) + + 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("alt-command-entry") + + self.set_hexpand(True) + self.set_placeholder_text("Alt Command:") + + def _setup_signals(self): + ... + + def _subscribe_to_events(self): + ... + + def _load_widgets(self): + ... + diff --git a/src/core/widgets/enteries/command_entry.py b/src/core/widgets/enteries/command_entry.py new file mode 100644 index 0000000..ed1bd7e --- /dev/null +++ b/src/core/widgets/enteries/command_entry.py @@ -0,0 +1,41 @@ +# Python imports + +# Lib imports +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk + +# Application imports + + + +class CommandEntry(Gtk.Entry): + def __init__(self, command): + super(CommandEntry, self).__init__() + + self.set_text(command) + + 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("command-entry") + + self.set_hexpand(True) + self.set_placeholder_text("Command:") + + def _setup_signals(self): + ... + + def _subscribe_to_events(self): + ... + + def _load_widgets(self): + ... + diff --git a/src/core/widgets/enteries/init_options_source_view.py b/src/core/widgets/enteries/init_options_source_view.py new file mode 100644 index 0000000..1b24493 --- /dev/null +++ b/src/core/widgets/enteries/init_options_source_view.py @@ -0,0 +1,60 @@ +# Python imports +import json + +# Lib imports +import gi +gi.require_version('GtkSource', '4') +from gi.repository import GtkSource + +# Application imports + + + +class InitOptionsSourceView(GtkSource.View): + def __init__(self, init_ops_data): + super(InitOptionsSourceView, self).__init__() + + init_ops_txt = json.dumps( init_ops_data, separators=(',', ':'), indent=4 ) + self.init_ops_txt = init_ops_txt if not init_ops_txt in ["", "{}"] else "{\n \n}" + + self._setup_styling() + self._setup_signals() + self._subscribe_to_events() + self._load_widgets() + + self.show_all() + + + def _setup_styling(self): + language_manager = GtkSource.LanguageManager() + style_scheme_manager = GtkSource.StyleSchemeManager() + style_scheme = style_scheme_manager.get_scheme("peacocks-in-space") + style_scheme = style_scheme if style_scheme else style_scheme_manager.get_scheme("solarized-dark") + buffer = self.get_buffer() + 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) + + ctx.add_class("init-options-source-view") + + buffer.set_language( language_manager.get_language("json") ) + buffer.set_style_scheme(style_scheme) + buffer.set_text(self.init_ops_txt) + + def _setup_signals(self): + ... + + def _subscribe_to_events(self): + ... + + def _load_widgets(self): + ... + + def get_text_str(self) -> str: + buffer = self.get_buffer() + start, end = buffer.get_bounds() + return buffer.get_text(start, end, True) diff --git a/src/core/widgets/enteries/lsp_message_source_view.py b/src/core/widgets/enteries/lsp_message_source_view.py new file mode 100644 index 0000000..1963202 --- /dev/null +++ b/src/core/widgets/enteries/lsp_message_source_view.py @@ -0,0 +1,115 @@ +# Python imports + +# Lib imports +import gi +gi.require_version('GtkSource', '4') +from gi.repository import GtkSource + +# Application imports + + + +# Request type formatting +# https://github.com/microsoft/multilspy/blob/main/src/multilspy/language_server.py#L417 + +content_part = """{ + "method": "textDocument/definition", + "params": { + "textDocument": { + "uri": "file:///home/abaddon/Coding/Projects/Active/Python_Projects/000_Usable/gtk/LSP-Manager/src/core/widgets/lsp_message_box.py", + "languageId": "python3", + "version": 1, + "text": "" + }, + "position": { + "line": 5, + "character": 12, + "offset": 0 + } + } +} +""" + +references_query = """{ + + "method": "textDocument/references", + "params": { + "context": { + "includeDeclaration": false + }, + "textDocument": { + "uri": "file:///home/abaddon/Coding/Projects/Active/Python_Projects/000_Usable/gtk/LSP-Manager/src/core/widgets/lsp_message_box.py", + "languageId": "python3", + "version": 1, + "text": "" + }, + "position": { + "line": 30, + "character": 13, + "offset": 0 + } + } +} +""" + +symbols_query = """{ + "method": "textDocument/documentSymbol", + "params": { + "textDocument": { + "uri": "file:///home/abaddon/Coding/Projects/Active/Python_Projects/000_Usable/gtk/LSP-Manager/src/core/widgets/lsp_message_box.py", + "languageId": "python3", + "version": 1, + "text": "" + } + } +} +""" + + + +class LspMessageSourceView(GtkSource.View): + def __init__(self): + super(LspMessageSourceView, self).__init__() + + self._setup_styling() + self._setup_signals() + self._subscribe_to_events() + self._load_widgets() + + self.show_all() + + + def _setup_styling(self): + language_manager = GtkSource.LanguageManager() + style_scheme_manager = GtkSource.StyleSchemeManager() + style_scheme = style_scheme_manager.get_scheme("peacocks-in-space") + style_scheme = style_scheme if style_scheme else style_scheme_manager.get_scheme("solarized-dark") + buffer = self.get_buffer() + 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) + + ctx.add_class("lsp-message-source-view") + + buffer.set_language( language_manager.get_language("json") ) + buffer.set_style_scheme(style_scheme) + buffer.set_text(content_part) + + + def _setup_signals(self): + ... + + def _subscribe_to_events(self): + ... + + def _load_widgets(self): + ... + + def get_text_str(self) -> str: + buffer = self.get_buffer() + start, end = buffer.get_bounds() + return buffer.get_text(start, end, True) diff --git a/src/core/widgets/enteries/socket_entry.py b/src/core/widgets/enteries/socket_entry.py new file mode 100644 index 0000000..f6fc11f --- /dev/null +++ b/src/core/widgets/enteries/socket_entry.py @@ -0,0 +1,41 @@ +# Python imports + +# Lib imports +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk + +# Application imports + + + +class SocketEntry(Gtk.Entry): + def __init__(self, socket_command): + super(SocketEntry, self).__init__() + + self.set_text(socket_command) + + 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("socket-entry") + + self.set_hexpand(True) + self.set_placeholder_text("Socket:") + + def _setup_signals(self): + ... + + def _subscribe_to_events(self): + ... + + def _load_widgets(self): + ... + diff --git a/src/core/widgets/lsp_message_box.py b/src/core/widgets/lsp_message_box.py index 2eb25df..d8d2917 100644 --- a/src/core/widgets/lsp_message_box.py +++ b/src/core/widgets/lsp_message_box.py @@ -14,65 +14,9 @@ from gi.repository import GLib from gi.repository import GtkSource # Application imports - - - -# Request type formatting -# https://github.com/microsoft/multilspy/blob/main/src/multilspy/language_server.py#L417 - -content_part = """{ - "method": "textDocument/definition", - "params": { - "textDocument": { - "uri": "file:///home/abaddon/Coding/Projects/Active/Python_Projects/000_Usable/gtk/LSP-Manager/src/core/widgets/lsp_message_box.py", - "languageId": "python3", - "version": 1, - "text": "" - }, - "position": { - "line": 5, - "character": 12, - "offset": 0 - } - } -} -""" - -references_query = """{ - - "method": "textDocument/references", - "params": { - "context": { - "includeDeclaration": false - }, - "textDocument": { - "uri": "file:///home/abaddon/Coding/Projects/Active/Python_Projects/000_Usable/gtk/LSP-Manager/src/core/widgets/lsp_message_box.py", - "languageId": "python3", - "version": 1, - "text": "" - }, - "position": { - "line": 43, - "character": 13, - "offset": 0 - } - } -} -""" - -symbols_query = """{ - "method": "textDocument/documentSymbol", - "params": { - "textDocument": { - "uri": "file:///home/abaddon/Coding/Projects/Active/Python_Projects/000_Usable/gtk/LSP-Manager/src/core/widgets/lsp_message_box.py", - "languageId": "python3", - "version": 1, - "text": "" - } - } -} - -""" +from .buttons.top_button_box import TopButtonBox +from .enteries.lsp_message_source_view import LspMessageSourceView +from .buttons.bottom_button_box import BottomButtonBox @@ -118,77 +62,42 @@ class LSPMessageBox(Gtk.Box): ... def _load_widgets(self): - scrolled_win = Gtk.ScrolledWindow() - self.top_buttons = Gtk.ButtonBox() - self.buttons = Gtk.ButtonBox() - - file_choser_lbl = Gtk.Label(label="Workspace Folder:") - self.file_choser_btn = Gtk.FileChooserButton() - - initialize_btn = Gtk.Button(label="Send Initialize Message") - notification_btn = Gtk.Button(label="Send Notification Message") - message_btn = Gtk.Button(label="Send Message") - start_stop_lsp_btn = Gtk.Button(label="Start LSP") - - source_view = GtkSource.View() - language_manager = GtkSource.LanguageManager() - style_scheme_manager = GtkSource.StyleSchemeManager() - style_scheme = style_scheme_manager.get_scheme("peacocks-in-space") - style_scheme = style_scheme if style_scheme else style_scheme_manager.get_scheme("solarized-dark") - self.buffer = source_view.get_buffer() - - self.file_choser_btn.set_title("Chose Workspace") - self.file_choser_btn.set_action( Gtk.FileChooserAction.SELECT_FOLDER ) - self.file_choser_btn.set_uri("file:///home/abaddon/Coding/Projects/Active/Python_Projects/testing/lsp_manager") - - self.buffer.set_language( language_manager.get_language("json") ) - self.buffer.set_style_scheme(style_scheme) - self.buffer.set_text(content_part) - - source_view.set_indent_width(4) - source_view.set_tab_width(4) - source_view.set_insert_spaces_instead_of_tabs(True) - source_view.set_hexpand(True) - source_view.set_vexpand(True) - - initialize_btn.connect("clicked", self.send_initialize_message) - notification_btn.connect("clicked", self.send_notification_message) - message_btn.connect("clicked", self.send_message_message) - start_stop_lsp_btn.connect("clicked", self.start_stop_lsp) - - scrolled_win.add(source_view) - - self.top_buttons.add(Gtk.Label(label=f"Message ID: {self._message_id}")) - self.top_buttons.add(file_choser_lbl) - self.top_buttons.add(self.file_choser_btn) - - self.buttons.add(initialize_btn) - self.buttons.add(notification_btn) - self.buttons.add(message_btn) - self.buttons.add(start_stop_lsp_btn) + scrolled_win = Gtk.ScrolledWindow() + self.lsp_msg_src_vw = LspMessageSourceView() + self.top_buttons = TopButtonBox() + self.bottom_buttons = BottomButtonBox() + scrolled_win.add(self.lsp_msg_src_vw) self.add(self.top_buttons) self.add(scrolled_win) - self.add(self.buttons) + self.add(self.bottom_buttons) + + self.bottom_buttons.connect_widget_signals(self) self._disable_buttons() - start_stop_lsp_btn.set_sensitive(True) - - def update_message_id_label(self): - self.top_buttons.get_children()[0].set_label(f"Message ID: {self._message_id}") - def post_int_run(self): - lsp_ui = self.get_parent() - self.alt_command_entry = lsp_ui.alt_command_entry - self.command_entry = lsp_ui.command_entry - self.socket_entry = lsp_ui.socket_entry - self.init_options_buffer = lsp_ui.init_options_text_vw.get_buffer() - del lsp_ui - + 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): - workspace_file = self.file_choser_btn.get_file().get_path() - workspace_uri = self.file_choser_btn.get_uri() - folder_name = os.path.basename(workspace_file) + parent = self.get_parent() + folder_choser_btn = self.top_buttons.folder_choser_btn + + init_ops = parent.init_ops_src_vw.get_text_str() + workspace_file = folder_choser_btn.get_file().get_path() + workspace_uri = folder_choser_btn.get_uri() + folder_name = os.path.basename(workspace_file) self._lsp_init_data["processId"] = settings_manager.get_app_pid() self._lsp_init_data["rootPath"] = workspace_file @@ -200,13 +109,17 @@ class LSPMessageBox(Gtk.Box): } ] - start, end = self.init_options_buffer.get_bounds() - init_ops = self.init_options_buffer.get_text(start, end, True) self._lsp_init_data["initializationOptions"] = json.loads(init_ops) self.make_request("initialize", self._lsp_init_data) button.set_sensitive(False) + del init_ops + del workspace_file + del workspace_uri + del folder_name + del parent + def send_initialized_message(self): self.make_request("initialized") @@ -223,6 +136,11 @@ class LSPMessageBox(Gtk.Box): self.lsp_process.stdin.write( message.encode("utf-8") ) self.lsp_process.stdin.flush() + del data + del message_str + del message_size + del message + def make_request(self, method: str, params: {} = {}): self._monitor_lsp_response() @@ -243,15 +161,16 @@ class LSPMessageBox(Gtk.Box): self._message_id += 1 self.update_message_id_label() + del data + del message_str + del message_size + del message - def send_notification_message(self, button, eve = None): + def send_notification(self, button, eve = None): pass - def send_message_message(self, button, eve = None): - start, end = self.buffer.get_bounds() - data = self.buffer.get_text(start, end, True) - message = json.loads(data) - + def send_message(self, button, eve = None): + message = json.loads( self.lsp_msg_src_vw.get_text_str() ) self.make_request(message["method"], message["params"]) def start_stop_lsp(self, button, eve = None): @@ -267,12 +186,12 @@ class LSPMessageBox(Gtk.Box): button.set_label("Start LSP") self.stop_lsp() self._disable_buttons() - button.set_sensitive(True) def start_lsp(self): - _command: str = self.alt_command_entry.get_text() - # _command: str = self.command_entry.get_text() - # _command: str = self.socket_entry.get_text() + parent = self.get_parent() + _command: str = parent.alt_command_entry.get_text() + # _command: str = parent.command_entry.get_text() + # _command: str = parent.socket_entry.get_text() command: [] = _command.split() if len( _command.split() ) > 0 else [ _command ] self.lsp_process = subprocess.Popen( command, @@ -368,13 +287,4 @@ class LSPMessageBox(Gtk.Box): print( str(id) ) print(lsp_result) print() - print() - - def _enable_buttons(self): - for button in self.buttons.get_children(): - button.set_sensitive(True) - - def _disable_buttons(self): - for button in self.buttons.get_children(): - button.set_sensitive(False) - \ No newline at end of file + print() \ No newline at end of file diff --git a/src/core/widgets/lsp_ui.py b/src/core/widgets/lsp_ui.py index 4b681e6..b5bd515 100644 --- a/src/core/widgets/lsp_ui.py +++ b/src/core/widgets/lsp_ui.py @@ -1,15 +1,17 @@ # Python imports -import json # Lib imports import gi gi.require_version('Gtk', '3.0') -gi.require_version('GtkSource', '4') from gi.repository import Gtk -from gi.repository import GtkSource # Application imports from .lsp_message_box import LSPMessageBox +from .enteries.alt_command_entry import AltCommandEntry +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 @@ -17,23 +19,14 @@ class LSPUI(Gtk.Grid): def __init__(self, language, data): super(LSPUI, self).__init__() - self._data = data - self._language = language - self._no_init_ops_text = "{\n \n}" - - self.alt_command_entry = Gtk.Entry() - self.command_entry = Gtk.Entry() - self.socket_entry = Gtk.Entry() - self.init_options_text_vw = GtkSource.View() - self.message_box = LSPMessageBox() + self._data = data + self._language = language self._setup_styling() self._setup_signals() self._subscribe_to_events() self._load_widgets() - self.message_box.post_int_run() - self.show_all() @@ -48,16 +41,6 @@ class LSPUI(Gtk.Grid): self.set_margin_left(10) self.set_margin_right(10) - self.alt_command_entry.set_hexpand(True) - self.command_entry.set_hexpand(True) - self.socket_entry.set_hexpand(True) - self.init_options_text_vw.set_vexpand(True) - self.init_options_text_vw.set_hexpand(True) - - self.alt_command_entry.set_placeholder_text("Alt Command:") - self.command_entry.set_placeholder_text("Command:") - self.socket_entry.set_placeholder_text("Socket") - def _setup_signals(self): ... @@ -65,48 +48,27 @@ class LSPUI(Gtk.Grid): ... def _load_widgets(self): - _language_manager = GtkSource.LanguageManager() - _style_scheme_manager = GtkSource.StyleSchemeManager() - style_scheme = _style_scheme_manager.get_scheme("peacocks-in-space") - style_scheme = style_scheme if style_scheme else _style_scheme_manager.get_scheme("solarized-dark") - buffer = self.init_options_text_vw.get_buffer() - scrolled_win1 = Gtk.ScrolledWindow() + scrolled_win = Gtk.ScrolledWindow() + 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:") - buffer.set_language( _language_manager.get_language("json") ) - buffer.set_style_scheme(style_scheme) + self.link_btn = InfoLinkButton(self._language.title(), self._data["info"]) + self.alt_command_entry = AltCommandEntry( self._data["alt-command"] ) + self.command_entry = CommandEntry( self._data["command"] ) + self.socket_entry = SocketEntry( self._data["socket"] ) + self.init_ops_src_vw = InitOptionsSourceView( self._data["initialization-options"] ) + self.message_box = LSPMessageBox() - info_link = self._data["info"] - info_link_title = self._language.title() + " LSP Info" if info_link else "Generic LSP Info" - info_link = info_link if info_link else "https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#contentPart" - link_btn = Gtk.LinkButton(info_link) - - 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:") - - self.alt_command_entry.set_text(self._data["alt-command"]) - self.command_entry.set_text(self._data["command"]) - self.socket_entry.set_text(self._data["socket"]) - - init_ops_txt = json.dumps( self._data["initialization-options"], separators=(',', ':'), indent=4 ) - init_ops_txt = init_ops_txt if not init_ops_txt in ["", "{}"] else self._no_init_ops_text - buffer.set_text(init_ops_txt) - - link_btn.set_label(info_link_title) init_options_lbl.set_margin_top(10) message_box_lbl.set_margin_top(10) - self.init_options_text_vw.set_indent_width(4) - self.init_options_text_vw.set_tab_width(4) - self.init_options_text_vw.set_insert_spaces_instead_of_tabs(True) - self.init_options_text_vw.set_hexpand(True) - self.init_options_text_vw.set_vexpand(True) - scrolled_win1.add(self.init_options_text_vw) + scrolled_win.add(self.init_ops_src_vw) # child, left, top, width, height - self.attach(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) @@ -117,8 +79,7 @@ class LSPUI(Gtk.Grid): self.attach(self.socket_entry, 1, 3, 2, 1) self.attach(init_options_lbl, 0, 4, 3, 1) - self.attach(scrolled_win1, 0, 5, 3, 1) + self.attach(scrolled_win, 0, 5, 3, 1) self.attach(message_box_lbl, 0, 6, 3, 1) self.attach(self.message_box, 0, 7, 3, 1) -