feat: pack pages in ScrolledWindow

This commit is contained in:
aclist 2026-01-09 19:08:59 +09:00
parent 922ff7b3b2
commit 91425cbcaa
7 changed files with 54 additions and 71 deletions

View File

@ -33,6 +33,7 @@ from dzgui.views.components.connect_panel import ConnectPanel
from dzgui.views.pages.devs import Developers
from dzgui.views.pages.help import Help
from dzgui.views.pages.keys import Keybindings
from dzgui.views.pages.log import Log
from dzgui.views.pages.mods import Mods
from dzgui.views.pages.options import Options
from dzgui.views.pages.servers import ServerNotebook
@ -207,7 +208,6 @@ class OuterWindow(Gtk.Window):
self.set_titlebar(self.hb)
self.connect("delete-event", self._on_delete_event)
#self.connect("key-press-event", self._on_keypress)
self.grid = Grid()
self.add(self.grid)
@ -236,33 +236,6 @@ class AppHeaderBar(Gtk.HeaderBar):
self.set_show_close_button(True)
# TODO: deprecated
class ScrollableNote(ScrollableMixin, Gtk.Box): # type: ignore
def __init__(self, content_box: Gtk.Box, back_button: bool = False):
super().__init__(orientation=Gtk.Orientation.VERTICAL)
self.scrollable = Gtk.ScrolledWindow()
self.scrollable.set_vexpand(True)
self.back_button = Gtk.Button(
label="Back", hexpand=True, halign=Gtk.Align.CENTER
)
self.gutter = Gtk.Box(
orientation=Gtk.Orientation.HORIZONTAL, valign=Gtk.Align.END
)
if back_button:
self.gutter.add(self.back_button)
self.back_button.connect("clicked", self._on_back_clicked)
self.scrollable.add(content_box)
self.add(self.scrollable)
self.add(self.gutter)
def _on_back_clicked(self, button: Gtk.Button) -> None:
pass
class Notebook(ScrollableMixin, Gtk.Notebook): # type: ignore
def __init__(self) -> None:
super().__init__(show_tabs=False)
@ -278,21 +251,12 @@ class Notebook(ScrollableMixin, Gtk.Notebook): # type: ignore
self.keys = Keybindings()
self.settings = Options(MainController)
# NOTE: server, mod, and log tables should have hexpand property set to True
self.servers = ServerNotebook(MainController)
self.mods = Mods(MainController)
# TODO: make all treeviews internally scrollable in base class
self.scroll_log = Gtk.ScrolledWindow()
self.scroll_log.set_hexpand(True)
self.log_table = LogTreeView(MainController)
self.scroll_log.add(self.log_table)
# TODO: make all treeviews internally scrollable in base class
self.thanks = ScrollableNote(Thanks(), back_button=False)
# TODO: change this class to scrolledwindow
developers = Developers(MainController)
self.developers = ScrollableNote(developers)
self.thanks = Thanks()
self.log = Log(MainController)
self.developers = Developers(MainController)
self.pages = {
self.help: NotebookPage.HELP,
@ -301,7 +265,7 @@ class Notebook(ScrollableMixin, Gtk.Notebook): # type: ignore
self.settings: NotebookPage.OPTIONS,
self.servers: NotebookPage.SERVERS,
self.mods: NotebookPage.MODS,
self.scroll_log: NotebookPage.LOG,
self.log: NotebookPage.LOG,
self.thanks: NotebookPage.THANKS,
self.developers: NotebookPage.DEVELOPERS,
}

View File

@ -17,7 +17,7 @@ logger = logging.getLogger(__name__)
if TYPE_CHECKING:
from dzgui.controllers.mc import Controller
class Changelog(ScrollableMixin, Gtk.ScrolledWindow):
class Changelog(ScrollableMixin, Gtk.ScrolledWindow): # type: ignore
def __init__(self, controller: "Controller"):
super().__init__(propagate_natural_width=False)

View File

@ -15,19 +15,21 @@ if TYPE_CHECKING:
from dzgui.config.userprefs import UserPrefs
from dzgui.config.xdg import Xdg
class Developers(Gtk.Box):
class Developers(Gtk.ScrolledWindow):
"""
Shows TreeViews displaying contents of parsed XDG paths
and user preferences
"""
def __init__(self, controller: "Controller") -> None:
super().__init__(
orientation=Gtk.Orientation.VERTICAL,
margin_start=10,
margin_end=10,
)
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)
@ -47,17 +49,13 @@ class Developers(Gtk.Box):
paths_tree.set_cursor(path)
prefs_tree.set_cursor(path)
for el in [
paths_label,
paths_tree,
prefs_label,
prefs_tree
]:
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)
for el in [heading, back_button, trees_box]:
self.box.add(el)
self.add(self.box)
def _on_back_clicked(self, button: Gtk.Button) -> None:
self.controller.open_page(NotebookPage.OPTIONS)

21
dzgui/views/pages/log.py Normal file
View File

@ -0,0 +1,21 @@
from typing import TYPE_CHECKING
from dzgui.views.trees.tree_log import LogTreeView
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk # noqa E402
if TYPE_CHECKING:
from dzgui.controllers.mc import Controller
class Log(Gtk.ScrolledWindow):
def __init__(self, controller: "Controller") -> None:
super().__init__()
self.treeview = LogTreeView(controller)
self.add(self.treeview)
self.controller = controller
self.controller.register_widget("logtreeview", self.treeview)
def get_treeview(self) -> LogTreeView:
return self.treeview

View File

@ -1,34 +1,34 @@
from dzgui.util.format import format_pango
from dzgui.util.strings import thanks
from dzgui.views.mixins.scrollable_mixin import ScrollableMixin
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk # noqa E402
"""
Special thanks page recognizing contributors to the project in alpha-order
"""
# TODO: wrap and center long values
# TODO: make scrollable, test long values/wrapping
class Thanks(Gtk.Box):
class Thanks(ScrollableMixin, Gtk.ScrolledWindow): # type: ignore
"""
Special thanks page recognizing contributors to the project in alpha-order
"""
def __init__(self) -> None:
super().__init__(
orientation=Gtk.Orientation.VERTICAL,
spacing=10
)
super().__init__()
self.box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
label = format_pango(thanks.header)
header = Gtk.Label()
header.set_markup(label)
self.add(header)
description = Gtk.Label(label=thanks.description, justify=Gtk.Justification.CENTER)
self.add(description)
users = [f"- {user}" for user in sorted(thanks.users, key=str.lower)]
pretty_users = "\n".join(users)
body = Gtk.Label()
body.set_markup(pretty_users)
self.add(body)
for el in header, description, body:
self.box.add(el)
self.add(self.box)
self.connect("key-press-event", self._on_keypress)

View File

@ -16,7 +16,7 @@ if TYPE_CHECKING:
from dzgui.controllers.mc import Controller
from dzgui.const.enum import ContextMenuGroup
class TreeView(CursorMixin, Gtk.TreeView):
class TreeView(CursorMixin, Gtk.TreeView): # type: ignore
def __init__(self, controller: "Controller", menu: "ContextMenuGroup" = None) -> None:
super().__init__(
enable_search=False,

View File

@ -24,8 +24,8 @@ class LogTreeView(ContextMixin, TreeView):
self.controller.register_widget("logtreeview", self)
# TODO: maybe put this in init
self.set_fixed_height_mode(True)
self.set_headers_visible(True)
self.set_fixed_height_mode(True)
self.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE)
model = self.controller.get_log_store()