authenticator/widgets/providers/
dialog_row.rs1use 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}