feat: add notebook page

This commit is contained in:
aclist 2025-12-10 13:35:15 +09:00
parent 1464243776
commit e51b4270e2
2 changed files with 86 additions and 0 deletions

View File

@ -485,11 +485,13 @@ api_error = "API key validation error or timeout. See 'Help > Show debug log' fo
@dataclass(slots=True, frozen=True)
class DevelopersPage:
header: str
paths_label: str
prefs_label: str
columns: list[str]
developers = DevelopersPage(
header="Developers",
paths_label="Resolved XDG paths",
prefs_label="Boot preferences",
columns=["Key", "Value"]

84
dzgui/views/pages/devs.py Normal file
View File

@ -0,0 +1,84 @@
import typing
import gi # noqa E402
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
from dataclasses import fields
from typing import Union, TYPE_CHECKING
from dzgui.const.enum import NotebookPage
from dzgui.util.strings import developers
from dzgui.util.css import add_class
if TYPE_CHECKING:
from dzgui.controllers.mc import Controller
from dzgui.config.userprefs import UserPrefs
from dzgui.config.xdg import Xdg
"""
Shows TreeViews displaying contents of parsed XDG paths and user preferences
"""
# TODO: make scrollable, test long values/wrapping
class Developers(Gtk.Box):
def __init__(self, controller: "Controller") -> None:
super().__init__(
orientation=Gtk.Orientation.VERTICAL,
margin_start=10,
margin_end=10,
)
self.controller = controller
heading = Gtk.Label(label=developers.header)
heading.set_halign(Gtk.Align.CENTER)
add_class(heading, "page-heading")
back_button = Gtk.Button(label="Back", halign=Gtk.Align.START)
back_button.connect("clicked", self._on_back_clicked)
paths_label = Gtk.Label()
paths_label.set_markup(f"<b>{developers.paths_label}</b>")
prefs_label = Gtk.Label()
prefs_label.set_markup(f"<b>{developers.prefs_label}</b>")
paths_tree = self._make_tree(self.controller.prefs.paths)
prefs_tree = self._make_tree(self.controller.prefs)
trees_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
paths_tree.set_cursor(0)
prefs_tree.set_cursor(0)
for el in [
paths_label,
paths_tree,
prefs_label,
prefs_tree
]:
trees_box.add(el)
self.add(heading)
self.add(back_button)
self.add(trees_box)
def _on_back_clicked(self, button: Gtk.Button) -> None:
self.controller.open_page(NotebookPage.OPTIONS)
def _make_tree(self, prefs: Union["Xdg", "UserPrefs"]) -> Gtk.TreeView:
view = Gtk.TreeView()
renderer = Gtk.CellRendererText()
for i, col in enumerate(developers.columns):
column = Gtk.TreeViewColumn(col, renderer, text=i)
column.set_sizing(Gtk.TreeViewColumnSizing.FIXED)
view.append_column(column)
store = Gtk.ListStore(str, str)
for field in fields(prefs):
if field.name == "paths":
break
k, v = field.name, getattr(prefs, field.name)
store.append((k, str(v)))
view.set_model(store)
return view