mirror of
https://github.com/aclist/dztui.git
synced 2026-10-30 14:42:54 +01:00
feat: lazy refresh model on page change (WIP)
This commit is contained in:
1 parent
72c1081b48
commit
e7735e0472
5 files changed
+62
-6
No files matched your search
@@ -307,6 +307,7 @@ class Controller:
|
|||||||
|
|
||||||
def show_developers_page(self) -> None:
|
def show_developers_page(self) -> None:
|
||||||
self.open_page(NotebookPage.DEVELOPERS)
|
self.open_page(NotebookPage.DEVELOPERS)
|
||||||
|
# TODO: focus first row
|
||||||
|
|
||||||
def open_page(self, page: NotebookPage) -> None:
|
def open_page(self, page: NotebookPage) -> None:
|
||||||
self.mediator.grid.notebook.set_page_by_enum(page)
|
self.mediator.grid.notebook.set_page_by_enum(page)
|
||||||
@@ -593,3 +594,22 @@ class Controller:
|
|||||||
def get_crumbs_cache(self) -> None:
|
def get_crumbs_cache(self) -> None:
|
||||||
return self.crumbs_cache
|
return self.crumbs_cache
|
||||||
self.crumbs_cache = text
|
self.crumbs_cache = text
|
||||||
|
|
||||||
|
def refresh_tree(self) -> None:
|
||||||
|
treeview = self.mediator.notebook.servers.get_active_treeview()
|
||||||
|
treeview.set_loaded(False)
|
||||||
|
self.populate_model()
|
||||||
|
|
||||||
|
def populate_model(self) -> None:
|
||||||
|
# TODO: always use same server model, store in servertreeview class
|
||||||
|
treeview = self.mediator.notebook.servers.get_active_treeview()
|
||||||
|
if treeview.get_loaded() is False:
|
||||||
|
new_model = self.model_manager.new_model()
|
||||||
|
func = treeview.get_query_func()
|
||||||
|
if func is not None:
|
||||||
|
model = treeview.get_model()
|
||||||
|
model.clear()
|
||||||
|
data = func()
|
||||||
|
model.append(data)
|
||||||
|
treeview.set_loaded(True)
|
||||||
|
self.update_server_status()
|
||||||
@@ -89,10 +89,10 @@ class ModelManager:
|
|||||||
self.filtered = None
|
self.filtered = None
|
||||||
self.success = True
|
self.success = True
|
||||||
|
|
||||||
def __new__(cls) -> Self:
|
#def __new__(cls) -> Self:
|
||||||
if not hasattr(cls, "instance"):
|
# if not hasattr(cls, "instance"):
|
||||||
cls.instance = super(ModelManager, cls).__new__(cls)
|
# cls.instance = super(ModelManager, cls).__new__(cls)
|
||||||
return cls.instance
|
# return cls.instance
|
||||||
|
|
||||||
def get_recent_store(self) -> ListStore:
|
def get_recent_store(self) -> ListStore:
|
||||||
return self.recent_store
|
return self.recent_store
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ from dzgui.const.enum import Preferences
|
|||||||
from dzgui.views.components.buttonbox import ButtonBox
|
from dzgui.views.components.buttonbox import ButtonBox
|
||||||
from dzgui.views.components.filter_panel import FilterPanel
|
from dzgui.views.components.filter_panel import FilterPanel
|
||||||
from dzgui.views.components.icon import Icon
|
from dzgui.views.components.icon import Icon
|
||||||
|
from dzgui.views.components.web_button import RefreshButton
|
||||||
|
# TODO: rename web_button
|
||||||
from dzgui.const.constants import NO_EXPAND, NO_FILL, EXPAND, FILL, INPUT_KEYBOARD
|
from dzgui.const.constants import NO_EXPAND, NO_FILL, EXPAND, FILL, INPUT_KEYBOARD
|
||||||
from dzgui.util import strings
|
from dzgui.util import strings
|
||||||
|
|
||||||
@@ -25,6 +27,7 @@ class RightPanel(Gtk.Box):
|
|||||||
padding = 0
|
padding = 0
|
||||||
self.pack_start(el, NO_EXPAND, NO_FILL, padding)
|
self.pack_start(el, NO_EXPAND, NO_FILL, padding)
|
||||||
|
|
||||||
|
# TODO: more custom button classes
|
||||||
self.ping = Gtk.Button(
|
self.ping = Gtk.Button(
|
||||||
label=strings.ping_servers,
|
label=strings.ping_servers,
|
||||||
margin_top=10,
|
margin_top=10,
|
||||||
@@ -43,10 +46,18 @@ class RightPanel(Gtk.Box):
|
|||||||
tooltip_text=strings.debug_tooltip,
|
tooltip_text=strings.debug_tooltip,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# TODO: icon
|
||||||
|
self.refresh_button = RefreshButton("Refresh")
|
||||||
|
self.refresh_button.set_margin_top(10)
|
||||||
|
self.refresh_button.set_margin_start(80)
|
||||||
|
self.refresh_button.set_margin_end(80)
|
||||||
|
self.refresh_button.connect("clicked", self._on_refresh_clicked)
|
||||||
|
|
||||||
if controller.query_config(Preferences.DEBUG) == True:
|
if controller.query_config(Preferences.DEBUG) == True:
|
||||||
self.debug_toggle.set_active(True)
|
self.debug_toggle.set_active(True)
|
||||||
self.debug_toggle.connect("toggled", self._on_debug_toggled)
|
self.debug_toggle.connect("toggled", self._on_debug_toggled)
|
||||||
|
|
||||||
|
# TODO: make button class
|
||||||
i = Icon(INPUT_KEYBOARD)
|
i = Icon(INPUT_KEYBOARD)
|
||||||
i.set_margin_start(5)
|
i.set_margin_start(5)
|
||||||
self.question = Gtk.Button(
|
self.question = Gtk.Button(
|
||||||
@@ -59,7 +70,7 @@ class RightPanel(Gtk.Box):
|
|||||||
self.question.set_image_position(Gtk.PositionType.RIGHT)
|
self.question.set_image_position(Gtk.PositionType.RIGHT)
|
||||||
self.question.connect("clicked", self._on_question_clicked)
|
self.question.connect("clicked", self._on_question_clicked)
|
||||||
|
|
||||||
for el in self.ping, self.debug_toggle, self.question:
|
for el in self.ping, self.debug_toggle, self.question, self.refresh_button:
|
||||||
padding = 0
|
padding = 0
|
||||||
self.pack_start(el, NO_EXPAND, FILL, padding)
|
self.pack_start(el, NO_EXPAND, FILL, padding)
|
||||||
|
|
||||||
@@ -85,6 +96,10 @@ class RightPanel(Gtk.Box):
|
|||||||
grid = self.AppNav.grid
|
grid = self.AppNav.grid
|
||||||
self.controller.toggle_debug_mode()
|
self.controller.toggle_debug_mode()
|
||||||
|
|
||||||
|
def _on_refresh_clicked(self, button: RefreshButton) -> None:
|
||||||
|
print("button clicked")
|
||||||
|
self.controller.refresh_tree()
|
||||||
|
|
||||||
def _on_ping_clicked(self, button: Gtk.Button) -> None:
|
def _on_ping_clicked(self, button: Gtk.Button) -> None:
|
||||||
# TODO
|
# TODO
|
||||||
block_signals()
|
block_signals()
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
from dzgui.views.components.icon import Icon
|
from dzgui.views.components.icon import Icon
|
||||||
from dzgui.const.constants import WEB_BROWSER
|
from dzgui.const.constants import REFRESH_ICON, WEB_BROWSER
|
||||||
|
|
||||||
import gi
|
import gi
|
||||||
gi.require_version("Gtk", "3.0")
|
gi.require_version("Gtk", "3.0")
|
||||||
@@ -25,5 +25,10 @@ class IconTextButton(IconButton):
|
|||||||
class WebButton(IconTextButton):
|
class WebButton(IconTextButton):
|
||||||
def __init__(self, label: str):
|
def __init__(self, label: str):
|
||||||
super().__init__(icon=WEB_BROWSER, label=label)
|
super().__init__(icon=WEB_BROWSER, label=label)
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class RefreshButton(IconTextButton):
|
||||||
|
def __init__(self, label: str):
|
||||||
|
super().__init__(icon=REFRESH_ICON, label=label)
|
||||||
pass
|
pass
|
||||||
@@ -43,6 +43,9 @@ class ServerTreeView(TreeView):
|
|||||||
def __init__(self, controller: "Controller") -> None:
|
def __init__(self, controller: "Controller") -> None:
|
||||||
super().__init__(controller)
|
super().__init__(controller)
|
||||||
|
|
||||||
|
self.loaded = False
|
||||||
|
self.query_func: Callable = None
|
||||||
|
|
||||||
self.menu = Gtk.Menu()
|
self.menu = Gtk.Menu()
|
||||||
self.menu.connect("key-press-event", self._on_key)
|
self.menu.connect("key-press-event", self._on_key)
|
||||||
self.controller = controller
|
self.controller = controller
|
||||||
@@ -127,6 +130,12 @@ class ServerTreeView(TreeView):
|
|||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def set_query_func(self, func: Callable) -> None:
|
||||||
|
self.query_func = func
|
||||||
|
|
||||||
|
def get_query_func(self) -> Callable | None:
|
||||||
|
return self.query_func
|
||||||
|
|
||||||
def _on_col_width_changed(
|
def _on_col_width_changed(
|
||||||
self, col: Gtk.TreeViewColumn, width: GObject.ParamSpecInt
|
self, col: Gtk.TreeViewColumn, width: GObject.ParamSpecInt
|
||||||
) -> None:
|
) -> None:
|
||||||
@@ -304,3 +313,10 @@ class ServerTreeView(TreeView):
|
|||||||
ip = addr.split(":")[0]
|
ip = addr.split(":")[0]
|
||||||
gameport = int(addr.split(":")[1])
|
gameport = int(addr.split(":")[1])
|
||||||
return Record(ip, gameport, qport)
|
return Record(ip, gameport, qport)
|
||||||
|
|
||||||
|
def get_loaded(self) -> bool:
|
||||||
|
return self.loaded
|
||||||
|
|
||||||
|
def set_loaded(self, status: bool) -> None:
|
||||||
|
self.loaded = status
|
||||||
|
|
||||||
Reference in new issue
Block a user