Derive Macro gtk3_macros::CompositeTemplate[][src]

#[derive(CompositeTemplate)]
{
    // Attributes available to this derive:
    #[template]
    #[template_child]
}
Expand description

Derive macro for using a composite template in a widget.

The template attribute specifies where the template should be loaded from; it can be a file, a resource, or a string.

The template_child attribute is used to mark all internal widgets we need to have programmatic access to.

Example

Specify that MyWidget is using a composite template and load the template file the composite_template.ui file.

use gtk::prelude::*;
use gtk::CompositeTemplate;

#[derive(Debug, Default, CompositeTemplate)]
#[template(file = "composite_template.ui")]
struct MyWidget {
    #[template_child]
    pub label: TemplateChild<gtk::Label>,
}

Then, in the ObjectSubclass implementation you will need to call bind_template in the class_init function, and init_template in instance_init function.

#[glib::object_subclass]
impl ObjectSubclass for MyWidget {
       const NAME: &'static str = "MyWidget";
       type Type = super::MyWidget;
       type ParentType = gtk::Widget;

       fn class_init(klass: &mut Self::Class) {
           Self::bind_template(klass);
       }

       fn instance_init(obj: &glib::subclass::InitializingObject<Self>) {
           obj.init_template();
       }
   }