mirror of
https://github.com/aclist/dztui.git
synced 2026-08-27 10:17:31 +02:00
fix: update crumbs when paginating
This commit is contained in:
parent
37dab3e83b
commit
248978f993
@ -34,6 +34,7 @@ VIEW_CONCEAL = "view-conceal-symbolic"
|
||||
VIEW_REVEAL = "view-reveal-symbolic"
|
||||
INPUT_KEYBOARD = "input-keyboard-symbolic"
|
||||
HELP_BUBBLE = "help-about-symbolic"
|
||||
REFRESH_ICON = "view-refresh-symbolic"
|
||||
WEB_BROWSER = "web-browser-symbolic"
|
||||
|
||||
SEPARATOR = "SEPARATOR"
|
||||
|
||||
@ -78,13 +78,10 @@ class Preferences(EnumWithAttrs):
|
||||
|
||||
class NotebookPage(EnumWithAttrs):
|
||||
CHANGELOG = {"crumbs": strings.crumbs.changelog,}
|
||||
HISTORY = {"crumbs": strings.crumbs.history,}
|
||||
KEYS = {"crumbs": strings.crumbs.keys,}
|
||||
LAN = {"crumbs": strings.crumbs.lan,}
|
||||
LOG = {"crumbs": strings.crumbs.log,}
|
||||
HELP = {"crumbs": strings.crumbs._help,}
|
||||
MODS = {"crumbs": strings.crumbs.mods,}
|
||||
MY_SERVERS = {"crumbs": strings.crumbs.my_servers,}
|
||||
OPTIONS = {"crumbs": strings.crumbs.options,}
|
||||
SERVERS = {"crumbs": strings.crumbs.servers,}
|
||||
THANKS = {"crumbs": strings.crumbs.thanks,}
|
||||
|
||||
@ -556,10 +556,10 @@ class Controller:
|
||||
def get_developer_mode(self) -> bool:
|
||||
return self.is_developer
|
||||
|
||||
def set_server_statusbar(self) -> None:
|
||||
# TODO: different models
|
||||
model = self.model_manager.get_server_store()
|
||||
model = AppNav.treeview.get_model()
|
||||
def update_server_status(self) -> None:
|
||||
from dzgui.util.format import pluralize
|
||||
treeview = self.mediator.notebook.servers.get_active_treeview()
|
||||
model = treeview.get_model()
|
||||
if model is None:
|
||||
players = 0
|
||||
hits = 0
|
||||
@ -568,7 +568,6 @@ class Controller:
|
||||
players = 0
|
||||
for row in model:
|
||||
players += row[4]
|
||||
|
||||
# TODO: move to util.format
|
||||
players_pretty = pluralize("players", players)
|
||||
hits_pretty = pluralize("matches", hits)
|
||||
@ -579,5 +578,5 @@ class Controller:
|
||||
|
||||
if players == 0:
|
||||
suffix = ""
|
||||
self.set_text(formatted + suffix)
|
||||
self.players = formatted
|
||||
self.mediator.statusbar.set_text(formatted + suffix)
|
||||
#self.players = formatted
|
||||
|
||||
@ -11,6 +11,8 @@ def add_class(widget: Gtk.Widget, label: str) -> None:
|
||||
context = widget.get_style_context()
|
||||
context.add_class(label)
|
||||
|
||||
# TODO: def remove_class()
|
||||
|
||||
def load_css() -> None:
|
||||
# TODO: consider storing this in a data file
|
||||
css = """
|
||||
|
||||
@ -255,13 +255,10 @@ class Button:
|
||||
@dataclass(slots=True, frozen=True)
|
||||
class Crumbs:
|
||||
changelog: str
|
||||
history: str
|
||||
keys: str
|
||||
lan: str
|
||||
log: str
|
||||
_help: str
|
||||
mods: str
|
||||
my_servers: str
|
||||
options: str
|
||||
servers: str
|
||||
thanks: str
|
||||
@ -441,15 +438,12 @@ buttons = Button(
|
||||
|
||||
crumbs = Crumbs(
|
||||
changelog="Help > Changelog",
|
||||
history="Main menu > Recent servers",
|
||||
keys="Keybindings",
|
||||
lan="Main menu > Local servers",
|
||||
log="Help > Debug log",
|
||||
_help="Help",
|
||||
mods="Mods",
|
||||
my_servers="Main menu > Saved servers",
|
||||
options="Options",
|
||||
servers="Servers",
|
||||
servers="Servers > Server browser",
|
||||
thanks="Help > Special thanks",
|
||||
developers="Options > Developers",
|
||||
)
|
||||
|
||||
@ -40,6 +40,7 @@ from dzgui.views.pages.options import Options
|
||||
from dzgui.views.pages.servers import ServerNotebook
|
||||
from dzgui.views.pages.thanks import Thanks
|
||||
|
||||
from dzgui.views.components.statusbar import Statusbar
|
||||
from dzgui.views.components.mod_panel import ModSelectionPanel
|
||||
from dzgui.views.components.right_panel import RightPanel
|
||||
from dzgui.views.components.toast import Toast
|
||||
@ -65,19 +66,7 @@ logger = logging.getLogger(__name__)
|
||||
warnings.filterwarnings("ignore", ".*g_value_get_int", Warning)
|
||||
|
||||
# TODO: move to controller
|
||||
cache: dict[str, int] = {}
|
||||
|
||||
# TODO: move to strings.py
|
||||
def format_metadata(row: RowType) -> str:
|
||||
prefix = row.dict["tooltip"]
|
||||
|
||||
if row == RowType.QUICK_CONNECT or row == RowType.CHNG_FAV:
|
||||
label = MainController.query_config(Preferences.FAV_LBL)
|
||||
if len(label) < 1:
|
||||
label = "unset"
|
||||
return f"{prefix} ({label})"
|
||||
else:
|
||||
return prefix
|
||||
#cache: dict[str, int] = {}
|
||||
|
||||
## TODO: move to configs/servers
|
||||
#def query_history() -> list | None:
|
||||
@ -228,23 +217,14 @@ class OuterWindow(Gtk.Window):
|
||||
MainController.set_resolution(self)
|
||||
|
||||
self.grid = Grid()
|
||||
self.toast = Toast()
|
||||
self.overlay = Gtk.Overlay()
|
||||
self.overlay.add_overlay(self.grid)
|
||||
# TODO: toast is deprecated
|
||||
self.overlay.add_overlay(self.toast)
|
||||
self.add(self.overlay)
|
||||
self.add(self.grid)
|
||||
|
||||
self.show_all()
|
||||
|
||||
self.toast.set_visible(False)
|
||||
self.grid.right_panel.filters_vbox.set_visible(False)
|
||||
self.grid.right_panel.enable_ping_button(False)
|
||||
self.grid.sel_panel.set_visible(False)
|
||||
|
||||
# TODO: register from treeview or notebook
|
||||
#AppNav.treeview = self.grid.notebook.scrollable_treelist.treeview
|
||||
|
||||
css.load_css()
|
||||
AppNav.grid.notebook.set_page_by_enum(NotebookPage.SERVERS)
|
||||
|
||||
@ -416,6 +396,7 @@ class Notebook(ScrollableMixin, Gtk.Notebook):
|
||||
def return_prior(self) -> None:
|
||||
page = self.get_nth_page(self.prior_page)
|
||||
# FIXME: check enum for NotebookPage.OPTIONS
|
||||
# TODO: can be dropped?
|
||||
if hasattr(page, "steam_entry"):
|
||||
"""
|
||||
Gtk.Notebook focuses the first input field when changing pages;
|
||||
@ -479,7 +460,6 @@ class Notebook(ScrollableMixin, Gtk.Notebook):
|
||||
self.focus_current()
|
||||
# TODO: should be an internal property of those pages
|
||||
blank = [
|
||||
NotebookPage.SERVERS,
|
||||
NotebookPage.OPTIONS,
|
||||
NotebookPage.THANKS,
|
||||
NotebookPage.CHANGELOG,
|
||||
@ -496,99 +476,35 @@ class Notebook(ScrollableMixin, Gtk.Notebook):
|
||||
is_mods = True if enum is NotebookPage.MODS else False
|
||||
MainController.toggle_mod_panel(is_mods)
|
||||
|
||||
# TODO:
|
||||
# TODO:
|
||||
crumbs = enum.dict["crumbs"]
|
||||
MainController.set_crumbs(crumbs)
|
||||
|
||||
# TODO: move to components
|
||||
class Statusbar(Gtk.Statusbar):
|
||||
def __init__(self) -> None:
|
||||
super().__init__()
|
||||
|
||||
help_text = strings.statusbar_helptext
|
||||
self.set_text(help_text)
|
||||
|
||||
version = MainController.get_prefs().version
|
||||
self.status_right_label = Gtk.Label(label=version)
|
||||
self.add(self.status_right_label)
|
||||
|
||||
self.players = ""
|
||||
|
||||
def get_text(self) -> str:
|
||||
area = self.get_message_area()
|
||||
label = area.get_children()[0]
|
||||
return label.get_text()
|
||||
|
||||
def set_text(self, string: str) -> None:
|
||||
if string is None:
|
||||
return
|
||||
meta = self.get_context_id("Statusbar")
|
||||
self.push(meta, string)
|
||||
|
||||
def refresh(self, row: RowType) -> None:
|
||||
if row is None:
|
||||
formatted = ""
|
||||
else:
|
||||
formatted = format_metadata(row)
|
||||
self.set_text(formatted)
|
||||
|
||||
def append_distance(self, dist: str) -> None:
|
||||
# TODO: process strings in controller
|
||||
if dist == strings.unknown:
|
||||
dist = f"| Distance: {dist}"
|
||||
else:
|
||||
dist = f"| Distance: {dist}"
|
||||
self.set_text(self.players + dist)
|
||||
|
||||
def update_server_meta(self) -> None:
|
||||
model = AppNav.treeview.get_model()
|
||||
if model is None:
|
||||
players = 0
|
||||
hits = 0
|
||||
else:
|
||||
hits = len(model)
|
||||
players = 0
|
||||
for row in model:
|
||||
players += row[4]
|
||||
|
||||
# TODO: move to util.format
|
||||
players_pretty = pluralize("players", players)
|
||||
hits_pretty = pluralize("matches", hits)
|
||||
formatted = (
|
||||
f"Found {hits:n} {hits_pretty} with {players:n} {players_pretty}"
|
||||
)
|
||||
suffix = "| Distance: calculating..."
|
||||
|
||||
if players == 0:
|
||||
suffix = ""
|
||||
self.set_text(formatted + suffix)
|
||||
self.players = formatted
|
||||
|
||||
|
||||
class Grid(Gtk.Grid):
|
||||
def __init__(self) -> None:
|
||||
super().__init__()
|
||||
self.set_column_homogeneous(True)
|
||||
|
||||
AppNav.grid = self
|
||||
|
||||
self.statusbar = Statusbar(MainController)
|
||||
self.breadcrumbs = Gtk.Label(halign=Gtk.Align.START)
|
||||
self.set_breadcrumbs(strings.label_main_menu)
|
||||
|
||||
AppNav.statusbar = self.statusbar
|
||||
AppNav.grid = self
|
||||
|
||||
# FIXME: do not pass AppNav to right panel
|
||||
self.right_panel = RightPanel(AppNav, MainController)
|
||||
self.sel_panel = ModSelectionPanel(MainController)
|
||||
self.right_panel.pack_start(self.sel_panel, NO_EXPAND, NO_FILL, 0)
|
||||
|
||||
self.notebook = Notebook()
|
||||
self.statusbar = Statusbar()
|
||||
|
||||
|
||||
self.attach(self.notebook, 0, 0, 3, 1)
|
||||
self.attach_next_to(
|
||||
self.breadcrumbs, self.notebook, Gtk.PositionType.TOP, 3, 1
|
||||
)
|
||||
|
||||
|
||||
#from dzgui.views.components.connect_panel import ConnectPanel
|
||||
#self.conpan = ConnectPanel()
|
||||
#self.attach_next_to(
|
||||
@ -629,6 +545,11 @@ class App(Gtk.Application):
|
||||
)
|
||||
self.win.add_accel_group(accel)
|
||||
|
||||
# FIXME: hacky
|
||||
AppNav.notebook.servers.notebook.next_page()
|
||||
AppNav.notebook.servers.notebook.prev_page()
|
||||
MainController.focus_notebook()
|
||||
|
||||
GLib.unix_signal_add(
|
||||
GLib.PRIORITY_DEFAULT, signal.SIGINT, self._catch_sigint
|
||||
)
|
||||
@ -652,6 +573,7 @@ class AppNavigation:
|
||||
window: OuterWindow
|
||||
notebook: Notebook
|
||||
right_panel: RightPanel
|
||||
statusbar: Statusbar
|
||||
menu: MenuTreeView
|
||||
servers: Gtk.ScrolledWindow
|
||||
browser: ServerTreeView
|
||||
@ -661,6 +583,7 @@ class AppNavigation:
|
||||
modtreeview: ModTreeView
|
||||
logtreeview: LogTreeView
|
||||
# TODO: add tree_log and tree_server views here
|
||||
# or obtain via get_treeview()
|
||||
|
||||
AppNav = AppNavigation()
|
||||
MainController = Controller()
|
||||
|
||||
@ -5,11 +5,25 @@ import gi
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk # noqa E402
|
||||
|
||||
# TODO: abstract to support other icons
|
||||
class WebButton(Gtk.Button):
|
||||
def __init__(self, label: str):
|
||||
super().__init__(label=label)
|
||||
|
||||
icon = Icon(WEB_BROWSER, l_margin=5)
|
||||
self.set_image(icon)
|
||||
class IconButton(Gtk.Button):
|
||||
def __init__(self, icon: str, margin: int = 0):
|
||||
super().__init__()
|
||||
|
||||
i = Icon(icon, l_margin=margin)
|
||||
self.set_image(i)
|
||||
self.set_image_position(Gtk.PositionType.RIGHT)
|
||||
|
||||
|
||||
class IconTextButton(IconButton):
|
||||
def __init__(self, icon: str, label: str):
|
||||
super().__init__(icon, margin=5)
|
||||
|
||||
self.set_label(label)
|
||||
|
||||
|
||||
class WebButton(IconTextButton):
|
||||
def __init__(self, label: str):
|
||||
super().__init__(icon=WEB_BROWSER, label=label)
|
||||
|
||||
pass
|
||||
|
||||
@ -44,7 +44,6 @@ class MenuTreeView(TreeView):
|
||||
column: Gtk.TreeViewColumn
|
||||
) -> None:
|
||||
row_type = self.get_value_at_index(1)
|
||||
print(row_type)
|
||||
|
||||
match row_type:
|
||||
case RowType.THANKS:
|
||||
|
||||
@ -216,17 +216,20 @@ class ServerTreeView(TreeView):
|
||||
column: Gtk.TreeViewColumn
|
||||
) -> None:
|
||||
# TODO: process server connection
|
||||
# TODO: get record
|
||||
print(self.get_value_at_index(0))
|
||||
|
||||
def _parent_selection_changed(self, base_class: TreeView, sel: Gtk.TreeSelection):
|
||||
|
||||
self.terminate_process()
|
||||
record = self.get_record()
|
||||
#TODO
|
||||
return
|
||||
|
||||
if record is None:
|
||||
# TODO: move to controller
|
||||
#grid.statusbar.update_server_meta()
|
||||
return
|
||||
#model = self.get_model()
|
||||
#if record is None:
|
||||
# self.controller.update_server_status(model)
|
||||
# return
|
||||
|
||||
ip = record.ip
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user