mirror of
https://github.com/aclist/dztui.git
synced 2026-08-30 03:37:00 +02:00
Compare commits
No commits in common. "fc28d419bf72e3cdd00a1b289ee82bcf07915a3e" and "cf70182733b0a4d6353c92e2007877bb10e7191e" have entirely different histories.
fc28d419bf
...
cf70182733
@ -107,7 +107,7 @@ class WaitDialog(GenericDialog):
|
|||||||
self.cur_job = 1
|
self.cur_job = 1
|
||||||
|
|
||||||
self.cancel = Gtk.Button(label="Cancel", halign=Gtk.Align.CENTER)
|
self.cancel = Gtk.Button(label="Cancel", halign=Gtk.Align.CENTER)
|
||||||
self.cancel.connect("clicked", self._on_cancel_clicked)
|
self.cancel.connect("clicked", lambda _: self.controller.set_cancel_event())
|
||||||
|
|
||||||
self.connect("delete-event", lambda widget, event: True)
|
self.connect("delete-event", lambda widget, event: True)
|
||||||
content = self.get_content_area()
|
content = self.get_content_area()
|
||||||
@ -138,11 +138,6 @@ class WaitDialog(GenericDialog):
|
|||||||
self.prog.set_fraction(fraction)
|
self.prog.set_fraction(fraction)
|
||||||
self.cur_job += 1
|
self.cur_job += 1
|
||||||
|
|
||||||
def _on_cancel_clicked(self, button: Gtk.Button) -> None:
|
|
||||||
# TODO: strings
|
|
||||||
GLib.idle_add(self.update_text, "Caught cancel signal, cleaning up")
|
|
||||||
self.controller.set_cancel_event()
|
|
||||||
|
|
||||||
def show_cancel(self, state: bool) -> None:
|
def show_cancel(self, state: bool) -> None:
|
||||||
self.cancel.set_visible(state)
|
self.cancel.set_visible(state)
|
||||||
|
|
||||||
|
|||||||
@ -66,7 +66,6 @@ class ServerDialog(GenericDialog):
|
|||||||
|
|
||||||
class ServerDetailsDialog(ServerDialog):
|
class ServerDetailsDialog(ServerDialog):
|
||||||
def __init__(self, controller: "Controller", details: "Details"):
|
def __init__(self, controller: "Controller", details: "Details"):
|
||||||
# TODO: server name should also be packed in details struct
|
|
||||||
name = controller.get_server_name()
|
name = controller.get_server_name()
|
||||||
super().__init__(controller, strings.server_details, name, menu=None)
|
super().__init__(controller, strings.server_details, name, menu=None)
|
||||||
|
|
||||||
|
|||||||
@ -21,7 +21,6 @@ from dzgui.strings import errors, options
|
|||||||
from dzgui.util import strings, css, open_links
|
from dzgui.util import strings, css, open_links
|
||||||
|
|
||||||
from dzgui.views.components.box import VBox
|
from dzgui.views.components.box import VBox
|
||||||
from dzgui.views.components.eventbox import InfoEventBox
|
|
||||||
from dzgui.views.components.labels import LeftLabel
|
from dzgui.views.components.labels import LeftLabel
|
||||||
from dzgui.views.components.buttons import WebButton
|
from dzgui.views.components.buttons import WebButton
|
||||||
from dzgui.views.components.frame import HeadingFrame
|
from dzgui.views.components.frame import HeadingFrame
|
||||||
@ -40,37 +39,6 @@ if TYPE_CHECKING:
|
|||||||
from dzgui.controllers.emitter import Emitter
|
from dzgui.controllers.emitter import Emitter
|
||||||
|
|
||||||
|
|
||||||
class ToggleField(Gtk.Box):
|
|
||||||
def __init__(
|
|
||||||
self,
|
|
||||||
controller: "Controller",
|
|
||||||
first_option: str,
|
|
||||||
second_option: str,
|
|
||||||
context: Preferences,
|
|
||||||
) -> None:
|
|
||||||
super().__init__(spacing=5, halign=Gtk.Align.START)
|
|
||||||
|
|
||||||
self.controller = controller
|
|
||||||
self.context = context
|
|
||||||
self.radio1 = Gtk.RadioButton.new_with_label(None, first_option)
|
|
||||||
self.radio2 = Gtk.RadioButton.new_from_widget(self.radio1)
|
|
||||||
self.radio2.set_label(second_option)
|
|
||||||
self.pack_start(self.radio1, NO_EXPAND, NO_FILL, NO_PADDING)
|
|
||||||
self.pack_start(self.radio2, NO_EXPAND, NO_FILL, NO_PADDING)
|
|
||||||
|
|
||||||
def set_suboption_active(self, state: bool) -> None:
|
|
||||||
# NOTE: defer connection of signal until after state is set
|
|
||||||
self.radio2.set_active(state)
|
|
||||||
self.radio1.connect("toggled", self._on_radio_toggled, self.context)
|
|
||||||
|
|
||||||
def _on_radio_toggled(self, button: Gtk.RadioButton, context: Preferences) -> None:
|
|
||||||
self.controller.toggle_config(context)
|
|
||||||
|
|
||||||
def set_sensitive(self, state: bool) -> None:
|
|
||||||
for el in self.radio1, self.radio2:
|
|
||||||
el.set_sensitive(state)
|
|
||||||
|
|
||||||
|
|
||||||
class ShortHBox(Gtk.Box):
|
class ShortHBox(Gtk.Box):
|
||||||
def __init__(self, widget: Gtk.Widget) -> None:
|
def __init__(self, widget: Gtk.Widget) -> None:
|
||||||
super().__init__(spacing=5, halign=Gtk.Align.START)
|
super().__init__(spacing=5, halign=Gtk.Align.START)
|
||||||
@ -112,26 +80,19 @@ class Options(ScrollableMixin, Gtk.ScrolledWindow): # type: ignore
|
|||||||
# TODO: make submit field a standalone class
|
# TODO: make submit field a standalone class
|
||||||
self.player_box.get_children()[0].set_width_chars(30) # type: ignore
|
self.player_box.get_children()[0].set_width_chars(30) # type: ignore
|
||||||
|
|
||||||
self.fullscreen_toggle = ToggleField(
|
self.fullscreen_toggle = self.make_binary_radio(
|
||||||
self.controller,
|
|
||||||
strings.options.last_used,
|
strings.options.last_used,
|
||||||
strings.options.always_fs,
|
strings.options.always_fs,
|
||||||
Preferences.WINDOW,
|
Preferences.WINDOW,
|
||||||
)
|
)
|
||||||
|
|
||||||
# TODO: strings
|
|
||||||
eb = InfoEventBox(
|
|
||||||
"This option is not available on Steam Deck.", self.controller
|
|
||||||
)
|
|
||||||
self.fullscreen_toggle.add(eb)
|
|
||||||
|
|
||||||
self.client_combo = ClientCombo()
|
self.client_combo = ClientCombo()
|
||||||
self.client_combo.connect("changed", self._on_client_changed)
|
self.client_combo.connect("changed", self._on_client_changed)
|
||||||
|
|
||||||
client_hbox = ShortHBox(self.client_combo)
|
client_hbox = ShortHBox(self.client_combo)
|
||||||
|
|
||||||
self.distance_toggle = ToggleField(
|
self.distance_toggle = self.make_binary_radio(
|
||||||
self.controller, strings.options.km, strings.options.mi, Preferences.DIST
|
strings.options.km, strings.options.mi, Preferences.DIST
|
||||||
)
|
)
|
||||||
|
|
||||||
combo_store = Gtk.ListStore(str, object)
|
combo_store = Gtk.ListStore(str, object)
|
||||||
@ -332,6 +293,14 @@ class Options(ScrollableMixin, Gtk.ScrolledWindow): # type: ignore
|
|||||||
real_cmd = combo.get_model()[_iter][1]
|
real_cmd = combo.get_model()[_iter][1]
|
||||||
self.controller.update_config(Preferences.CLIENT, real_cmd)
|
self.controller.update_config(Preferences.CLIENT, real_cmd)
|
||||||
|
|
||||||
|
def _on_radio_toggled(self, button: Gtk.RadioButton, context: Preferences) -> None:
|
||||||
|
try:
|
||||||
|
self.controller.toggle_config(context)
|
||||||
|
except Exception:
|
||||||
|
button.handler_block_by_func(self._on_radio_toggled)
|
||||||
|
self.populate_settings()
|
||||||
|
button.handler_unblock_by_func(self._on_radio_toggled)
|
||||||
|
|
||||||
def _is_valid_text(self, text: str, context: Preferences) -> bool:
|
def _is_valid_text(self, text: str, context: Preferences) -> bool:
|
||||||
if text.isspace():
|
if text.isspace():
|
||||||
return False
|
return False
|
||||||
@ -375,6 +344,23 @@ class Options(ScrollableMixin, Gtk.ScrolledWindow): # type: ignore
|
|||||||
state = self._is_valid_text(text, context)
|
state = self._is_valid_text(text, context)
|
||||||
button.set_sensitive(state)
|
button.set_sensitive(state)
|
||||||
|
|
||||||
|
def make_binary_radio(
|
||||||
|
self,
|
||||||
|
first_option: str,
|
||||||
|
second_option: str,
|
||||||
|
context: Preferences,
|
||||||
|
) -> Gtk.Box:
|
||||||
|
|
||||||
|
hbox = Gtk.Box(spacing=5, halign=Gtk.Align.START)
|
||||||
|
radio1 = Gtk.RadioButton.new_with_label(None, first_option)
|
||||||
|
radio2 = Gtk.RadioButton.new_from_widget(radio1)
|
||||||
|
radio2.set_label(second_option)
|
||||||
|
radio1.connect("toggled", self._on_radio_toggled, context)
|
||||||
|
hbox.pack_start(radio1, NO_EXPAND, NO_FILL, NO_PADDING)
|
||||||
|
hbox.pack_start(radio2, NO_EXPAND, NO_FILL, NO_PADDING)
|
||||||
|
|
||||||
|
return hbox
|
||||||
|
|
||||||
def populate_settings(self) -> None:
|
def populate_settings(self) -> None:
|
||||||
prefs = self.controller.get_prefs()
|
prefs = self.controller.get_prefs()
|
||||||
# NOTE: re-check in case file was removed by user between runs
|
# NOTE: re-check in case file was removed by user between runs
|
||||||
@ -400,15 +386,14 @@ class Options(ScrollableMixin, Gtk.ScrolledWindow): # type: ignore
|
|||||||
if hasattr(p, "set_text"):
|
if hasattr(p, "set_text"):
|
||||||
p.set_text(name)
|
p.set_text(name)
|
||||||
|
|
||||||
fs = config["fullscreen"]
|
# NOTE: suppress toggle signal until radios are built
|
||||||
miles = config["use_miles"]
|
self._suppress_toggles(True)
|
||||||
|
for el, conf_state in [
|
||||||
if prefs.is_steam_deck:
|
(self.fullscreen_toggle, config["fullscreen"]),
|
||||||
self.fullscreen_toggle.set_sensitive(False)
|
(self.distance_toggle, config["use_miles"]),
|
||||||
fs = True
|
]:
|
||||||
|
el.get_children()[conf_state].set_active(True)
|
||||||
self.fullscreen_toggle.set_suboption_active(fs)
|
self._suppress_toggles(False)
|
||||||
self.distance_toggle.set_suboption_active(miles)
|
|
||||||
|
|
||||||
# NOTE: disable buttons if no text is set
|
# NOTE: disable buttons if no text is set
|
||||||
for field in (
|
for field in (
|
||||||
|
|||||||
@ -1,30 +0,0 @@
|
|||||||
from dzgui.api.servers import Details
|
|
||||||
from dzgui.views.dialogs.servers import ServerDetailsDialog
|
|
||||||
|
|
||||||
import gi
|
|
||||||
|
|
||||||
gi.require_version("Gtk", "3.0")
|
|
||||||
from gi.repository import Gtk # noqa E402
|
|
||||||
|
|
||||||
|
|
||||||
class MockController:
|
|
||||||
def __init__(self) -> None:
|
|
||||||
self.window = Gtk.Window()
|
|
||||||
|
|
||||||
def get_window(self) -> Gtk.Window:
|
|
||||||
return self.window
|
|
||||||
|
|
||||||
def get_server_name(self) -> str:
|
|
||||||
return "My server"
|
|
||||||
|
|
||||||
def get_emitter(self) -> None:
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def test_html_escaping() -> None:
|
|
||||||
text = "<Server description> Game & mods"
|
|
||||||
details = Details([["0", "1"]], text, True)
|
|
||||||
controller = MockController()
|
|
||||||
dialog = ServerDetailsDialog(controller, details)
|
|
||||||
|
|
||||||
assert dialog.description.get_text() == text
|
|
||||||
Loading…
Reference in New Issue
Block a user