fix: update statusbars/crumbs correctly

This commit is contained in:
aclist 2025-12-30 21:27:30 +09:00
parent 029bc1edbd
commit 167935b963
3 changed files with 53 additions and 43 deletions

View File

@ -21,6 +21,7 @@ from dzgui.const.enum import (
NotebookPage,
ButtonType,
ContextMenu,
RowType
)
from dzgui.const.constants import (
@ -54,11 +55,11 @@ logger = logging.getLogger(__name__)
if TYPE_CHECKING:
from dzgui.views.components.buttonbox import ContextualButton
from dzgui.views.base import AppNavigation
from dzgui.const.enum import ContextMenu, RowType
from dzgui.views.base import OuterWindow
class Controller:
def __init__(self) -> None:
self.crumbs_cache = ""
self.mediator: AppNavigation
self.prefs: UserPrefs
self.cooldown = 0
@ -72,8 +73,8 @@ class Controller:
if tip == store:
self.set_crumbs("Help")
def set_crumbs(self, crumbs: str) -> None:
self.mediator.grid.set_breadcrumbs(crumbs)
def set_crumbs(self, text: str) -> None:
self.mediator.grid.set_breadcrumbs(text)
def get_crumbs(self) -> str:
return self.mediator.grid.get_breadcrumbs()
@ -293,15 +294,16 @@ class Controller:
return
case ButtonType.OPTIONS:
self.mediator.grid.notebook.settings.populate_settings()
self.mediator.grid.statusbar.refresh(None)
case ButtonType.MODS:
self.load_mods()
case ButtonType.HELP:
self.mediator.grid.statusbar.refresh(RowType.CHANGELOG)
pass
case ButtonType.SERVERS:
self.mediator.notebook.set_page_by_enum(button.opens)
# TODO: shorten this
treeview = self.mediator.notebook.servers.get_active_treeview()
treeview.grab_focus()
# TODO: use cache
self.update_server_status()
return
self.mediator.notebook.set_page_by_enum(button.opens)
@ -588,3 +590,10 @@ class Controller:
# self.suppress_signal(tab, col, "_on_col_width_changed", True)
# col.set_fixed_width(width)
# self.suppress_signal(tab, col, "_on_col_width_changed", False)
def set_crumbs_cache(self,text: str) -> None:
self.crumbs_cache = text
def get_crumbs_cache(self) -> None:
return self.crumbs_cache
self.crumbs_cache = text

View File

@ -289,7 +289,7 @@ class Notebook(ScrollableMixin, Gtk.Notebook):
super().__init__(show_tabs=False, show_border=False)
AppNav.notebook = self
self.prior_page: int
self.prior_page: NotebookPage
from dzgui.views.pages.help import Help
self.help = Help(MainController)
@ -394,26 +394,20 @@ class Notebook(ScrollableMixin, Gtk.Notebook):
page._set_adjustment(VAdjustment.BOTTOM)
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;
this workaround unhighlights the selected region and makes entry
fields unfocusable prior to the page 'switch-page' signal,
then makes them focusable again
"""
Gtk.Notebook focuses the first input field when changing pages;
this workaround unhighlights the selected region and makes entry
fields unfocusable prior to the page 'switch-page' signal,
then makes them focusable again
Used when switching to keybindings dialog
"""
entries = page.steam_entry, page.bm_entry
for entry in entries:
entry.set_position(-1)
entry.set_can_focus(False)
self.set_current_page(self.prior_page)
for entry in entries:
entry.set_can_focus(True)
self.set_current_page(self.prior_page)
Used when switching back from NotebookPage.KEYS
"""
if self.prior_page is NotebookPage.OPTIONS:
self.settings.block_text_entry()
self.set_page_by_enum(self.prior_page)
self.settings.unblock_text_entry()
return
self.set_page_by_enum(self.prior_page)
def get_page_by_enum(self) -> NotebookPage | None:
for k, v in self.indexes.items():
@ -426,7 +420,7 @@ class Notebook(ScrollableMixin, Gtk.Notebook):
if cur_page == NotebookPage.KEYS:
self.return_prior()
else:
self.prior_page = self.get_current_page()
#self.prior_page = cur_page #self.get_current_page()
self.set_page_by_enum(NotebookPage.KEYS)
def focus_current(self) -> None:
@ -440,7 +434,6 @@ class Notebook(ScrollableMixin, Gtk.Notebook):
return
w = widget.get_children()[0]
# NOTE: if item contains treeview, focus first cell
try:
w.focus_first_row()
w.grab_focus()
@ -455,25 +448,24 @@ class Notebook(ScrollableMixin, Gtk.Notebook):
return widget
def set_page_by_enum(self, enum: NotebookPage) -> None:
self.prior_page = self.get_current_page()
self.prior_page = self.get_page_by_enum()
self.set_current_page(self.indexes[enum])
self.focus_current()
# TODO: should be an internal property of those pages
if enum is NotebookPage.SERVERS:
AppNav.grid.show_connect_panel()
else:
AppNav.grid.hide_connect_panel()
blank = [
NotebookPage.OPTIONS,
NotebookPage.THANKS,
NotebookPage.CHANGELOG,
NotebookPage.LOG
]
if enum in blank:
# TODO: delegate to controller
AppNav.grid.statusbar.refresh(None)
match enum:
case NotebookPage.KEYS:
MainController.set_statusbar("")
AppNav.grid.hide_connect_panel()
case NotebookPage.SERVERS:
# TODO: consolidate in mc.py
AppNav.grid.show_connect_panel()
self.servers.get_active_treeview().grab_focus()
MainController.update_server_status()
crumbs = self.servers.get_cached_label()
MainController.set_crumbs(crumbs)
case _:
AppNav.grid.hide_connect_panel()
def _on_page_changed(
self, notebook: "Notebook", page: Gtk.Widget, page_num: int

View File

@ -190,6 +190,15 @@ class Options(Gtk.Box):
self.scrollable.add(grid)
self.add(self.scrollable)
def block_text_entry(self) -> None:
for entry in self.steam_entry, self.bm_entry:
entry.set_position(-1)
entry.set_can_focus(False)
def unblock_text_entry(self) -> None:
for entry in self.steam_entry, self.bm_entry:
entry.set_can_focus(True)
def _on_developers_clicked(self, button: Gtk.Button) -> None:
self.controller.show_developers_page()