diff --git a/dzgui/views/base.py b/dzgui/views/base.py index 293617d..a1b5a13 100644 --- a/dzgui/views/base.py +++ b/dzgui/views/base.py @@ -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, } diff --git a/dzgui/views/pages/changelog.py b/dzgui/views/pages/changelog.py index d145a50..4ba2437 100644 --- a/dzgui/views/pages/changelog.py +++ b/dzgui/views/pages/changelog.py @@ -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) diff --git a/dzgui/views/pages/devs.py b/dzgui/views/pages/devs.py index 80b01fe..cd4a1ea 100644 --- a/dzgui/views/pages/devs.py +++ b/dzgui/views/pages/devs.py @@ -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) diff --git a/dzgui/views/pages/log.py b/dzgui/views/pages/log.py new file mode 100644 index 0000000..057ab23 --- /dev/null +++ b/dzgui/views/pages/log.py @@ -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 diff --git a/dzgui/views/pages/thanks.py b/dzgui/views/pages/thanks.py index 130cf42..e59b807 100644 --- a/dzgui/views/pages/thanks.py +++ b/dzgui/views/pages/thanks.py @@ -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) diff --git a/dzgui/views/trees/tree_base.py b/dzgui/views/trees/tree_base.py index 1e8c9ce..2886990 100644 --- a/dzgui/views/trees/tree_base.py +++ b/dzgui/views/trees/tree_base.py @@ -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, diff --git a/dzgui/views/trees/tree_log.py b/dzgui/views/trees/tree_log.py index 2d891f3..535ae97 100644 --- a/dzgui/views/trees/tree_log.py +++ b/dzgui/views/trees/tree_log.py @@ -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()