mirror of
https://github.com/aclist/dztui.git
synced 2026-11-06 10:00:54 +01:00
chore: register signals
This commit is contained in:
1 parent
c952fef5e8
commit
f05374bc7d
10 files changed
+139
-137
No files matched your search
@@ -5,12 +5,14 @@ from dzgui.util.css import add_class, remove_class
|
||||
from dzgui.util.strings import connect_panel, lan_panel
|
||||
|
||||
import gi
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gdk, GObject # noqa E402
|
||||
from gi.repository import Gtk, Gdk, GObject # noqa E402
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from dzgui.controllers.mc import Controller
|
||||
|
||||
|
||||
def validate_port(text: str) -> bool:
|
||||
if text.isdigit():
|
||||
if int(text) < 1:
|
||||
@@ -21,6 +23,7 @@ def validate_port(text: str) -> bool:
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
def validate_ip_or_id(text: str) -> bool:
|
||||
try:
|
||||
validate_ip(text)
|
||||
@@ -31,15 +34,13 @@ def validate_ip_or_id(text: str) -> bool:
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
class ValidatedEntry(Gtk.Entry):
|
||||
__gsignals__ = {
|
||||
"string_validated": (GObject.SignalFlags.RUN_FIRST, None, (object,)),
|
||||
}
|
||||
def __init__(self, controller: "Controller", func: Callable) -> None:
|
||||
super().__init__(
|
||||
hexpand=True,
|
||||
placeholder_text=connect_panel.placeholder,
|
||||
tooltip_text=connect_panel.entry_tooltip
|
||||
tooltip_text=connect_panel.entry_tooltip,
|
||||
)
|
||||
|
||||
self.func: Callable
|
||||
@@ -50,6 +51,10 @@ class ValidatedEntry(Gtk.Entry):
|
||||
self.connect("key-press-event", self._on_entry_keypress)
|
||||
self.connect("changed", self._on_text_changed)
|
||||
|
||||
@GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=(bool,))
|
||||
def string_validated(self, valid: bool) -> None:
|
||||
pass
|
||||
|
||||
def mark_valid(self) -> None:
|
||||
self.emit("string_validated", True)
|
||||
remove_class(self, self.classname)
|
||||
@@ -66,7 +71,9 @@ class ValidatedEntry(Gtk.Entry):
|
||||
self.func = func
|
||||
|
||||
def insert_icon(self) -> None:
|
||||
self.set_icon_from_icon_name(Gtk.EntryIconPosition.SECONDARY, "edit-clear-symbolic")
|
||||
self.set_icon_from_icon_name(
|
||||
Gtk.EntryIconPosition.SECONDARY, "edit-clear-symbolic"
|
||||
)
|
||||
self.set_icon_activatable(Gtk.EntryIconPosition.SECONDARY, True)
|
||||
self.connect("icon-release", self._on_icon_release)
|
||||
|
||||
@@ -98,7 +105,6 @@ class ValidatedEntry(Gtk.Entry):
|
||||
entry.set_text("")
|
||||
self.remove_icon()
|
||||
|
||||
|
||||
def _on_entry_keypress(self, entry: Gtk.Entry, event: Gdk.EventKey) -> None:
|
||||
if event.keyval == Gdk.KEY_Escape:
|
||||
# NOTE: unselect text
|
||||
@@ -112,6 +118,7 @@ class IpEntry(ValidatedEntry):
|
||||
self.set_placeholder_text(connect_panel.placeholder)
|
||||
self.set_tooltip_text(connect_panel.entry_tooltip)
|
||||
|
||||
|
||||
class PortEntry(ValidatedEntry):
|
||||
def __init__(self, controller: "Controller") -> None:
|
||||
super().__init__(controller, func=validate_port)
|
||||
|
||||
@@ -1,14 +1,20 @@
|
||||
from typing import TYPE_CHECKING
|
||||
from dzgui.const.constants import HELP_BUBBLE
|
||||
|
||||
import gi
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gdk # noqa E402
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from dzgui.controllers.mc import Controller
|
||||
|
||||
|
||||
class InfoEventBox(Gtk.EventBox):
|
||||
def __init__(self, text: str, parent: Gtk.Widget):
|
||||
def __init__(self, text: str, controller: "Controller"):
|
||||
super().__init__(margin_start=10)
|
||||
|
||||
self.parent = parent
|
||||
self.controller = controller
|
||||
self.text = text
|
||||
|
||||
self.icon = Gtk.Image.new_from_icon_name(
|
||||
@@ -26,14 +32,14 @@ class InfoEventBox(Gtk.EventBox):
|
||||
self, eventbox: Gtk.EventBox, eventcrossing: Gdk.EventCrossing
|
||||
) -> None:
|
||||
self.icon.set_opacity(1)
|
||||
self.parent.controller.set_statusbar(self.text, "Options")
|
||||
self.controller.set_statusbar(self.text, "Options")
|
||||
|
||||
def _on_leave_tooltip(
|
||||
self, eventbox: Gtk.EventBox, eventcrossing: Gdk.EventCrossing
|
||||
) -> None:
|
||||
self.icon.set_opacity(0.8)
|
||||
#self.parent.controller.set_statusbar("", "Options")
|
||||
self.parent.controller.remove_statusbar("Options")
|
||||
# self.parent.controller.set_statusbar("", "Options")
|
||||
self.controller.remove_statusbar("Options")
|
||||
|
||||
def set_text(self, text: str) -> None:
|
||||
self.text = text
|
||||
@@ -1,7 +1,7 @@
|
||||
from warnings import deprecated
|
||||
from typing import Self, Union, TYPE_CHECKING
|
||||
|
||||
from dzgui.const.enum import NotebookPage, RowType
|
||||
from dzgui.const.enum import NotebookPage, ServerTab
|
||||
|
||||
import gi
|
||||
|
||||
@@ -11,17 +11,11 @@ from gi.repository import Gtk, GObject # noqa E402
|
||||
if TYPE_CHECKING:
|
||||
from dzgui.const.enum import ServerTab
|
||||
from dzgui.controllers.mc import Controller
|
||||
from dzgui.views.trees.tree_base import TreeView
|
||||
from dzgui.views.base import Notebook
|
||||
|
||||
|
||||
class Statusbar(Gtk.Grid):
|
||||
__gsignals__ = {
|
||||
"server_page_changed": (GObject.SignalFlags.RUN_FIRST, None, (object,)),
|
||||
"notebook_page_changed": (GObject.SignalFlags.RUN_FIRST, None, (object,)),
|
||||
"notebook_page_returned": (GObject.SignalFlags.RUN_FIRST, None, (object,)),
|
||||
"distcalc_ended": (GObject.SignalFlags.RUN_FIRST, None, (object, str)),
|
||||
"server_row_changed": (GObject.SignalFlags.RUN_FIRST, None, ()),
|
||||
}
|
||||
|
||||
def __init__(self, controller: "Controller") -> None:
|
||||
super().__init__(orientation=Gtk.Orientation.HORIZONTAL)
|
||||
|
||||
@@ -46,37 +40,58 @@ class Statusbar(Gtk.Grid):
|
||||
|
||||
self.players = ""
|
||||
|
||||
controller.mediator.menu.connect(
|
||||
"generic_treesel_changed", self._help_row_changed
|
||||
)
|
||||
controller.mediator.notebook.connect_after(
|
||||
"switch-page", self._on_notebook_page_changed
|
||||
)
|
||||
self.connect("server_row_changed", self._on_server_row_changed)
|
||||
self.connect("server_page_changed", self._on_server_page_changed)
|
||||
self.connect("notebook_page_changed", self._on_notebook_page_changed)
|
||||
self.connect("notebook_page_returned", self._on_notebook_page_returned)
|
||||
self.connect("distcalc_ended", self._on_distcalc_ended)
|
||||
|
||||
@GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=(object,))
|
||||
def server_page_changed(self, tab: ServerTab) -> None:
|
||||
pass
|
||||
|
||||
@GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=())
|
||||
def server_row_changed(self) -> None:
|
||||
pass
|
||||
|
||||
@GObject.Signal(
|
||||
flags=GObject.SignalFlags.RUN_LAST,
|
||||
arg_types=(
|
||||
object,
|
||||
object,
|
||||
),
|
||||
)
|
||||
def distcalc_ended(
|
||||
self, dist: Union[str, None], context: Union["ServerTab", NotebookPage]
|
||||
) -> None:
|
||||
pass
|
||||
|
||||
def _on_notebook_page_changed(
|
||||
self, statusbar: Self, context: "NotebookPage"
|
||||
self, notebook: "Notebook", child: Gtk.Widget, index: int
|
||||
) -> None:
|
||||
if self.controller.loaded is False:
|
||||
return
|
||||
|
||||
status = context.dict["statusbar"]
|
||||
bar = ""
|
||||
if status is False:
|
||||
self.set_by_context(context, "")
|
||||
enum = notebook.get_page_by_enum()
|
||||
show_statusbar = enum.dict["statusbar"]
|
||||
if show_statusbar is False:
|
||||
self.set_by_context(enum, "")
|
||||
return
|
||||
|
||||
match context:
|
||||
match enum:
|
||||
case NotebookPage.MODS:
|
||||
bar = self.controller.format_mod_statusbar()
|
||||
case NotebookPage.HELP:
|
||||
bar = self.controller.get_help_row()
|
||||
case NotebookPage.SERVERS:
|
||||
# TODO:
|
||||
from dzgui.const.enum import ServerTab
|
||||
|
||||
self.emit("server_page_changed", ServerTab.BROWSER)
|
||||
return
|
||||
|
||||
self.set_by_context(context, bar)
|
||||
self.set_by_context(enum, bar)
|
||||
|
||||
def _on_notebook_page_returned(
|
||||
self, statusbar: Self, prior_context: NotebookPage
|
||||
@@ -96,9 +111,12 @@ class Statusbar(Gtk.Grid):
|
||||
if dist is None:
|
||||
self.set_by_context(context, self.playercount)
|
||||
else:
|
||||
pretty = f"{self.playercount} | Distance: {dist}"
|
||||
pretty = self.append_distance(dist)
|
||||
self.set_by_context(context, pretty)
|
||||
|
||||
def append_distance(self, dist: str) -> str:
|
||||
return f"{self.playercount} | Distance: {dist}"
|
||||
|
||||
def _on_server_page_changed(self, statusbar: Self, context: "ServerTab") -> None:
|
||||
count = self.controller.get_player_count()
|
||||
self.playercount = count
|
||||
@@ -134,16 +152,9 @@ class Statusbar(Gtk.Grid):
|
||||
self.statusbar.push(meta, string)
|
||||
self.set_cache(string)
|
||||
|
||||
@deprecated("use set_by_context()")
|
||||
def refresh(self, row: "RowType") -> None:
|
||||
# FIXME: brittle
|
||||
if row is None:
|
||||
formatted = ""
|
||||
else:
|
||||
formatted = self.format_metadata(row)
|
||||
self.set_text(formatted, "Help")
|
||||
|
||||
@deprecated("use controller")
|
||||
def format_metadata(self, row: "RowType") -> str:
|
||||
prefix = row.dict["tooltip"]
|
||||
return prefix
|
||||
def _help_row_changed(self, tree: "TreeView", sel: Gtk.TreeSelection) -> None:
|
||||
row = tree.get_value_at_index(1)
|
||||
if self.controller.loaded is False:
|
||||
return
|
||||
tooltip = row.dict["tooltip"]
|
||||
self.set_by_context(NotebookPage.HELP, tooltip)
|
||||
Reference in new issue
Block a user