feat: dynamic port validation

This commit is contained in:
aclist committed 2026-01-12 23:50:27 +09:00
1 parent b119569cf5
commit fdb6b342f7
6 files changed
+153 -149

No files matched your search

+8 -40
View File
@@ -1,27 +1,23 @@
from typing import Literal, TYPE_CHECKING
import gi # noqa E402
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk, GLib
from dzgui.const.enum import Preferences
from dzgui.views.components.buttonbox import ButtonBox
from dzgui.views.components.filter_panel import FilterPanel
from dzgui.views.components.mod_panel import ModSelectionPanel
from dzgui.views.components.buttons import RefreshButton, KeysButton
from dzgui.const.constants import NO_EXPAND, NO_FILL, EXPAND, FILL, INPUT_KEYBOARD, NO_PADDING
from dzgui.const.constants import NO_EXPAND, NO_FILL, FILL, NO_PADDING
from dzgui.util.strings import atomic_buttons
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib # noqa E402
if TYPE_CHECKING:
from GLib import SOURCE_REMOVE
# TODO: refactor depends on ServerTreeView
class RightPanel(Gtk.Box):
def __init__(self, controller):
super().__init__(spacing=6, orientation=Gtk.Orientation.VERTICAL)
self.time = 30
self.controller = controller
self.controller.register_widget("right_panel", self)
@@ -29,15 +25,8 @@ class RightPanel(Gtk.Box):
self.filters_vbox = FilterPanel(controller)
self.sel_panel = ModSelectionPanel(controller)
self.refresh_button = RefreshButton()
# TODO: consolidate into class
#self.refresh_button.set_tooltip_text(refresh_tooltip)
self.refresh_button.set_focus_on_click(False)
self.refresh_button.connect("clicked", self._on_refresh_clicked)
self.keys = KeysButton()
self.keys.connect("clicked", self._on_keys_clicked)
#self.keys.set_focus_on_click(False)
self.refresh_button = RefreshButton(controller)
self.keys = KeysButton(controller)
for el in self.button_vbox, self.keys, self.filters_vbox, self.refresh_button:
self.pack_start(el, NO_EXPAND, FILL, NO_PADDING)
@@ -48,29 +37,11 @@ class RightPanel(Gtk.Box):
def reinit_maps(self, rows: list) -> None:
self.controller.reinit_map_store()
# TODO: communicate with controller
#controller.clear_map_store()
#self.controller.clear_map_store()
#map_store.append(["All maps"])
self.selected = "All maps"
self.filters_vbox.set_unique_maps(rows)
def decrement(self) -> "SOURCE_REMOVE" | Literal[True]:
self.time -= 1
if self.time == 0:
self.time = 30
self.refresh_button.set_label(refresh)
self.refresh_button.set_sensitive(True)
return GLib.SOURCE_REMOVE
# TODO: abstract this formatting logic
self.refresh_button.set_label(f"{atomic_buttons.refresh} ({str(self.time)})")
return True
def _on_refresh_clicked(self, button: RefreshButton) -> None:
# TODO: could be internal to refresh button class
self.refresh_button.set_sensitive(False)
self.refresh_button.set_label(f"{atomic_buttons.refresh} ({str(self.time)})")
GLib.timeout_add_seconds(1, self.decrement)
self.controller.refresh_tree()
# TODO: reference
#def _on_ping_clicked(self, button: Gtk.Button) -> None:
# block_signals()
@@ -103,8 +74,5 @@ class RightPanel(Gtk.Box):
# thread = threading.Thread(target=_update_pings, args=())
# thread.start()
def _on_keys_clicked(self, button: Gtk.Button) -> None:
self.controller.open_keybindings()
def focus_button_box(self) -> None:
self.button_vbox.buttons[0].grab_focus()