fix: start filters insensitive if tree is empty

This commit is contained in:
aclist 2026-04-21 01:22:56 +09:00
parent d92a0010e2
commit 8e6cff4bf0
5 changed files with 44 additions and 21 deletions

View File

@ -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."""

View File

@ -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)

View File

@ -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)

View File

@ -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())

View File

@ -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)