Files
dzgui/dzgui/views/pages/devs.py
T
2026-11-10 02:59:22 +09:00

95 lines
3.0 KiB
Python

from dataclasses import fields
from typing import Self, Union, TYPE_CHECKING
from dzgui.const.enum import NotebookPage
from dzgui.util.css import add_class
from dzgui.util.strings import developers
from dzgui.views.components.labels import BoldLabel
from dzgui.views.trees.tree_base import TreeView
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
if TYPE_CHECKING:
from dzgui.controllers.mc import Controller
from dzgui.config.userprefs import UserPrefs
from dzgui.config.xdg import Xdg
class Developers(Gtk.ScrolledWindow):
"""
Shows TreeViews displaying contents of parsed XDG paths
and user preferences
"""
def __init__(self, controller: "Controller") -> None:
super().__init__()
self.controller = controller
self.box = Gtk.Box(
orientation=Gtk.Orientation.VERTICAL, margin_start=10, margin_end=10
)
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 = BoldLabel(developers.paths_label)
prefs_label = BoldLabel(developers.prefs_label)
prefs = self.controller.get_prefs()
paths_tree = self._make_tree(prefs.paths)
self.prefs_tree = self._make_tree(prefs)
trees_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
path = Gtk.TreePath.new_from_indices([0])
paths_tree.set_cursor(path)
self.prefs_tree.set_cursor(path)
for el in [paths_label, paths_tree, prefs_label, self.prefs_tree]:
trees_box.add(el)
for el in [heading, back_button, trees_box]:
self.box.add(el)
self.add(self.box)
self.connect("map", self._on_map)
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:
tree = TreeView(self.controller, menu=None)
renderer = Gtk.CellRendererText()
for i, col in enumerate(developers.columns):
column = Gtk.TreeViewColumn(col, renderer, text=i)
column.set_sizing(Gtk.TreeViewColumnSizing.FIXED)
tree.append_column(column)
store = self._make_store(prefs)
tree.set_model(store)
return tree
def _make_store(self, prefs: Union["Xdg", "UserPrefs"]) -> Gtk.ListStore:
store = Gtk.ListStore(str, str)
for field in fields(prefs):
if field.name == "paths":
continue
k, v = field.name, getattr(prefs, field.name)
store.append((k, str(v)))
return store
def _on_map(self, widget: Self) -> None:
prefs = self.controller.get_prefs()
store = self._make_store(prefs)
self.prefs_tree.set_model(store)
def grab_content_area(self) -> None:
return