From fa12fc36f9c5fb8030091f765f89d0ff5479e290 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Wed, 8 Apr 2026 01:24:17 +0900 Subject: [PATCH] feat: dynamic notes dialog (WIP) --- dzgui/controllers/mc.py | 21 ++++++++++++++++++++- dzgui/managers/contextmenu.py | 7 ++----- dzgui/model/servers.py | 7 +++++++ dzgui/views/base.py | 1 + dzgui/views/components/entry.py | 27 +++++++++++++++++++++------ 5 files changed, 51 insertions(+), 12 deletions(-) diff --git a/dzgui/controllers/mc.py b/dzgui/controllers/mc.py index b1ae307..6b636f8 100644 --- a/dzgui/controllers/mc.py +++ b/dzgui/controllers/mc.py @@ -103,6 +103,7 @@ class StoredFunc: class Controller(GObject.GObject): def __init__(self) -> None: self.dist_cache: dict[str, "Haversine", "ServerTab"] = {} + self.notes_cache: dict[str, str] = {} self.mediator = AppNavigation() self.prefs: UserPrefs self.cleanup_func: StoredFunc = None @@ -610,7 +611,6 @@ class Controller(GObject.GObject): ConnectionManager(self).connect_by_ip(addr) def connect_by_record(self, record: "Record") -> None: - # NOTE: calls on thread ConnectionManager(self).connect_by_record(record) def get_details(self, record: "Record") -> None: @@ -626,3 +626,22 @@ class Controller(GObject.GObject): def open_workshop_page(self, mod: str) -> None: cmd = self.query_config(Preferences.CLIENT) open_workshop_page(mod, cmd) + + def get_note(self) -> None: + # TODO: load from file + tv = self.get_active_treeview() + record = tv.get_record_string() + try: + text = self.notes_cache[record] + return text + except Exception: + return "" + + def add_note(self, note: str) -> None: + print(note) + + def delete_note(self) -> None: + tv = self.get_active_treeview() + record = tv.get_record_string() + del self.notes_cache[record] + # TODO: serialize into file diff --git a/dzgui/managers/contextmenu.py b/dzgui/managers/contextmenu.py index 80f2d2e..590fd18 100644 --- a/dzgui/managers/contextmenu.py +++ b/dzgui/managers/contextmenu.py @@ -7,6 +7,7 @@ from dzgui.util import strings from dzgui.util.clip import copy_clipboard from dzgui.util.open_links import open_workshop_page +from dzgui.views.dialogs.note import NoteDialog from dzgui.views.trees.tree_servers import ServerTreeView @@ -33,14 +34,9 @@ class ContextMenuManager: match action: # UNTHREADED case ContextMenu.ADD_NOTE: - from dzgui.views.dialogs.note import NoteDialog - dialog = NoteDialog(self.controller) dialog.run() print("DEBUG: unimplemented") - # dialog = NoteDialog() - # spawn edit dialog and update cache, notes file - pass case ContextMenu.COPY_LOG_CLIPBOARD: self.copy_log() case ContextMenu.COPY_SERVER_IP: @@ -48,6 +44,7 @@ class ContextMenuManager: case ContextMenu.COPY_SERVER_NAME: self.copy_server_name() case ContextMenu.DELETE_MOD: + print("DEBUG: unimplemented") # self.delete_single_mod() # TODO: connect to emitter automatically # Gtk.TreeModel, row-inserted/row-deleted diff --git a/dzgui/model/servers.py b/dzgui/model/servers.py index 01c6acc..39be124 100644 --- a/dzgui/model/servers.py +++ b/dzgui/model/servers.py @@ -187,6 +187,8 @@ class ServerModelManager: parsed = Servers.parse_json(servers) self._push_data(parsed) + # TODO: add cleanup? + # FIXME: use "adding server" string @call_on_thread(dialog.querying) def add_by_id(self, addr: str) -> None: config_man = self.controller.get_config_man() @@ -194,11 +196,16 @@ class ServerModelManager: res = Servers.query_by_id(addr, key) self._parse_single_record(res) + # TODO: add cleanup? + # FIXME: use "adding server" string @call_on_thread(dialog.querying) def add_by_ip(self, addr: str) -> None: res = Servers.query_by_ip(addr) self._parse_single_record(res) + # TODO: add cleanup? + # FIXME: use "adding server" string + @call_on_thread(dialog.querying) def add_by_record(self, record: Servers.Record) -> None: res = Servers.query_by_record(record) self._parse_single_record(res) diff --git a/dzgui/views/base.py b/dzgui/views/base.py index 530d0bf..22ecab6 100644 --- a/dzgui/views/base.py +++ b/dzgui/views/base.py @@ -366,6 +366,7 @@ class Grid(Gtk.Grid): class App(Gtk.Application): def __init__(self, prefs: "UserPrefs") -> None: + GLib.set_prgname(APP_NAME) MainController.set_prefs(prefs) diff --git a/dzgui/views/components/entry.py b/dzgui/views/components/entry.py index ac2fcc6..3f0e592 100644 --- a/dzgui/views/components/entry.py +++ b/dzgui/views/components/entry.py @@ -36,11 +36,16 @@ def validate_ip_or_id(text: str) -> bool: class ValidatedEntry(Gtk.Entry): - def __init__(self, controller: "Controller", func: Callable) -> None: + def __init__( + self, + controller: "Controller", + func: Callable, + placeholder_text: str = "", + tooltip_text: str = "", + ) -> None: + # TODO: tooltip text should not be hardcoded super().__init__( - hexpand=True, - placeholder_text=connect_panel.placeholder, - tooltip_text=connect_panel.entry_tooltip, + hexpand=True, placeholder_text=placeholder_text, tooltip_text=tooltip_text ) self.func: Callable @@ -116,13 +121,23 @@ class ValidatedEntry(Gtk.Entry): class IpEntry(ValidatedEntry): def __init__(self, controller: "Controller") -> None: - super().__init__(controller, func=validate_ip_or_id) + super().__init__( + controller, + func=validate_ip_or_id, + placeholder_text=connect_panel.placeholder, + tooltip_text=connect_panel.entry_tooltip, + ) self.set_placeholder_text(connect_panel.placeholder) self.set_tooltip_text(connect_panel.entry_tooltip) class PortEntry(ValidatedEntry): def __init__(self, controller: "Controller") -> None: - super().__init__(controller, func=validate_port) + super().__init__( + controller, + func=validate_port, + placeholder_text=connect_panel.placeholder, + tooltip_text=connect_panel.entry_tooltip, + ) self.set_placeholder_text(lan_panel.placeholder) self.set_tooltip_text(lan_panel.entry_tooltip)