mirror of
https://github.com/aclist/dztui.git
synced 2026-10-31 23:22:44 +01:00
fix: update statusbars/crumbs correctly
This commit is contained in:
1 parent
029bc1edbd
commit
167935b963
3 files changed
+53
-43
No files matched your search
+15
-6
@@ -21,6 +21,7 @@ from dzgui.const.enum import (
|
|||||||
NotebookPage,
|
NotebookPage,
|
||||||
ButtonType,
|
ButtonType,
|
||||||
ContextMenu,
|
ContextMenu,
|
||||||
|
RowType
|
||||||
)
|
)
|
||||||
|
|
||||||
from dzgui.const.constants import (
|
from dzgui.const.constants import (
|
||||||
@@ -54,11 +55,11 @@ logger = logging.getLogger(__name__)
|
|||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from dzgui.views.components.buttonbox import ContextualButton
|
from dzgui.views.components.buttonbox import ContextualButton
|
||||||
from dzgui.views.base import AppNavigation
|
from dzgui.views.base import AppNavigation
|
||||||
from dzgui.const.enum import ContextMenu, RowType
|
|
||||||
from dzgui.views.base import OuterWindow
|
from dzgui.views.base import OuterWindow
|
||||||
|
|
||||||
class Controller:
|
class Controller:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
|
self.crumbs_cache = ""
|
||||||
self.mediator: AppNavigation
|
self.mediator: AppNavigation
|
||||||
self.prefs: UserPrefs
|
self.prefs: UserPrefs
|
||||||
self.cooldown = 0
|
self.cooldown = 0
|
||||||
@@ -72,8 +73,8 @@ class Controller:
|
|||||||
if tip == store:
|
if tip == store:
|
||||||
self.set_crumbs("Help")
|
self.set_crumbs("Help")
|
||||||
|
|
||||||
def set_crumbs(self, crumbs: str) -> None:
|
def set_crumbs(self, text: str) -> None:
|
||||||
self.mediator.grid.set_breadcrumbs(crumbs)
|
self.mediator.grid.set_breadcrumbs(text)
|
||||||
|
|
||||||
def get_crumbs(self) -> str:
|
def get_crumbs(self) -> str:
|
||||||
return self.mediator.grid.get_breadcrumbs()
|
return self.mediator.grid.get_breadcrumbs()
|
||||||
@@ -293,15 +294,16 @@ class Controller:
|
|||||||
return
|
return
|
||||||
case ButtonType.OPTIONS:
|
case ButtonType.OPTIONS:
|
||||||
self.mediator.grid.notebook.settings.populate_settings()
|
self.mediator.grid.notebook.settings.populate_settings()
|
||||||
|
self.mediator.grid.statusbar.refresh(None)
|
||||||
case ButtonType.MODS:
|
case ButtonType.MODS:
|
||||||
self.load_mods()
|
self.load_mods()
|
||||||
case ButtonType.HELP:
|
case ButtonType.HELP:
|
||||||
|
self.mediator.grid.statusbar.refresh(RowType.CHANGELOG)
|
||||||
pass
|
pass
|
||||||
case ButtonType.SERVERS:
|
case ButtonType.SERVERS:
|
||||||
self.mediator.notebook.set_page_by_enum(button.opens)
|
self.mediator.notebook.set_page_by_enum(button.opens)
|
||||||
# TODO: shorten this
|
# TODO: use cache
|
||||||
treeview = self.mediator.notebook.servers.get_active_treeview()
|
self.update_server_status()
|
||||||
treeview.grab_focus()
|
|
||||||
return
|
return
|
||||||
|
|
||||||
self.mediator.notebook.set_page_by_enum(button.opens)
|
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)
|
# self.suppress_signal(tab, col, "_on_col_width_changed", True)
|
||||||
# col.set_fixed_width(width)
|
# col.set_fixed_width(width)
|
||||||
# self.suppress_signal(tab, col, "_on_col_width_changed", False)
|
# 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
|
||||||
+29
-37
@@ -289,7 +289,7 @@ class Notebook(ScrollableMixin, Gtk.Notebook):
|
|||||||
super().__init__(show_tabs=False, show_border=False)
|
super().__init__(show_tabs=False, show_border=False)
|
||||||
|
|
||||||
AppNav.notebook = self
|
AppNav.notebook = self
|
||||||
self.prior_page: int
|
self.prior_page: NotebookPage
|
||||||
|
|
||||||
from dzgui.views.pages.help import Help
|
from dzgui.views.pages.help import Help
|
||||||
self.help = Help(MainController)
|
self.help = Help(MainController)
|
||||||
@@ -394,26 +394,20 @@ class Notebook(ScrollableMixin, Gtk.Notebook):
|
|||||||
page._set_adjustment(VAdjustment.BOTTOM)
|
page._set_adjustment(VAdjustment.BOTTOM)
|
||||||
|
|
||||||
def return_prior(self) -> None:
|
def return_prior(self) -> None:
|
||||||
page = self.get_nth_page(self.prior_page)
|
"""
|
||||||
# FIXME: check enum for NotebookPage.OPTIONS
|
Gtk.Notebook focuses the first input field when changing pages;
|
||||||
# TODO: can be dropped?
|
this workaround unhighlights the selected region and makes entry
|
||||||
if hasattr(page, "steam_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
|
Used when switching back from NotebookPage.KEYS
|
||||||
"""
|
"""
|
||||||
entries = page.steam_entry, page.bm_entry
|
if self.prior_page is NotebookPage.OPTIONS:
|
||||||
for entry in entries:
|
self.settings.block_text_entry()
|
||||||
entry.set_position(-1)
|
self.set_page_by_enum(self.prior_page)
|
||||||
entry.set_can_focus(False)
|
self.settings.unblock_text_entry()
|
||||||
self.set_current_page(self.prior_page)
|
return
|
||||||
for entry in entries:
|
self.set_page_by_enum(self.prior_page)
|
||||||
entry.set_can_focus(True)
|
|
||||||
self.set_current_page(self.prior_page)
|
|
||||||
|
|
||||||
def get_page_by_enum(self) -> NotebookPage | None:
|
def get_page_by_enum(self) -> NotebookPage | None:
|
||||||
for k, v in self.indexes.items():
|
for k, v in self.indexes.items():
|
||||||
@@ -426,7 +420,7 @@ class Notebook(ScrollableMixin, Gtk.Notebook):
|
|||||||
if cur_page == NotebookPage.KEYS:
|
if cur_page == NotebookPage.KEYS:
|
||||||
self.return_prior()
|
self.return_prior()
|
||||||
else:
|
else:
|
||||||
self.prior_page = self.get_current_page()
|
#self.prior_page = cur_page #self.get_current_page()
|
||||||
self.set_page_by_enum(NotebookPage.KEYS)
|
self.set_page_by_enum(NotebookPage.KEYS)
|
||||||
|
|
||||||
def focus_current(self) -> None:
|
def focus_current(self) -> None:
|
||||||
@@ -440,7 +434,6 @@ class Notebook(ScrollableMixin, Gtk.Notebook):
|
|||||||
return
|
return
|
||||||
|
|
||||||
w = widget.get_children()[0]
|
w = widget.get_children()[0]
|
||||||
# NOTE: if item contains treeview, focus first cell
|
|
||||||
try:
|
try:
|
||||||
w.focus_first_row()
|
w.focus_first_row()
|
||||||
w.grab_focus()
|
w.grab_focus()
|
||||||
@@ -455,25 +448,24 @@ class Notebook(ScrollableMixin, Gtk.Notebook):
|
|||||||
return widget
|
return widget
|
||||||
|
|
||||||
def set_page_by_enum(self, enum: NotebookPage) -> None:
|
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.set_current_page(self.indexes[enum])
|
||||||
self.focus_current()
|
self.focus_current()
|
||||||
|
|
||||||
# TODO: should be an internal property of those pages
|
# TODO: should be an internal property of those pages
|
||||||
if enum is NotebookPage.SERVERS:
|
match enum:
|
||||||
AppNav.grid.show_connect_panel()
|
case NotebookPage.KEYS:
|
||||||
else:
|
MainController.set_statusbar("")
|
||||||
AppNav.grid.hide_connect_panel()
|
AppNav.grid.hide_connect_panel()
|
||||||
|
case NotebookPage.SERVERS:
|
||||||
blank = [
|
# TODO: consolidate in mc.py
|
||||||
NotebookPage.OPTIONS,
|
AppNav.grid.show_connect_panel()
|
||||||
NotebookPage.THANKS,
|
self.servers.get_active_treeview().grab_focus()
|
||||||
NotebookPage.CHANGELOG,
|
MainController.update_server_status()
|
||||||
NotebookPage.LOG
|
crumbs = self.servers.get_cached_label()
|
||||||
]
|
MainController.set_crumbs(crumbs)
|
||||||
if enum in blank:
|
case _:
|
||||||
# TODO: delegate to controller
|
AppNav.grid.hide_connect_panel()
|
||||||
AppNav.grid.statusbar.refresh(None)
|
|
||||||
|
|
||||||
def _on_page_changed(
|
def _on_page_changed(
|
||||||
self, notebook: "Notebook", page: Gtk.Widget, page_num: int
|
self, notebook: "Notebook", page: Gtk.Widget, page_num: int
|
||||||
|
|||||||
@@ -190,6 +190,15 @@ class Options(Gtk.Box):
|
|||||||
self.scrollable.add(grid)
|
self.scrollable.add(grid)
|
||||||
self.add(self.scrollable)
|
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:
|
def _on_developers_clicked(self, button: Gtk.Button) -> None:
|
||||||
self.controller.show_developers_page()
|
self.controller.show_developers_page()
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user