feat: toggle panels on signal

This commit is contained in:
aclist 2026-02-07 17:42:15 +09:00
parent 56b32a0048
commit 045f242e09
6 changed files with 49 additions and 34 deletions

View File

@ -42,6 +42,10 @@ class Emitter(GObject.GObject):
@GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=(int,))
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=(bool,))
def server_page_toggled(self, keyval: int) -> None:
"""Triggered on map/unmap signal from NotebookPage.SERVERS. Shows/hides grid panels."""
pass
@GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=())

View File

@ -336,13 +336,6 @@ class Controller(GObject.GObject):
notebook = self.mediator.grid.notebook
notebook.focus_current()
def toggle_server_panels(self, state: bool) -> None:
# TODO: this is going to be signal dependent now, cf. map/unmap
#self.mediator.grid.emit("toggle panels", state)
self.mediator.grid.toggle_filter_panel(state)
self.mediator.grid.toggle_connect_panel(state)
self.mediator.grid.toggle_refresh_button(state)
def toggle_mod_panel(self, state: bool) -> None:
self.mediator.grid.right_panel.sel_panel.set_visible(state)
@ -434,18 +427,33 @@ class Controller(GObject.GObject):
text = "\n".join(final)
return text
def copy_ip(self, path: Gtk.TreePath) -> None:
def get_col_value_by_path_index(self, path: Gtk.TreePath, index: int) -> Any:
treeview = self.get_active_treeview()
model = treeview.get_model()
if not model:
if model is None:
return None
addr = model[path][7]
if addr is None:
value = model[path][index]
return value
def copy_name(self, path: Gtk.TreePath) -> None:
# TODO: column values are deterministic, perhaps use a col name to index map
name = self.get_col_value_by_path_index(path, 0)
if name is None:
return
qport = model[path][8]
ip = addr.split(":")[0]
gameport = int(addr.split(":")[1])
record = Servers.Record(ip, gameport, qport)
self.copy_clipboard(name)
def copy_ip(self, path: Gtk.TreePath) -> None:
treeview = self.get_active_treeview()
record = treeview.get_record()
# TODO: maybe delegate to filter man
#addr = self.get_col_value_by_path_index(path, 7)
#if addr is None:
# return
#qport = self.get_col_value_by_path_index(path, 8)
## TODO: abstract get record function
#ip = addr.split(":")[0]
#gameport = int(addr.split(":")[1])
#record = Servers.Record(ip, gameport, qport)
self.copy_clipboard(f"{record.ip}:{record.qport}")
def copy_clipboard(self, text: str) -> None:
@ -520,7 +528,6 @@ class Controller(GObject.GObject):
self.copy_ip(path)
case ContextMenu.COPY_NAME:
self.copy_name(path)
pass
case ContextMenu.REFRESH_PLAYERS:
pass
case ContextMenu.REMOVE_HISTORY:
@ -535,8 +542,9 @@ class Controller(GObject.GObject):
# NOTE: manipulates mod store
case ContextMenu.DELETE_MOD:
self.delete_single_mod(path)
# TODO: hook treeview changed signal automatically
# TODO: connect to emitter automatically
# Gtk.TreeModel, row-inserted/row-deleted
# updates statusbar
self.update_mod_statusbar()
remove_stale_signatures(
self.prefs.paths.config, self.prefs.paths.version

View File

@ -4,16 +4,18 @@ import warnings
from typing import TYPE_CHECKING, Literal
from dzgui.const.enum import NotebookPage
# TODO: import notebook only and add components there?
from dzgui.const.constants import APP_NAME, APP_NAME_LOWER, STEAM_ICON
from dzgui.const.enum import NotebookPage
from dzgui.controllers.emitter import Emitter
from dzgui.controllers.mc import Controller
from dzgui.util import css, strings
# NOTEBOOK ITEMS
# TODO: import notebook only and add components there?
from dzgui.views.pages.changelog import Changelog
from dzgui.views.components.connect_panel import ConnectPanel
from dzgui.views.components.crumbs import Breadcrumbs
from dzgui.views.components.right_panel import RightPanel
from dzgui.views.components.statusbar import Statusbar
from dzgui.views.mixins.scrollable_mixin import ScrollableMixin
from dzgui.views.pages.changelog import Changelog
from dzgui.views.pages.devs import Developers
from dzgui.views.pages.help import Help
from dzgui.views.pages.keys import Keybindings
@ -23,10 +25,6 @@ from dzgui.views.pages.options import Options
from dzgui.views.pages.servers import ServerNotebook
from dzgui.views.pages.thanks import Thanks
from dzgui.views.components.statusbar import Statusbar
from dzgui.views.components.right_panel import RightPanel
from dzgui.views.mixins.scrollable_mixin import ScrollableMixin
if TYPE_CHECKING:
from dzgui.config.userprefs import UserPrefs
@ -309,6 +307,8 @@ class Grid(Gtk.Grid):
# self.bu.connect("clicked", self._shrink)
# self.crumb_box.add(self.bu)
self.emitter = MainController.get_emitter()
self.notebook = Notebook()
self.conpan = ConnectPanel(MainController)
@ -344,17 +344,15 @@ class Grid(Gtk.Grid):
self.show_all()
self.emitter.connect("server_page_toggled", self.toggle_filter_panels)
def _shrink(self, button: Gtk.Button) -> None:
tv = MainController.get_active_treeview()
tv.shrink_to_fit()
def toggle_filter_panel(self, state: bool) -> None:
def toggle_filter_panels(self, emitter: "Emitter", state: bool) -> None:
self.right_panel.filters_vbox.set_visible(state)
def toggle_connect_panel(self, state: bool) -> None:
self.conpan.set_visible(state)
def toggle_refresh_button(self, state: bool) -> None:
self.right_panel.refresh_button.set_visible(state)

View File

@ -22,7 +22,9 @@ class ContextMixin(TreeView):
if self.is_selection_empty():
return
if event.type is Gdk.EventType.BUTTON_PRESS and event.button == 3:
if event.type is Gdk.EventType.BUTTON_PRESS:
if event.button != 3:
return
try:
pathinfo = self.get_path_at_pos(int(event.x), int(event.y))
if pathinfo is None:

View File

@ -23,6 +23,7 @@ class Mods(Gtk.ScrolledWindow):
self.connect("map", self._on_map)
self.connect("unmap", self._on_unmap)
# TODO: use emitter
def _on_unmap(self, widget: Self) -> None:
self.controller.toggle_mod_panel(False)

View File

@ -22,6 +22,8 @@ class ServerNotebook(Gtk.ScrolledWindow):
super().__init__()
self.controller = controller
self.emitter = self.controller.get_emitter()
self.controller.register_widget("servers", self)
self.notebook = Gtk.Notebook(show_tabs=True)
@ -56,10 +58,10 @@ class ServerNotebook(Gtk.ScrolledWindow):
self.connect("unmap", self._on_unmap)
def _on_map(self, widget: Self) -> None:
self.controller.toggle_server_panels(True)
self.emitter.emit("server_page_toggled", True)
def _on_unmap(self, widget: Self) -> None:
self.controller.toggle_server_panels(False)
self.emitter.emit("server_page_toggled", False)
def _on_keypress(self, widget: Self, event: Gdk.EventKey) -> None:
match event.keyval: