mirror of
https://github.com/aclist/dztui.git
synced 2026-11-06 10:00:54 +01:00
feat: update fav server dynamically
This commit is contained in:
1 parent
502b574085
commit
24125a7492
19 files changed
+127
-231
No files matched your search
@@ -1,4 +1,4 @@
|
||||
from typing import Literal, Self, TYPE_CHECKING
|
||||
from typing import Callable, Literal, Self, TYPE_CHECKING
|
||||
|
||||
from dzgui.util.strings import atomic_buttons, connect_panel
|
||||
from dzgui.const.constants import (
|
||||
@@ -11,6 +11,7 @@ from dzgui.const.constants import (
|
||||
)
|
||||
|
||||
import gi
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, GLib # noqa E402
|
||||
|
||||
@@ -21,7 +22,8 @@ if TYPE_CHECKING:
|
||||
|
||||
class Icon(Gtk.Image):
|
||||
def __init__(self, name: str, l_margin: int = 0) -> None:
|
||||
super().__init__(icon_name=name,
|
||||
super().__init__(
|
||||
icon_name=name,
|
||||
icon_size=Gtk.IconSize.BUTTON,
|
||||
margin_start=l_margin,
|
||||
ypad=2,
|
||||
@@ -30,9 +32,8 @@ class Icon(Gtk.Image):
|
||||
|
||||
class LargeIcon(Gtk.Image):
|
||||
def __init__(self, name: str, l_margin: int = 5) -> None:
|
||||
super().__init__(icon_name=name,
|
||||
icon_size=Gtk.IconSize.LARGE_TOOLBAR,
|
||||
margin_start=l_margin
|
||||
super().__init__(
|
||||
icon_name=name, icon_size=Gtk.IconSize.LARGE_TOOLBAR, margin_start=l_margin
|
||||
)
|
||||
|
||||
|
||||
@@ -59,14 +60,15 @@ class LargeIconTextButton(IconButton):
|
||||
|
||||
|
||||
class ClipboardButton(IconTextButton):
|
||||
def __init__(self, controller: "Controller", data: str) -> None:
|
||||
def __init__(self, controller: "Controller", func: Callable) -> None:
|
||||
super().__init__(CLIPBOARD, atomic_buttons.copy)
|
||||
self.controller = controller
|
||||
self.connect("clicked", self._on_button_clicked, data)
|
||||
self.connect("clicked", self._on_button_clicked, func)
|
||||
|
||||
self.set_tooltip_text("Copy IP to clipboard")
|
||||
|
||||
def _on_button_clicked(self, button: Self, data: str) -> None:
|
||||
def _on_button_clicked(self, button: Self, func: Callable) -> None:
|
||||
data = func()
|
||||
self.controller.copy_clipboard(data)
|
||||
|
||||
|
||||
|
||||
@@ -73,12 +73,14 @@ class FavPanel(Gtk.Frame):
|
||||
self.set_label_widget(label)
|
||||
|
||||
self.controller = controller
|
||||
emitter = self.controller.get_emitter()
|
||||
emitter.connect("fav_server_changed", self._on_fav_server_changed)
|
||||
|
||||
# TODO: improve upon this, cache fav ip when changed globally
|
||||
user_fav, self.fav_ip = self.controller.get_favorite()
|
||||
self.server_name, self.server_ip = self.controller.get_favorite()
|
||||
server_name = (
|
||||
f"{user_fav} ({self.fav_ip})"
|
||||
if user_fav is not None
|
||||
f"{self.server_name} ({self.server_ip})"
|
||||
if self.server_name is not None
|
||||
else connect_panel.no_fav
|
||||
)
|
||||
self.fav_label = Gtk.Label(
|
||||
@@ -94,9 +96,8 @@ class FavPanel(Gtk.Frame):
|
||||
self.fav_button = SteamConnectButton()
|
||||
if server_name is None:
|
||||
self.fav_button.set_sensitive(False)
|
||||
copy = ClipboardButton(self.controller, self.get_fav_ip())
|
||||
copy = ClipboardButton(self.controller, self.get_fav_ip)
|
||||
|
||||
# FIXME: height of connect buttons is not equivalent
|
||||
grid = Gtk.Grid(margin=10, vexpand=False, column_spacing=15, row_spacing=5)
|
||||
grid.attach(scrollable_label, 0, 0, 3, ROWS)
|
||||
grid.attach_next_to(copy, scrollable_label, Gtk.PositionType.RIGHT, COLS, ROWS)
|
||||
@@ -105,11 +106,16 @@ class FavPanel(Gtk.Frame):
|
||||
self.add(grid)
|
||||
|
||||
def get_fav_ip(self) -> str:
|
||||
return self.fav_ip
|
||||
return self.server_ip
|
||||
|
||||
def set_fav_label(self, text: str) -> None:
|
||||
# TODO: called by controller when changing fav
|
||||
self.fav_label.set_text(text)
|
||||
from dzgui.api.servers import Record
|
||||
|
||||
def _on_fav_server_changed(
|
||||
self, emitter: "Emitter", name: str, record: str
|
||||
) -> None:
|
||||
self.server_name = name
|
||||
self.server_ip = record
|
||||
self.fav_label.set_text(f"{name} ({record})")
|
||||
|
||||
|
||||
class AddPanel(Gtk.Frame):
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from dzgui.const.enum import NotebookPage
|
||||
from dzgui.util.strings import label_main_menu
|
||||
from dzgui.util.strings import label_main_menu, crumbs
|
||||
from dzgui.util.format import embolden
|
||||
|
||||
import gi
|
||||
@@ -43,9 +43,8 @@ class Breadcrumbs(Gtk.Label):
|
||||
crumbs = enum.dict["crumbs"]
|
||||
self.set_crumbs(crumbs)
|
||||
|
||||
def set_server_crumbs(self, crumbs: str) -> None:
|
||||
# TODO: strings
|
||||
self.set_crumbs("Servers > " + crumbs)
|
||||
def set_server_crumbs(self, suffix: str) -> None:
|
||||
self.set_crumbs(crumbs.default + suffix)
|
||||
|
||||
def set_crumbs(self, crumbs: str) -> None:
|
||||
text = embolden(crumbs)
|
||||
|
||||
@@ -149,7 +149,8 @@ class FilterPanel(Gtk.Box):
|
||||
filters.append(k)
|
||||
return tuple(filters)
|
||||
|
||||
# TODO: currently unused
|
||||
# TODO: should be used when switching ServerTab contexts
|
||||
# use signals here
|
||||
# def reinit_panel(self) -> None:
|
||||
# self.keyword_entry.set_text("")
|
||||
# self.keyword_filter = ""
|
||||
|
||||
@@ -64,6 +64,8 @@ class ModSelectionPanel(Gtk.Box):
|
||||
self.set_visible(state)
|
||||
|
||||
def after_colorize(self) -> None:
|
||||
# TODO: split into signal that touches two widgets,
|
||||
# modtreeview and this widget
|
||||
self.controller.unselect_all_mods()
|
||||
self.swap_sensitive(True)
|
||||
|
||||
@@ -77,6 +79,7 @@ class ModSelectionPanel(Gtk.Box):
|
||||
def _on_button_clicked(self, button: EnumeratedModButton) -> None:
|
||||
match button.enum:
|
||||
case ModButton.SELECT_ALL:
|
||||
# TODO: signals
|
||||
self.controller.toggle_mod_selection(True)
|
||||
case ModButton.UNSELECT_ALL:
|
||||
self.controller.toggle_mod_selection(False)
|
||||
|
||||
Reference in new issue
Block a user