From 2c8e722d8a8cfa069888fa1842289769ae635ad5 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sat, 14 Feb 2026 16:46:44 +0900 Subject: [PATCH] fix: lan panel sensitivity --- dzgui/controllers/mc.py | 13 ++++++++++++- dzgui/views/components/connect_panel.py | 11 +++++++---- dzgui/views/components/filter_panel.py | 7 +------ dzgui/views/components/mod_panel.py | 4 ++-- dzgui/views/components/right_panel.py | 17 +++++++---------- dzgui/views/dialogs/generic.py | 11 ++++++++--- dzgui/views/pages/servers.py | 1 + dzgui/views/trees/tree_servers.py | 3 +++ 8 files changed, 41 insertions(+), 26 deletions(-) diff --git a/dzgui/controllers/mc.py b/dzgui/controllers/mc.py index 3cfc62d..5a30cee 100644 --- a/dzgui/controllers/mc.py +++ b/dzgui/controllers/mc.py @@ -379,12 +379,23 @@ class Controller(GObject.GObject): j = res.json serv += j["response"]["servers"] + """ + TODO: e.g. class method like 'total' + GLib.idle_add(lambda: self.wait_dialog.format_secondary_text("Pass 2")) + GLib.idle_add(lambda: self.wait_dialog.prog.set_fraction(0.5)) subclass or wrap add fraction and increment, then + calculate off of total + """ res = Servers.query_api(key, APPID_DAYZ_EXP, "") if res.status == 200 and res.parsed is True: j = res.json serv += j["response"]["servers"] + GLib.idle_add( + lambda: self.wait_dialog.format_secondary_text("Unpacking servers") + ) + # TODO: additional ping column pass, collated + # GLib.idle_add(lambda: self.wait_dialog.prog.set_fraction(0.75)) parsed = Servers.parse_json(serv) self.push_data(parsed, FilterMode.INITIAL, success=True) @@ -839,7 +850,7 @@ class Controller(GObject.GObject): self.to_insert = None - # TODO: + # TODO: drop self.success = success if success: if data is None: diff --git a/dzgui/views/components/connect_panel.py b/dzgui/views/components/connect_panel.py index 10f1db9..daf641e 100644 --- a/dzgui/views/components/connect_panel.py +++ b/dzgui/views/components/connect_panel.py @@ -25,7 +25,6 @@ class LanPanel(Gtk.Frame): def __init__(self, controller: "Controller") -> None: super().__init__(margin_top=10, margin_bottom=5) - # TODO: hide lan panel on other tabs self.controller = controller self.emitter = controller.get_emitter() @@ -56,9 +55,14 @@ class LanPanel(Gtk.Frame): self.add(self.grid) + self.entry.set_sensitive(False) + def _on_radio_toggled(self, button: Gtk.RadioButton) -> None: - self.entry.set_sensitive(not button.get_active()) - if len(self.entry.get_text()) < 1: + state = button.get_active() + self.entry.set_sensitive(not state) + if state: + self.scan.set_sensitive(True) + elif len(self.entry.get_text()) < 1: self.scan.set_sensitive(False) def _on_port_validated(self, entry: Gtk.Entry, state: bool) -> None: @@ -76,7 +80,6 @@ class FavPanel(Gtk.Frame): emitter = self.controller.get_emitter() emitter.connect("fav_server_changed", self._on_fav_server_changed) - # TODO: improve upon this, cache fav ip when changed globally self.server_name, self.server_ip = self.controller.get_favorite() server_name = ( f"{self.server_name} ({self.server_ip})" diff --git a/dzgui/views/components/filter_panel.py b/dzgui/views/components/filter_panel.py index 92eb9ab..e59fb86 100644 --- a/dzgui/views/components/filter_panel.py +++ b/dzgui/views/components/filter_panel.py @@ -172,7 +172,7 @@ class FilterPanel(Gtk.Box): "request_maps_focus", lambda _: self.maps_entry.grab_focus() ) self.emitter.connect("check_button_pressed", self.toggle_check_by_key) - self.emitter.connect("servers_loaded", self._on_servers_loaded) + # self.emitter.connect("servers_loaded", self._on_servers_loaded) self.emitter.connect("load_maps", self._on_maps_loaded) # TODO: break into MapsCombo class @@ -214,11 +214,6 @@ class FilterPanel(Gtk.Box): self.maps_combo.set_active(i) self._on_map_changed(self.maps_combo) - def _on_servers_loaded(self, emitter: "Emitter", tab: "ServerTab") -> None: - state = self.controller.has_server_model() - for widget in (self.keyword_entry, self.maps_combo, self.button_grid): - widget.set_sensitive(state) - def _on_maps_loaded(self, emitter: "Emitter", store: Gtk.ListStore) -> None: self.maps_combo.set_model(store) self.maps_combo.set_active(0) diff --git a/dzgui/views/components/mod_panel.py b/dzgui/views/components/mod_panel.py index 9f6fbae..fe9d3b3 100644 --- a/dzgui/views/components/mod_panel.py +++ b/dzgui/views/components/mod_panel.py @@ -71,10 +71,10 @@ class ModSelectionPanel(Gtk.Box): def swap_sensitive(self, state: bool) -> None: for child in self.stale_panel.get_children(): - child.set_sensitive(state) - for child in self.main_panel.get_children(): if child.enum == ModButton.HIGHLIGHT_STALE: child.set_sensitive(not state) + else: + child.set_sensitive(state) def _on_button_clicked(self, button: EnumeratedModButton) -> None: match button.enum: diff --git a/dzgui/views/components/right_panel.py b/dzgui/views/components/right_panel.py index e1c95b5..84a2881 100644 --- a/dzgui/views/components/right_panel.py +++ b/dzgui/views/components/right_panel.py @@ -25,7 +25,7 @@ class RightPanel(Gtk.Box): self.controller.register_widget("right_panel", self) emitter = controller.get_emitter() - emitter.connect("servers_loaded", self.toggle_refresh_button) + emitter.connect("servers_loaded", self._on_servers_loaded) self.button_vbox = ButtonBox(controller) self.filters_vbox = FilterPanel(controller) @@ -40,15 +40,12 @@ class RightPanel(Gtk.Box): self.pack_start(self.sel_panel, NO_EXPAND, NO_FILL, NO_PADDING) - def toggle_refresh_button(self, emitter: "Emitter", context: "ServerTab") -> None: - # TODO: when a row is added to a previously empty table, - # make sure "servers_loaded" signal is emitted - self.refresh_button.set_sensitive(True) - model = self.controller.get_active_treeview().get_model() - # NOTE: if saved servers or history are empty, there is nothing to refresh - if model is None: - if context in (ServerTab.RECENT, ServerTab.SAVED): - self.refresh_button.set_sensitive(False) + def _on_servers_loaded(self, emitter: "Emitter", context: "ServerTab") -> None: + state = self.controller.has_server_model() + for widget in (self.refresh_button, self.filters_vbox): + widget.set_sensitive(state) + if context in (ServerTab.RECENT, ServerTab.SAVED): + self.refresh_button.set_sensitive(False) # TODO: reference for ping pass # def _on_ping_clicked(self, button: Gtk.Button) -> None: diff --git a/dzgui/views/dialogs/generic.py b/dzgui/views/dialogs/generic.py index 742a817..738fdd3 100644 --- a/dzgui/views/dialogs/generic.py +++ b/dzgui/views/dialogs/generic.py @@ -101,7 +101,9 @@ class NotifyDialog(GenericDialog): class WaitDialog(GenericDialog): - def __init__(self, controller: "Controller", secondary: str): + def __init__( + self, controller: "Controller", secondary: str, show_progress: bool = False + ): super().__init__( controller=controller, text=strings.wait, @@ -113,9 +115,12 @@ class WaitDialog(GenericDialog): self.connect("delete-event", self._on_dialog_delete) content = self.get_content_area() spinner = Gtk.Spinner() + self.prog = Gtk.ProgressBar() content.pack_end(spinner, NO_EXPAND, NO_FILL, 0) - - spinner.start() + if show_progress: + content.pack_end(self.prog, NO_EXPAND, NO_FILL, 0) + else: + spinner.start() def _on_dialog_delete( self, response_id: Gtk.ResponseType, event: Gdk.Event diff --git a/dzgui/views/pages/servers.py b/dzgui/views/pages/servers.py index f5df268..5cdfeaf 100644 --- a/dzgui/views/pages/servers.py +++ b/dzgui/views/pages/servers.py @@ -36,6 +36,7 @@ class ServerNotebook(Gtk.ScrolledWindow): ) self.lan = ServerTreeView(controller, ServerTab.LAN, ContextMenuGroup.SCAN_LAN) + self.recent.set_query_func(self.controller.dump_test_2) self.lan.set_query_func(self.controller.dump_test_2) self.browser.set_query_func(self.controller.dump_api) diff --git a/dzgui/views/trees/tree_servers.py b/dzgui/views/trees/tree_servers.py index f84ebf6..a8df4fd 100644 --- a/dzgui/views/trees/tree_servers.py +++ b/dzgui/views/trees/tree_servers.py @@ -117,7 +117,10 @@ class ServerTreeView(ContextMixin, TreeView): def _on_servers_loaded(self, emitter: "Emitter", tab: "ServerTab") -> None: # FIXME: gets called on every tab, should be localized only to that context + # hook signal from main controller state = self.controller.has_server_model() + # NOTE: workaround for GTK bug where fullscreen causes headers to vanish when model is None + self.set_headers_visible(state) self.set_headers_clickable(state) def _on_servers_loaded_init(self, emitter: "Emitter") -> None: