From b6fc855a131f67cce42d6407540def729af087ec Mon Sep 17 00:00:00 2001 From: Joe Carstairs Date: Thu, 19 Dec 2024 09:11:04 +0000 Subject: Factors out CategoriesView --- schist_gtk4_gui/resources/resources.gresource.xml | 3 +- schist_gtk4_gui/resources/ui/categories_view.ui | 10 ++++ schist_gtk4_gui/resources/ui/window.ui | 34 ++++++++++++++ schist_gtk4_gui/resources/window.ui | 33 ------------- schist_gtk4_gui/src/categories_view.rs | 56 +++++++++++++++++++++++ schist_gtk4_gui/src/lib.rs | 1 + schist_gtk4_gui/src/window.rs | 14 ++++-- 7 files changed, 114 insertions(+), 37 deletions(-) create mode 100644 schist_gtk4_gui/resources/ui/categories_view.ui create mode 100644 schist_gtk4_gui/resources/ui/window.ui delete mode 100644 schist_gtk4_gui/resources/window.ui create mode 100644 schist_gtk4_gui/src/categories_view.rs diff --git a/schist_gtk4_gui/resources/resources.gresource.xml b/schist_gtk4_gui/resources/resources.gresource.xml index 30fdd9f..4b1b90d 100644 --- a/schist_gtk4_gui/resources/resources.gresource.xml +++ b/schist_gtk4_gui/resources/resources.gresource.xml @@ -1,7 +1,8 @@ - window.ui + ui/categories_view.ui + ui/window.ui css/styles.css css/window.css diff --git a/schist_gtk4_gui/resources/ui/categories_view.ui b/schist_gtk4_gui/resources/ui/categories_view.ui new file mode 100644 index 0000000..197fcb3 --- /dev/null +++ b/schist_gtk4_gui/resources/ui/categories_view.ui @@ -0,0 +1,10 @@ + + + + diff --git a/schist_gtk4_gui/resources/ui/window.ui b/schist_gtk4_gui/resources/ui/window.ui new file mode 100644 index 0000000..2dcf4c8 --- /dev/null +++ b/schist_gtk4_gui/resources/ui/window.ui @@ -0,0 +1,34 @@ + + + + diff --git a/schist_gtk4_gui/resources/window.ui b/schist_gtk4_gui/resources/window.ui deleted file mode 100644 index 9d6a10d..0000000 --- a/schist_gtk4_gui/resources/window.ui +++ /dev/null @@ -1,33 +0,0 @@ - - - - diff --git a/schist_gtk4_gui/src/categories_view.rs b/schist_gtk4_gui/src/categories_view.rs new file mode 100644 index 0000000..efad621 --- /dev/null +++ b/schist_gtk4_gui/src/categories_view.rs @@ -0,0 +1,56 @@ +use gtk::{ + glib::{ + self, + subclass::{ + object::{ObjectImpl, ObjectImplExt}, + types::ObjectSubclass, + InitializingObject, + }, + Object, + }, + subclass::{ + box_::BoxImpl, + widget::{CompositeTemplateClass, CompositeTemplateInitializingExt, WidgetImpl}, + }, +}; + +glib::wrapper! { + pub struct SchistCategoriesView(ObjectSubclass) + @extends gtk::Box, gtk::Widget, + @implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Orientable; +} + +impl SchistCategoriesView { + pub fn new() -> Self { + Object::builder().build() + } +} + +#[derive(gtk::CompositeTemplate, Default)] +#[template(resource = "/net/joeac/schist/ui/categories_view.ui")] +pub struct SchistCategoriesViewImpl {} + +#[glib::object_subclass] +impl ObjectSubclass for SchistCategoriesViewImpl { + const NAME: &'static str = "SchistCategoriesView"; + type Type = SchistCategoriesView; + type ParentType = gtk::Box; + + fn class_init(klass: &mut Self::Class) { + klass.bind_template(); + } + + fn instance_init(obj: &InitializingObject) { + obj.init_template(); + } +} + +impl ObjectImpl for SchistCategoriesViewImpl { + fn constructed(&self) { + self.parent_constructed(); + } +} + +impl WidgetImpl for SchistCategoriesViewImpl {} + +impl BoxImpl for SchistCategoriesViewImpl {} diff --git a/schist_gtk4_gui/src/lib.rs b/schist_gtk4_gui/src/lib.rs index 1430f4c..7455d83 100644 --- a/schist_gtk4_gui/src/lib.rs +++ b/schist_gtk4_gui/src/lib.rs @@ -1,3 +1,4 @@ +mod categories_view; mod window; use gtk::{gdk::Display, gio, glib, prelude::*, Application, CssProvider}; diff --git a/schist_gtk4_gui/src/window.rs b/schist_gtk4_gui/src/window.rs index b1ca9f6..b612e92 100644 --- a/schist_gtk4_gui/src/window.rs +++ b/schist_gtk4_gui/src/window.rs @@ -11,11 +11,16 @@ use gtk::{ }, subclass::{ application_window::ApplicationWindowImpl, - widget::{CompositeTemplateClass, CompositeTemplateInitializingExt, WidgetImpl}, + widget::{ + CompositeTemplateClass, CompositeTemplateInitializingExt, WidgetClassExt, WidgetImpl, + }, window::WindowImpl, }, + TemplateChild, }; +use crate::categories_view::SchistCategoriesView; + gtk::glib::wrapper! { pub struct SchistWindow(ObjectSubclass) @extends gtk::ApplicationWindow, gtk::Window, gtk::Widget, @@ -30,8 +35,11 @@ impl SchistWindow { } #[derive(gtk::CompositeTemplate, Default)] -#[template(resource = "/net/joeac/schist/window.ui")] -pub struct SchistWindowSubclass {} +#[template(resource = "/net/joeac/schist/ui/window.ui")] +pub struct SchistWindowSubclass { + #[template_child] + pub categories_view: TemplateChild, +} #[glib::object_subclass] impl ObjectSubclass for SchistWindowSubclass { -- cgit v1.2.3