Skip to main content

authenticator/widgets/providers/
dialog_row.rs

1use gtk::{glib, prelude::*, subclass::prelude::*};
2
3use crate::models::Provider;
4
5mod imp {
6    use std::cell::OnceCell;
7
8    use gtk::pango;
9
10    use super::*;
11
12    #[derive(Default, glib::Properties)]
13    #[properties(wrapper_type = super::ProviderActionRow)]
14    pub struct ProviderActionRow {
15        #[property(get, set, construct_only)]
16        pub provider: OnceCell<Provider>,
17        pub title_label: gtk::Label,
18    }
19
20    #[glib::object_subclass]
21    impl ObjectSubclass for ProviderActionRow {
22        const NAME: &'static str = "ProviderActionRow";
23        type Type = super::ProviderActionRow;
24        type ParentType = gtk::ListBoxRow;
25    }
26
27    #[glib::derived_properties]
28    impl ObjectImpl for ProviderActionRow {
29        fn constructed(&self) {
30            self.parent_constructed();
31            self.title_label.set_margin_bottom(12);
32            self.title_label.set_margin_end(6);
33            self.title_label.set_margin_top(12);
34            self.title_label.set_margin_start(6);
35            self.title_label.set_valign(gtk::Align::Center);
36            self.title_label.set_halign(gtk::Align::Start);
37            self.title_label.set_wrap(true);
38            self.title_label.set_ellipsize(pango::EllipsizeMode::End);
39
40            self.obj()
41                .provider()
42                .bind_property("name", &self.title_label, "label")
43                .sync_create()
44                .build();
45
46            self.obj().set_child(Some(&self.title_label));
47        }
48    }
49    impl WidgetImpl for ProviderActionRow {}
50    impl ListBoxRowImpl for ProviderActionRow {}
51}
52
53glib::wrapper! {
54pub struct ProviderActionRow(ObjectSubclass<imp::ProviderActionRow>)
55    @extends gtk::Widget, gtk::ListBoxRow,
56    @implements gtk::Accessible, gtk::Actionable, gtk::Buildable, gtk::ConstraintTarget;
57}
58
59impl ProviderActionRow {
60    pub fn new(provider: &Provider) -> Self {
61        glib::Object::builder()
62            .property("provider", provider)
63            .build()
64    }
65}