gtk/auto/
size_group.rs

1// This file was generated by gir (https://github.com/gtk-rs/gir)
2// from gir-files (https://github.com/gtk-rs/gir-files)
3// DO NOT EDIT
4
5use glib::object::Cast;
6use glib::object::IsA;
7use glib::signal::connect_raw;
8use glib::signal::SignalHandlerId;
9use glib::translate::*;
10use glib::StaticType;
11use glib::ToValue;
12use glib_sys;
13use gtk_sys;
14use std::boxed::Box as Box_;
15use std::fmt;
16use std::mem::transmute;
17use Buildable;
18use SizeGroupMode;
19use Widget;
20
21glib_wrapper! {
22    pub struct SizeGroup(Object<gtk_sys::GtkSizeGroup, gtk_sys::GtkSizeGroupClass, SizeGroupClass>) @implements Buildable;
23
24    match fn {
25        get_type => || gtk_sys::gtk_size_group_get_type(),
26    }
27}
28
29impl SizeGroup {
30    pub fn new(mode: SizeGroupMode) -> SizeGroup {
31        assert_initialized_main_thread!();
32        unsafe { from_glib_full(gtk_sys::gtk_size_group_new(mode.to_glib())) }
33    }
34}
35
36pub struct SizeGroupBuilder {
37    ignore_hidden: Option<bool>,
38    mode: Option<SizeGroupMode>,
39}
40
41impl SizeGroupBuilder {
42    pub fn new() -> Self {
43        Self {
44            ignore_hidden: None,
45            mode: None,
46        }
47    }
48
49    pub fn build(self) -> SizeGroup {
50        let mut properties: Vec<(&str, &dyn ToValue)> = vec![];
51        if let Some(ref ignore_hidden) = self.ignore_hidden {
52            properties.push(("ignore-hidden", ignore_hidden));
53        }
54        if let Some(ref mode) = self.mode {
55            properties.push(("mode", mode));
56        }
57        glib::Object::new(SizeGroup::static_type(), &properties)
58            .expect("object new")
59            .downcast()
60            .expect("downcast")
61    }
62
63    pub fn ignore_hidden(mut self, ignore_hidden: bool) -> Self {
64        self.ignore_hidden = Some(ignore_hidden);
65        self
66    }
67
68    pub fn mode(mut self, mode: SizeGroupMode) -> Self {
69        self.mode = Some(mode);
70        self
71    }
72}
73
74pub const NONE_SIZE_GROUP: Option<&SizeGroup> = None;
75
76pub trait SizeGroupExt: 'static {
77    fn add_widget<P: IsA<Widget>>(&self, widget: &P);
78
79    #[cfg_attr(feature = "v3_22", deprecated)]
80    fn get_ignore_hidden(&self) -> bool;
81
82    fn get_mode(&self) -> SizeGroupMode;
83
84    fn get_widgets(&self) -> Vec<Widget>;
85
86    fn remove_widget<P: IsA<Widget>>(&self, widget: &P);
87
88    #[cfg_attr(feature = "v3_22", deprecated)]
89    fn set_ignore_hidden(&self, ignore_hidden: bool);
90
91    fn set_mode(&self, mode: SizeGroupMode);
92
93    #[cfg_attr(feature = "v3_22", deprecated)]
94    fn connect_property_ignore_hidden_notify<F: Fn(&Self) + 'static>(
95        &self,
96        f: F,
97    ) -> SignalHandlerId;
98
99    fn connect_property_mode_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
100}
101
102impl<O: IsA<SizeGroup>> SizeGroupExt for O {
103    fn add_widget<P: IsA<Widget>>(&self, widget: &P) {
104        unsafe {
105            gtk_sys::gtk_size_group_add_widget(
106                self.as_ref().to_glib_none().0,
107                widget.as_ref().to_glib_none().0,
108            );
109        }
110    }
111
112    fn get_ignore_hidden(&self) -> bool {
113        unsafe {
114            from_glib(gtk_sys::gtk_size_group_get_ignore_hidden(
115                self.as_ref().to_glib_none().0,
116            ))
117        }
118    }
119
120    fn get_mode(&self) -> SizeGroupMode {
121        unsafe {
122            from_glib(gtk_sys::gtk_size_group_get_mode(
123                self.as_ref().to_glib_none().0,
124            ))
125        }
126    }
127
128    fn get_widgets(&self) -> Vec<Widget> {
129        unsafe {
130            FromGlibPtrContainer::from_glib_none(gtk_sys::gtk_size_group_get_widgets(
131                self.as_ref().to_glib_none().0,
132            ))
133        }
134    }
135
136    fn remove_widget<P: IsA<Widget>>(&self, widget: &P) {
137        unsafe {
138            gtk_sys::gtk_size_group_remove_widget(
139                self.as_ref().to_glib_none().0,
140                widget.as_ref().to_glib_none().0,
141            );
142        }
143    }
144
145    fn set_ignore_hidden(&self, ignore_hidden: bool) {
146        unsafe {
147            gtk_sys::gtk_size_group_set_ignore_hidden(
148                self.as_ref().to_glib_none().0,
149                ignore_hidden.to_glib(),
150            );
151        }
152    }
153
154    fn set_mode(&self, mode: SizeGroupMode) {
155        unsafe {
156            gtk_sys::gtk_size_group_set_mode(self.as_ref().to_glib_none().0, mode.to_glib());
157        }
158    }
159
160    fn connect_property_ignore_hidden_notify<F: Fn(&Self) + 'static>(
161        &self,
162        f: F,
163    ) -> SignalHandlerId {
164        unsafe extern "C" fn notify_ignore_hidden_trampoline<P, F: Fn(&P) + 'static>(
165            this: *mut gtk_sys::GtkSizeGroup,
166            _param_spec: glib_sys::gpointer,
167            f: glib_sys::gpointer,
168        ) where
169            P: IsA<SizeGroup>,
170        {
171            let f: &F = &*(f as *const F);
172            f(&SizeGroup::from_glib_borrow(this).unsafe_cast())
173        }
174        unsafe {
175            let f: Box_<F> = Box_::new(f);
176            connect_raw(
177                self.as_ptr() as *mut _,
178                b"notify::ignore-hidden\0".as_ptr() as *const _,
179                Some(transmute(
180                    notify_ignore_hidden_trampoline::<Self, F> as usize,
181                )),
182                Box_::into_raw(f),
183            )
184        }
185    }
186
187    fn connect_property_mode_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
188        unsafe extern "C" fn notify_mode_trampoline<P, F: Fn(&P) + 'static>(
189            this: *mut gtk_sys::GtkSizeGroup,
190            _param_spec: glib_sys::gpointer,
191            f: glib_sys::gpointer,
192        ) where
193            P: IsA<SizeGroup>,
194        {
195            let f: &F = &*(f as *const F);
196            f(&SizeGroup::from_glib_borrow(this).unsafe_cast())
197        }
198        unsafe {
199            let f: Box_<F> = Box_::new(f);
200            connect_raw(
201                self.as_ptr() as *mut _,
202                b"notify::mode\0".as_ptr() as *const _,
203                Some(transmute(notify_mode_trampoline::<Self, F> as usize)),
204                Box_::into_raw(f),
205            )
206        }
207    }
208}
209
210impl fmt::Display for SizeGroup {
211    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
212        write!(f, "SizeGroup")
213    }
214}