mirror of
https://github.com/aclist/dztui.git
synced 2026-08-26 09:47:36 +02:00
fix: start filters insensitive if tree is empty
This commit is contained in:
parent
d92a0010e2
commit
8e6cff4bf0
@ -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."""
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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())
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user