From 8e6cff4bf094e2cf95045a8000149d32056614e9 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Tue, 21 Apr 2026 01:22:56 +0900 Subject: [PATCH] fix: start filters insensitive if tree is empty --- dzgui/controllers/emitter.py | 5 +++++ dzgui/views/components/right_panel.py | 10 ++++++++++ dzgui/views/pages/log.py | 14 +++++++++++++- dzgui/views/pages/servers.py | 22 ++++++++++++++++------ dzgui/views/trees/tree_log.py | 14 -------------- 5 files changed, 44 insertions(+), 21 deletions(-) diff --git a/dzgui/controllers/emitter.py b/dzgui/controllers/emitter.py index 4a46311..557e9d7 100644 --- a/dzgui/controllers/emitter.py +++ b/dzgui/controllers/emitter.py @@ -60,6 +60,11 @@ class Emitter(GObject.GObject): def check_button_pressed(self, keyval: int) -> None: """User toggled filter panel check button via keyboard""" + @GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=(object,)) + def server_page_changed(self, keyval: int) -> None: + """Triggered on 'switch-page' signal within tabs of NotebookPage.SERVERS.""" + pass + @GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=(bool,)) def server_page_toggled(self, keyval: int) -> None: """Triggered on map/unmap signal from NotebookPage.SERVERS. Shows/hides grid panels.""" diff --git a/dzgui/views/components/right_panel.py b/dzgui/views/components/right_panel.py index 9901e6a..daccc5b 100644 --- a/dzgui/views/components/right_panel.py +++ b/dzgui/views/components/right_panel.py @@ -16,6 +16,7 @@ from gi.repository import Gtk, Gdk, GLib # noqa E402 if TYPE_CHECKING: from dzgui.controllers.mc import Controller from dzgui.controllers.emitter import Emitter + from dzgui.controllers.views.trees.tree_servers import ServerTreeView class RightPanel(Gtk.Box): @@ -27,6 +28,7 @@ class RightPanel(Gtk.Box): emitter = controller.get_emitter() emitter.connect("servers_loaded", self._on_servers_loaded) + emitter.connect("server_page_changed", self._on_server_page_changed) self.button_vbox = ButtonBox(controller) self.filters_vbox = FilterPanel(controller) @@ -56,7 +58,15 @@ class RightPanel(Gtk.Box): self.pack_start(self.sel_panel, NO_EXPAND, NO_FILL, NO_PADDING) self.pack_start(eb, NO_EXPAND, FILL, NO_PADDING) + def _on_server_page_changed(self, emitter: "Emitter", page: "ServerTreeView") -> None: + """Initially set filter area to disabled""" + if page.loaded is True: + return + self.filters_vbox.set_sensitive(False) + def _on_servers_loaded(self, emitter: "Emitter", context: "ServerTab") -> None: + # TODO: similar logic on notebook page change + print('servers loaded') state = self.controller.has_server_model() for widget in (self.refresh_button, self.filters_vbox): widget.set_sensitive(state) diff --git a/dzgui/views/pages/log.py b/dzgui/views/pages/log.py index f216327..88f15da 100644 --- a/dzgui/views/pages/log.py +++ b/dzgui/views/pages/log.py @@ -17,7 +17,19 @@ class Log(CursorMixin, HelpMenuMixin, Gtk.ScrolledWindow): # type: ignore def __init__(self, controller: "Controller") -> None: super().__init__() self.treeview = LogTreeView(controller) - self.add(self.treeview) + self.box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + self.box.add(self.treeview) + + #self.add(self.treeview) + # TODO proxymodel into this + + self.check_bar = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) + for check in ("Warning", "Critical", "Debug", "Info"): + c = Gtk.CheckButton(label=check) + self.check_bar.pack_start(c, False, False, 0) + # c.set_active(True) + self.box.add(self.check_bar) + self.add(self.box) self.controller = controller self.controller.register_widget("logtreeview", self.treeview) diff --git a/dzgui/views/pages/servers.py b/dzgui/views/pages/servers.py index b8f1599..0b632f9 100644 --- a/dzgui/views/pages/servers.py +++ b/dzgui/views/pages/servers.py @@ -18,6 +18,17 @@ if TYPE_CHECKING: from dzgui.controllers.mc import Emitter +class ScrollableTree(Gtk.ScrolledWindow): + def __init__(self, tree: "ServerTreeView") -> None: + super().__init__() + + self.tree = tree + self.add(tree) + + def get_tree(self) -> "ServerTreeView": + return self.tree + + class ServerNotebook(Gtk.ScrolledWindow): def __init__(self, controller: "Controller"): super().__init__() @@ -45,8 +56,7 @@ class ServerNotebook(Gtk.ScrolledWindow): ] for tree, label in tabs: - scrolled = Gtk.ScrolledWindow() - scrolled.add(tree) + scrolled = ScrollableTree(tree) self.notebook.append_page(scrolled, Gtk.Label(label=label)) self.add(self.notebook) @@ -77,9 +87,6 @@ class ServerNotebook(Gtk.ScrolledWindow): def _on_map(self, widget: Self) -> None: self.emitter.emit("server_page_toggled", True) - # FIXME: only applies to server notebook, not atomic page - # this can be delegated to the map/unmap signal of the ServerTreeView itself - # self.get_active_treeview().start_timeout() def _on_unmap(self, widget: Self) -> None: self.emitter.emit("server_page_toggled", False) @@ -105,7 +112,7 @@ class ServerNotebook(Gtk.ScrolledWindow): return self.notebook.get_tab_label_text(child) def _on_page_changed( - self, notebook: Gtk.Notebook, child: Gtk.Widget, index: int + self, notebook: Gtk.Notebook, child: ScrollableTree, index: int ) -> None: if self.controller.loaded is False: return @@ -115,6 +122,9 @@ class ServerNotebook(Gtk.ScrolledWindow): text = label.strip("*") self.notebook.set_tab_label_text(child, text) + tree = child.get_tree() + self.emitter.emit("server_page_changed", tree) + # NOTE: spawns a thread self.controller.populate_model(self.get_active_treeview()) diff --git a/dzgui/views/trees/tree_log.py b/dzgui/views/trees/tree_log.py index 29268a5..3bc0866 100644 --- a/dzgui/views/trees/tree_log.py +++ b/dzgui/views/trees/tree_log.py @@ -52,20 +52,6 @@ class LogTreeView(ContextMixin, TreeView): if event.button == Gdk.BUTTON_SECONDARY: self.present_menu(widget, event) return True - #selection = self.get_selection() - #model, selected_paths = selection.get_selected_rows() - #if len(selected_paths) > 1: - # for path in selected_paths: - # selection.select_path(path) - # path, col, x, y = self.get_path_at_pos(int(event.x), int(event.y)) - # if path: - # selection = self.get_selection() - # model, selected_paths = selection.get_selected_rows() - # if path not in selected_paths: - # selection.select_path(path) - # self.present_menu(widget, event) - # return True - #return False def _on_log_keypress(self, widget: Gtk.Widget, event: Gdk.EventKey) -> None: self.present_menu(widget, event)