mirror of
https://github.com/aclist/dztui.git
synced 2026-11-01 15:42:51 +01:00
feat: add notebook page
This commit is contained in:
1 parent
1464243776
commit
e51b4270e2
2 files changed
+86
No files matched your search
@@ -485,11 +485,13 @@ api_error = "API key validation error or timeout. See 'Help > Show debug log' fo
|
|||||||
|
|
||||||
@dataclass(slots=True, frozen=True)
|
@dataclass(slots=True, frozen=True)
|
||||||
class DevelopersPage:
|
class DevelopersPage:
|
||||||
|
header: str
|
||||||
paths_label: str
|
paths_label: str
|
||||||
prefs_label: str
|
prefs_label: str
|
||||||
columns: list[str]
|
columns: list[str]
|
||||||
|
|
||||||
developers = DevelopersPage(
|
developers = DevelopersPage(
|
||||||
|
header="Developers",
|
||||||
paths_label="Resolved XDG paths",
|
paths_label="Resolved XDG paths",
|
||||||
prefs_label="Boot preferences",
|
prefs_label="Boot preferences",
|
||||||
columns=["Key", "Value"]
|
columns=["Key", "Value"]
|
||||||
|
|||||||
@@ -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
|
||||||
Reference in new issue
Block a user