1#![allow(deprecated)]
5
6use crate::{ffi, CellRenderer, CellRendererMode, IconSize};
7use glib::{
8 prelude::*,
9 signal::{connect_raw, SignalHandlerId},
10 translate::*,
11};
12use std::boxed::Box as Box_;
13
14glib::wrapper! {
15 #[doc(alias = "GtkCellRendererSpinner")]
16 pub struct CellRendererSpinner(Object<ffi::GtkCellRendererSpinner>) @extends CellRenderer;
17
18 match fn {
19 type_ => || ffi::gtk_cell_renderer_spinner_get_type(),
20 }
21}
22
23impl CellRendererSpinner {
24 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
25 #[allow(deprecated)]
26 #[doc(alias = "gtk_cell_renderer_spinner_new")]
27 pub fn new() -> CellRendererSpinner {
28 assert_initialized_main_thread!();
29 unsafe { CellRenderer::from_glib_none(ffi::gtk_cell_renderer_spinner_new()).unsafe_cast() }
30 }
31
32 pub fn builder() -> CellRendererSpinnerBuilder {
37 CellRendererSpinnerBuilder::new()
38 }
39
40 pub fn is_active(&self) -> bool {
41 ObjectExt::property(self, "active")
42 }
43
44 pub fn set_active(&self, active: bool) {
45 ObjectExt::set_property(self, "active", active)
46 }
47
48 pub fn pulse(&self) -> u32 {
49 ObjectExt::property(self, "pulse")
50 }
51
52 pub fn set_pulse(&self, pulse: u32) {
53 ObjectExt::set_property(self, "pulse", pulse)
54 }
55
56 pub fn size(&self) -> IconSize {
57 ObjectExt::property(self, "size")
58 }
59
60 pub fn set_size(&self, size: IconSize) {
61 ObjectExt::set_property(self, "size", size)
62 }
63
64 #[doc(alias = "active")]
65 pub fn connect_active_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
66 unsafe extern "C" fn notify_active_trampoline<F: Fn(&CellRendererSpinner) + 'static>(
67 this: *mut ffi::GtkCellRendererSpinner,
68 _param_spec: glib::ffi::gpointer,
69 f: glib::ffi::gpointer,
70 ) {
71 let f: &F = &*(f as *const F);
72 f(&from_glib_borrow(this))
73 }
74 unsafe {
75 let f: Box_<F> = Box_::new(f);
76 connect_raw(
77 self.as_ptr() as *mut _,
78 b"notify::active\0".as_ptr() as *const _,
79 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
80 notify_active_trampoline::<F> as *const (),
81 )),
82 Box_::into_raw(f),
83 )
84 }
85 }
86
87 #[doc(alias = "pulse")]
88 pub fn connect_pulse_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
89 unsafe extern "C" fn notify_pulse_trampoline<F: Fn(&CellRendererSpinner) + 'static>(
90 this: *mut ffi::GtkCellRendererSpinner,
91 _param_spec: glib::ffi::gpointer,
92 f: glib::ffi::gpointer,
93 ) {
94 let f: &F = &*(f as *const F);
95 f(&from_glib_borrow(this))
96 }
97 unsafe {
98 let f: Box_<F> = Box_::new(f);
99 connect_raw(
100 self.as_ptr() as *mut _,
101 b"notify::pulse\0".as_ptr() as *const _,
102 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
103 notify_pulse_trampoline::<F> as *const (),
104 )),
105 Box_::into_raw(f),
106 )
107 }
108 }
109
110 #[doc(alias = "size")]
111 pub fn connect_size_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
112 unsafe extern "C" fn notify_size_trampoline<F: Fn(&CellRendererSpinner) + 'static>(
113 this: *mut ffi::GtkCellRendererSpinner,
114 _param_spec: glib::ffi::gpointer,
115 f: glib::ffi::gpointer,
116 ) {
117 let f: &F = &*(f as *const F);
118 f(&from_glib_borrow(this))
119 }
120 unsafe {
121 let f: Box_<F> = Box_::new(f);
122 connect_raw(
123 self.as_ptr() as *mut _,
124 b"notify::size\0".as_ptr() as *const _,
125 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
126 notify_size_trampoline::<F> as *const (),
127 )),
128 Box_::into_raw(f),
129 )
130 }
131 }
132}
133
134impl Default for CellRendererSpinner {
135 fn default() -> Self {
136 Self::new()
137 }
138}
139
140#[must_use = "The builder must be built to be used"]
145pub struct CellRendererSpinnerBuilder {
146 builder: glib::object::ObjectBuilder<'static, CellRendererSpinner>,
147}
148
149impl CellRendererSpinnerBuilder {
150 fn new() -> Self {
151 Self {
152 builder: glib::object::Object::builder(),
153 }
154 }
155
156 pub fn active(self, active: bool) -> Self {
157 Self {
158 builder: self.builder.property("active", active),
159 }
160 }
161
162 pub fn pulse(self, pulse: u32) -> Self {
163 Self {
164 builder: self.builder.property("pulse", pulse),
165 }
166 }
167
168 pub fn size(self, size: IconSize) -> Self {
169 Self {
170 builder: self.builder.property("size", size),
171 }
172 }
173
174 pub fn cell_background(self, cell_background: impl Into<glib::GString>) -> Self {
175 Self {
176 builder: self
177 .builder
178 .property("cell-background", cell_background.into()),
179 }
180 }
181
182 pub fn cell_background_rgba(self, cell_background_rgba: &gdk::RGBA) -> Self {
183 Self {
184 builder: self
185 .builder
186 .property("cell-background-rgba", cell_background_rgba),
187 }
188 }
189
190 pub fn cell_background_set(self, cell_background_set: bool) -> Self {
191 Self {
192 builder: self
193 .builder
194 .property("cell-background-set", cell_background_set),
195 }
196 }
197
198 pub fn height(self, height: i32) -> Self {
199 Self {
200 builder: self.builder.property("height", height),
201 }
202 }
203
204 pub fn is_expanded(self, is_expanded: bool) -> Self {
205 Self {
206 builder: self.builder.property("is-expanded", is_expanded),
207 }
208 }
209
210 pub fn is_expander(self, is_expander: bool) -> Self {
211 Self {
212 builder: self.builder.property("is-expander", is_expander),
213 }
214 }
215
216 pub fn mode(self, mode: CellRendererMode) -> Self {
217 Self {
218 builder: self.builder.property("mode", mode),
219 }
220 }
221
222 pub fn sensitive(self, sensitive: bool) -> Self {
223 Self {
224 builder: self.builder.property("sensitive", sensitive),
225 }
226 }
227
228 pub fn visible(self, visible: bool) -> Self {
229 Self {
230 builder: self.builder.property("visible", visible),
231 }
232 }
233
234 pub fn width(self, width: i32) -> Self {
235 Self {
236 builder: self.builder.property("width", width),
237 }
238 }
239
240 pub fn xalign(self, xalign: f32) -> Self {
241 Self {
242 builder: self.builder.property("xalign", xalign),
243 }
244 }
245
246 pub fn xpad(self, xpad: u32) -> Self {
247 Self {
248 builder: self.builder.property("xpad", xpad),
249 }
250 }
251
252 pub fn yalign(self, yalign: f32) -> Self {
253 Self {
254 builder: self.builder.property("yalign", yalign),
255 }
256 }
257
258 pub fn ypad(self, ypad: u32) -> Self {
259 Self {
260 builder: self.builder.property("ypad", ypad),
261 }
262 }
263
264 #[must_use = "Building the object from the builder is usually expensive and is not expected to have side effects"]
267 pub fn build(self) -> CellRendererSpinner {
268 assert_initialized_main_thread!();
269 self.builder.build()
270 }
271}