mirror of
https://github.com/aclist/dztui.git
synced 2026-08-29 11:17:12 +02:00
feat: add notebook page
This commit is contained in:
parent
1464243776
commit
e51b4270e2
@ -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
84
dzgui/views/pages/devs.py
Normal 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
|
||||
Loading…
Reference in New Issue
Block a user