use gtk::prelude::*; use gtk::subclass::prelude::*; use gtk::{gio, glib, CompositeTemplate}; mod imp { use super::*; #[derive(Debug, Default, CompositeTemplate)] #[template(resource = "/software/lavender/hermes/window.ui")] pub struct HermesWindow { // Template widgets #[template_child] pub header_bar: TemplateChild, #[template_child] pub label: TemplateChild, } #[glib::object_subclass] impl ObjectSubclass for HermesWindow { const NAME: &'static str = "HermesWindow"; type Type = super::HermesWindow; type ParentType = gtk::ApplicationWindow; fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); } fn instance_init(obj: &glib::subclass::InitializingObject) { obj.init_template(); } } impl ObjectImpl for HermesWindow {} impl WidgetImpl for HermesWindow {} impl WindowImpl for HermesWindow {} impl ApplicationWindowImpl for HermesWindow {} } glib::wrapper! { pub struct HermesWindow(ObjectSubclass) @extends gtk::Widget, gtk::Window, gtk::ApplicationWindow, @implements gio::ActionGroup, gio::ActionMap; } impl HermesWindow { pub fn new>(application: &P) -> Self { glib::Object::new(&[("application", application)]) .expect("Failed to create HermesWindow") } }