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