feat: dedicated emitter

This commit is contained in:
aclist committed 2026-02-07 16:42:59 +09:00
1 parent ea841395fc
commit ac7700ec23
24 files changed
+207 -112

No files matched your search

+4 -2
View File
@@ -4,11 +4,13 @@ from dzgui.const.enum import ButtonType
from dzgui.const.constants import NO_EXPAND, NO_FILL, NO_PADDING
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk # noqa E402
logger = logging.getLogger(__name__)
class ContextualButton(Gtk.Button):
def __init__(self, label, opens, tooltip, context):
super().__init__(
@@ -20,6 +22,7 @@ class ContextualButton(Gtk.Button):
self.context = context
self.opens = opens
class ButtonBox(Gtk.Box):
def __init__(self, controller) -> None:
super().__init__(
@@ -41,7 +44,7 @@ class ButtonBox(Gtk.Box):
opens=side_button.dict["opens"],
tooltip=side_button.dict["tooltip"],
context=side_button,
)
)
# FIXME: if debug log fails to load, still opens table
size = (10, 10) if prefs.is_steam_deck else (50, 50)
@@ -52,7 +55,6 @@ class ButtonBox(Gtk.Box):
button.connect("clicked", self._on_selection_button_clicked)
self.pack_start(button, NO_EXPAND, NO_FILL, NO_PADDING)
def _on_selection_button_clicked(self, button: Gtk.Button) -> None:
self.controller.open_page_by_button(button)
+22
View File
@@ -16,6 +16,7 @@ logger = logging.getLogger(__name__)
if TYPE_CHECKING:
from dzgui.controllers.mc import Controller
from dzgui.controllers.emitter import Emitter
class FilterPanel(Gtk.Box):
@@ -94,6 +95,7 @@ class FilterPanel(Gtk.Box):
self.emitter.connect(
"request_maps_focus", lambda _: self.maps_entry.grab_focus()
)
self.emitter.connect("check_button_pressed", self.toggle_check_by_key)
completion = Gtk.EntryCompletion(inline_completion=True)
completion.set_text_column(0)
@@ -251,6 +253,26 @@ class FilterPanel(Gtk.Box):
def set_active_combo(self, row: int) -> None:
self.maps_combo.set_active(row)
def toggle_check_by_key(self, emitter: "Emitter", keyval: int) -> None | Literal[False]:
mappings = {
Gdk.KEY_1: 0,
Gdk.KEY_2: 1,
Gdk.KEY_3: 2,
Gdk.KEY_4: 3,
Gdk.KEY_5: 4,
Gdk.KEY_6: 5,
Gdk.KEY_7: 6,
Gdk.KEY_8: 7,
Gdk.KEY_9: 8,
Gdk.KEY_0: 9,
Gdk.KEY_minus: 10,
Gdk.KEY_backslash: 11,
}
if keyval not in mappings:
return False
index = mappings[keyval]
self.toggle_check(index)
def toggle_check(self, digit: int) -> None:
check = self.checks[digit]
state = check.get_active()
+3 -2
View File
@@ -1,4 +1,4 @@
from typing import TYPE_CHECKING
from typing import Optional, TYPE_CHECKING
from dzgui.views.components.buttonbox import ButtonBox
from dzgui.views.components.filter_panel import FilterPanel
@@ -13,6 +13,7 @@ from gi.repository import Gtk, GLib # noqa E402
if TYPE_CHECKING:
from dzgui.controllers.mc import Controller
from dzgui.controllers.emitter import Emitter
class RightPanel(Gtk.Box):
@@ -78,5 +79,5 @@ class RightPanel(Gtk.Box):
# thread = threading.Thread(target=_update_pings, args=())
# thread.start()
def focus_button_box(self) -> None:
def focus_button_box(self, emitter: Optional["Emitter"] = None) -> None:
self.button_vbox.buttons[0].grab_focus()
+14 -2
View File
@@ -1,6 +1,7 @@
from typing import Self, Union, TYPE_CHECKING
from dzgui.const.enum import NotebookPage, ServerTab
from dzgui.util.strings import esc_to_return, question_to_return
import gi
@@ -46,8 +47,8 @@ class Statusbar(Gtk.Grid):
controller.mediator.notebook.connect_after(
"switch-page", self._on_notebook_page_changed
)
self.emitter.connect("distcalc_started", self._on_distcalc_started)
# TODO:
self.emitter.connect("distcalc_started", lambda _: self.spinner.start())
self.connect("distcalc_ended", self._on_distcalc_ended)
self.connect("server_page_changed", self._on_server_page_changed)
@@ -77,10 +78,19 @@ class Statusbar(Gtk.Grid):
enum = notebook.get_page_by_enum()
show_statusbar = enum.dict["statusbar"]
if show_statusbar is False:
self.set_by_context(enum, "")
return
if enum in (
NotebookPage.THANKS,
NotebookPage.CHANGELOG,
NotebookPage.LOG,
):
self.set_by_context(enum, esc_to_return)
return
match enum:
case NotebookPage.MODS:
bar = self.controller.format_mod_statusbar()
@@ -89,6 +99,8 @@ class Statusbar(Gtk.Grid):
case NotebookPage.SERVERS:
self.emit("server_page_changed", ServerTab.BROWSER)
return
case NotebookPage.KEYS:
bar = question_to_return
self.set_by_context(enum, bar)
@@ -122,7 +134,7 @@ class Statusbar(Gtk.Grid):
self.set_by_context(context, count)
tree = self.controller.get_active_treeview()
# TODO: emit page change signal on emitter, treeview catches signal and calls distcalc
# TODO: emit page change signal on emitter, treeview catches signal and calls distcalc directly
tree.emit("distcalc_started")
def pop(self, context: Union["ServerTab", "NotebookPage"]) -> None: