mirror of
https://github.com/aclist/dztui.git
synced 2026-08-26 17:57:06 +02:00
feat: toggle panels on signal
This commit is contained in:
parent
56b32a0048
commit
045f242e09
@ -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=())
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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)
|
||||
|
||||
|
||||
@ -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:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user