use glib::Object; use gtk::{prelude::*, subclass::prelude::*}; #[derive(Default)] pub struct LabeledFieldPrivate { value: gtk::Label, } #[glib::object_subclass] impl ObjectSubclass for LabeledFieldPrivate { const NAME: &'static str = "LabeledField"; type Type = LabeledField; type ParentType = gtk::Box; } impl ObjectImpl for LabeledFieldPrivate {} impl WidgetImpl for LabeledFieldPrivate {} impl BoxImpl for LabeledFieldPrivate {} glib::wrapper! { pub struct LabeledField(ObjectSubclass) @extends gtk::Box, gtk::Widget; } impl LabeledField { pub fn new(label: &str, default_value: &str) -> Self { let field: Self = Object::builder().build(); field.set_hexpand(true); field.set_spacing(8); field.set_homogeneous(true); field.append(>k::Label::new(Some(label))); field.append(&field.imp().value); field.imp().value.set_label(default_value); field } pub fn set_value(&self, value: &str) { self.imp().value.set_label(value); } }