feat: toggle panels on signal

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

No files matched your search

+4
View File
@@ -42,6 +42,10 @@ class Emitter(GObject.GObject):
@GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=(int,)) @GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=(int,))
def check_button_pressed(self, keyval: int) -> None: def check_button_pressed(self, keyval: int) -> None:
"""User toggled filter panel check button via keyboard""" """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 pass
@GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=()) @GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=())
+25 -17
View File
@@ -336,13 +336,6 @@ class Controller(GObject.GObject):
notebook = self.mediator.grid.notebook notebook = self.mediator.grid.notebook
notebook.focus_current() 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: def toggle_mod_panel(self, state: bool) -> None:
self.mediator.grid.right_panel.sel_panel.set_visible(state) self.mediator.grid.right_panel.sel_panel.set_visible(state)
@@ -434,18 +427,33 @@ class Controller(GObject.GObject):
text = "\n".join(final) text = "\n".join(final)
return text 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() treeview = self.get_active_treeview()
model = treeview.get_model() model = treeview.get_model()
if not model: if model is None:
return None return None
addr = model[path][7] value = model[path][index]
if addr is None: 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 return
qport = model[path][8] self.copy_clipboard(name)
ip = addr.split(":")[0]
gameport = int(addr.split(":")[1]) def copy_ip(self, path: Gtk.TreePath) -> None:
record = Servers.Record(ip, gameport, qport) 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}") self.copy_clipboard(f"{record.ip}:{record.qport}")
def copy_clipboard(self, text: str) -> None: def copy_clipboard(self, text: str) -> None:
@@ -520,7 +528,6 @@ class Controller(GObject.GObject):
self.copy_ip(path) self.copy_ip(path)
case ContextMenu.COPY_NAME: case ContextMenu.COPY_NAME:
self.copy_name(path) self.copy_name(path)
pass
case ContextMenu.REFRESH_PLAYERS: case ContextMenu.REFRESH_PLAYERS:
pass pass
case ContextMenu.REMOVE_HISTORY: case ContextMenu.REMOVE_HISTORY:
@@ -535,8 +542,9 @@ class Controller(GObject.GObject):
# NOTE: manipulates mod store # NOTE: manipulates mod store
case ContextMenu.DELETE_MOD: case ContextMenu.DELETE_MOD:
self.delete_single_mod(path) self.delete_single_mod(path)
# TODO: hook treeview changed signal automatically # TODO: connect to emitter automatically
# Gtk.TreeModel, row-inserted/row-deleted # Gtk.TreeModel, row-inserted/row-deleted
# updates statusbar
self.update_mod_statusbar() self.update_mod_statusbar()
remove_stale_signatures( remove_stale_signatures(
self.prefs.paths.config, self.prefs.paths.version self.prefs.paths.config, self.prefs.paths.version
+12 -14
View File
@@ -4,16 +4,18 @@ import warnings
from typing import TYPE_CHECKING, Literal 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.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.controllers.mc import Controller
from dzgui.util import css, strings 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.connect_panel import ConnectPanel
from dzgui.views.components.crumbs import Breadcrumbs 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.devs import Developers
from dzgui.views.pages.help import Help from dzgui.views.pages.help import Help
from dzgui.views.pages.keys import Keybindings 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.servers import ServerNotebook
from dzgui.views.pages.thanks import Thanks 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: if TYPE_CHECKING:
from dzgui.config.userprefs import UserPrefs from dzgui.config.userprefs import UserPrefs
@@ -309,6 +307,8 @@ class Grid(Gtk.Grid):
# self.bu.connect("clicked", self._shrink) # self.bu.connect("clicked", self._shrink)
# self.crumb_box.add(self.bu) # self.crumb_box.add(self.bu)
self.emitter = MainController.get_emitter()
self.notebook = Notebook() self.notebook = Notebook()
self.conpan = ConnectPanel(MainController) self.conpan = ConnectPanel(MainController)
@@ -344,17 +344,15 @@ class Grid(Gtk.Grid):
self.show_all() self.show_all()
self.emitter.connect("server_page_toggled", self.toggle_filter_panels)
def _shrink(self, button: Gtk.Button) -> None: def _shrink(self, button: Gtk.Button) -> None:
tv = MainController.get_active_treeview() tv = MainController.get_active_treeview()
tv.shrink_to_fit() 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) self.right_panel.filters_vbox.set_visible(state)
def toggle_connect_panel(self, state: bool) -> None:
self.conpan.set_visible(state) self.conpan.set_visible(state)
def toggle_refresh_button(self, state: bool) -> None:
self.right_panel.refresh_button.set_visible(state) self.right_panel.refresh_button.set_visible(state)
+3 -1
View File
@@ -22,7 +22,9 @@ class ContextMixin(TreeView):
if self.is_selection_empty(): if self.is_selection_empty():
return 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: try:
pathinfo = self.get_path_at_pos(int(event.x), int(event.y)) pathinfo = self.get_path_at_pos(int(event.x), int(event.y))
if pathinfo is None: if pathinfo is None:
+1
View File
@@ -23,6 +23,7 @@ class Mods(Gtk.ScrolledWindow):
self.connect("map", self._on_map) self.connect("map", self._on_map)
self.connect("unmap", self._on_unmap) self.connect("unmap", self._on_unmap)
# TODO: use emitter
def _on_unmap(self, widget: Self) -> None: def _on_unmap(self, widget: Self) -> None:
self.controller.toggle_mod_panel(False) self.controller.toggle_mod_panel(False)
+4 -2
View File
@@ -22,6 +22,8 @@ class ServerNotebook(Gtk.ScrolledWindow):
super().__init__() super().__init__()
self.controller = controller self.controller = controller
self.emitter = self.controller.get_emitter()
self.controller.register_widget("servers", self) self.controller.register_widget("servers", self)
self.notebook = Gtk.Notebook(show_tabs=True) self.notebook = Gtk.Notebook(show_tabs=True)
@@ -56,10 +58,10 @@ class ServerNotebook(Gtk.ScrolledWindow):
self.connect("unmap", self._on_unmap) self.connect("unmap", self._on_unmap)
def _on_map(self, widget: Self) -> None: 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: 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: def _on_keypress(self, widget: Self, event: Gdk.EventKey) -> None:
match event.keyval: match event.keyval: