Skip to main content

gtk/auto/
cell_renderer_toggle.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 crate::{CellRenderer, CellRendererMode, TreePath, ffi};
6use glib::{
7    object::ObjectType as _,
8    prelude::*,
9    signal::{SignalHandlerId, connect_raw},
10    translate::*,
11};
12use std::boxed::Box as Box_;
13
14glib::wrapper! {
15    /// [`CellRendererToggle`][crate::CellRendererToggle] renders a toggle button in a cell. The
16    /// button is drawn as a radio or a checkbutton, depending on the
17    /// [`radio`][struct@crate::CellRendererToggle#radio] property.
18    /// When activated, it emits the [`toggled`][struct@crate::CellRendererToggle#toggled] signal.
19    ///
20    /// ## Properties
21    ///
22    ///
23    /// #### `activatable`
24    ///  Readable | Writable
25    ///
26    ///
27    /// #### `active`
28    ///  Readable | Writable
29    ///
30    ///
31    /// #### `inconsistent`
32    ///  Readable | Writable
33    ///
34    ///
35    /// #### `indicator-size`
36    ///  Readable | Writable
37    ///
38    ///
39    /// #### `radio`
40    ///  Readable | Writable
41    /// <details><summary><h4>CellRenderer</h4></summary>
42    ///
43    ///
44    /// #### `cell-background`
45    ///  Writable
46    ///
47    ///
48    /// #### `cell-background-gdk`
49    ///  Cell background as a `GdkColor`
50    ///
51    /// Readable | Writable
52    ///
53    ///
54    /// #### `cell-background-rgba`
55    ///  Cell background as a [`gdk::RGBA`][crate::gdk::RGBA]
56    ///
57    /// Readable | Writable
58    ///
59    ///
60    /// #### `cell-background-set`
61    ///  Readable | Writable
62    ///
63    ///
64    /// #### `editing`
65    ///  Readable
66    ///
67    ///
68    /// #### `height`
69    ///  Readable | Writable
70    ///
71    ///
72    /// #### `is-expanded`
73    ///  Readable | Writable
74    ///
75    ///
76    /// #### `is-expander`
77    ///  Readable | Writable
78    ///
79    ///
80    /// #### `mode`
81    ///  Readable | Writable
82    ///
83    ///
84    /// #### `sensitive`
85    ///  Readable | Writable
86    ///
87    ///
88    /// #### `visible`
89    ///  Readable | Writable
90    ///
91    ///
92    /// #### `width`
93    ///  Readable | Writable
94    ///
95    ///
96    /// #### `xalign`
97    ///  Readable | Writable
98    ///
99    ///
100    /// #### `xpad`
101    ///  Readable | Writable
102    ///
103    ///
104    /// #### `yalign`
105    ///  Readable | Writable
106    ///
107    ///
108    /// #### `ypad`
109    ///  Readable | Writable
110    /// </details>
111    ///
112    /// ## Signals
113    ///
114    ///
115    /// #### `toggled`
116    ///  The ::toggled signal is emitted when the cell is toggled.
117    ///
118    /// It is the responsibility of the application to update the model
119    /// with the correct value to store at `path`. Often this is simply the
120    /// opposite of the value currently stored at `path`.
121    ///
122    ///
123    /// <details><summary><h4>CellRenderer</h4></summary>
124    ///
125    ///
126    /// #### `editing-canceled`
127    ///  This signal gets emitted when the user cancels the process of editing a
128    /// cell. For example, an editable cell renderer could be written to cancel
129    /// editing when the user presses Escape.
130    ///
131    /// See also: [`CellRendererExt::stop_editing()`][crate::prelude::CellRendererExt::stop_editing()].
132    ///
133    ///
134    ///
135    ///
136    /// #### `editing-started`
137    ///  This signal gets emitted when a cell starts to be edited.
138    /// The intended use of this signal is to do special setup
139    /// on `editable`, e.g. adding a [`EntryCompletion`][crate::EntryCompletion] or setting
140    /// up additional columns in a [`ComboBox`][crate::ComboBox].
141    ///
142    /// See [`CellEditableExt::start_editing()`][crate::prelude::CellEditableExt::start_editing()] for information on the lifecycle of
143    /// the `editable` and a way to do setup that doesn’t depend on the `renderer`.
144    ///
145    /// Note that GTK+ doesn't guarantee that cell renderers will
146    /// continue to use the same kind of widget for editing in future
147    /// releases, therefore you should check the type of `editable`
148    /// before doing any specific setup, as in the following example:
149    ///
150    ///
151    /// **⚠️ The following code is in C ⚠️**
152    ///
153    /// ```C
154    /// static void
155    /// text_editing_started (GtkCellRenderer *cell,
156    ///                       GtkCellEditable *editable,
157    ///                       const gchar     *path,
158    ///                       gpointer         data)
159    /// {
160    ///   if (GTK_IS_ENTRY (editable))
161    ///     {
162    ///       GtkEntry *entry = GTK_ENTRY (editable);
163    ///
164    ///       // ... create a GtkEntryCompletion
165    ///
166    ///       gtk_entry_set_completion (entry, completion);
167    ///     }
168    /// }
169    /// ```
170    ///
171    ///
172    /// </details>
173    ///
174    /// # Implements
175    ///
176    /// [`CellRendererToggleExt`][trait@crate::prelude::CellRendererToggleExt], [`CellRendererExt`][trait@crate::prelude::CellRendererExt], [`trait@glib::ObjectExt`]
177    #[doc(alias = "GtkCellRendererToggle")]
178    pub struct CellRendererToggle(Object<ffi::GtkCellRendererToggle, ffi::GtkCellRendererToggleClass>) @extends CellRenderer;
179
180    match fn {
181        type_ => || ffi::gtk_cell_renderer_toggle_get_type(),
182    }
183}
184
185impl CellRendererToggle {
186    pub const NONE: Option<&'static CellRendererToggle> = None;
187
188    /// Creates a new [`CellRendererToggle`][crate::CellRendererToggle]. Adjust rendering
189    /// parameters using object properties. Object properties can be set
190    /// globally (with [`ObjectExt::set()`][crate::glib::prelude::ObjectExt::set()]). Also, with [`TreeViewColumn`][crate::TreeViewColumn], you
191    /// can bind a property to a value in a [`TreeModel`][crate::TreeModel]. For example, you
192    /// can bind the “active” property on the cell renderer to a boolean value
193    /// in the model, thus causing the check button to reflect the state of
194    /// the model.
195    ///
196    /// # Returns
197    ///
198    /// the new cell renderer
199    #[doc(alias = "gtk_cell_renderer_toggle_new")]
200    pub fn new() -> CellRendererToggle {
201        assert_initialized_main_thread!();
202        unsafe { CellRenderer::from_glib_none(ffi::gtk_cell_renderer_toggle_new()).unsafe_cast() }
203    }
204
205    // rustdoc-stripper-ignore-next
206    /// Creates a new builder-pattern struct instance to construct [`CellRendererToggle`] objects.
207    ///
208    /// This method returns an instance of [`CellRendererToggleBuilder`](crate::builders::CellRendererToggleBuilder) which can be used to create [`CellRendererToggle`] objects.
209    pub fn builder() -> CellRendererToggleBuilder {
210        CellRendererToggleBuilder::new()
211    }
212}
213
214impl Default for CellRendererToggle {
215    fn default() -> Self {
216        Self::new()
217    }
218}
219
220// rustdoc-stripper-ignore-next
221/// A [builder-pattern] type to construct [`CellRendererToggle`] objects.
222///
223/// [builder-pattern]: https://doc.rust-lang.org/1.0.0/style/ownership/builders.html
224#[must_use = "The builder must be built to be used"]
225pub struct CellRendererToggleBuilder {
226    builder: glib::object::ObjectBuilder<'static, CellRendererToggle>,
227}
228
229impl CellRendererToggleBuilder {
230    fn new() -> Self {
231        Self {
232            builder: glib::object::Object::builder(),
233        }
234    }
235
236    pub fn activatable(self, activatable: bool) -> Self {
237        Self {
238            builder: self.builder.property("activatable", activatable),
239        }
240    }
241
242    pub fn active(self, active: bool) -> Self {
243        Self {
244            builder: self.builder.property("active", active),
245        }
246    }
247
248    pub fn inconsistent(self, inconsistent: bool) -> Self {
249        Self {
250            builder: self.builder.property("inconsistent", inconsistent),
251        }
252    }
253
254    pub fn indicator_size(self, indicator_size: i32) -> Self {
255        Self {
256            builder: self.builder.property("indicator-size", indicator_size),
257        }
258    }
259
260    pub fn radio(self, radio: bool) -> Self {
261        Self {
262            builder: self.builder.property("radio", radio),
263        }
264    }
265
266    pub fn cell_background(self, cell_background: impl Into<glib::GString>) -> Self {
267        Self {
268            builder: self
269                .builder
270                .property("cell-background", cell_background.into()),
271        }
272    }
273
274    /// Cell background as a [`gdk::RGBA`][crate::gdk::RGBA]
275    pub fn cell_background_rgba(self, cell_background_rgba: &gdk::RGBA) -> Self {
276        Self {
277            builder: self
278                .builder
279                .property("cell-background-rgba", cell_background_rgba),
280        }
281    }
282
283    pub fn cell_background_set(self, cell_background_set: bool) -> Self {
284        Self {
285            builder: self
286                .builder
287                .property("cell-background-set", cell_background_set),
288        }
289    }
290
291    pub fn height(self, height: i32) -> Self {
292        Self {
293            builder: self.builder.property("height", height),
294        }
295    }
296
297    pub fn is_expanded(self, is_expanded: bool) -> Self {
298        Self {
299            builder: self.builder.property("is-expanded", is_expanded),
300        }
301    }
302
303    pub fn is_expander(self, is_expander: bool) -> Self {
304        Self {
305            builder: self.builder.property("is-expander", is_expander),
306        }
307    }
308
309    pub fn mode(self, mode: CellRendererMode) -> Self {
310        Self {
311            builder: self.builder.property("mode", mode),
312        }
313    }
314
315    pub fn sensitive(self, sensitive: bool) -> Self {
316        Self {
317            builder: self.builder.property("sensitive", sensitive),
318        }
319    }
320
321    pub fn visible(self, visible: bool) -> Self {
322        Self {
323            builder: self.builder.property("visible", visible),
324        }
325    }
326
327    pub fn width(self, width: i32) -> Self {
328        Self {
329            builder: self.builder.property("width", width),
330        }
331    }
332
333    pub fn xalign(self, xalign: f32) -> Self {
334        Self {
335            builder: self.builder.property("xalign", xalign),
336        }
337    }
338
339    pub fn xpad(self, xpad: u32) -> Self {
340        Self {
341            builder: self.builder.property("xpad", xpad),
342        }
343    }
344
345    pub fn yalign(self, yalign: f32) -> Self {
346        Self {
347            builder: self.builder.property("yalign", yalign),
348        }
349    }
350
351    pub fn ypad(self, ypad: u32) -> Self {
352        Self {
353            builder: self.builder.property("ypad", ypad),
354        }
355    }
356
357    // rustdoc-stripper-ignore-next
358    /// Build the [`CellRendererToggle`].
359    #[must_use = "Building the object from the builder is usually expensive and is not expected to have side effects"]
360    pub fn build(self) -> CellRendererToggle {
361        assert_initialized_main_thread!();
362        self.builder.build()
363    }
364}
365
366/// Trait containing all [`struct@CellRendererToggle`] methods.
367///
368/// # Implementors
369///
370/// [`CellRendererToggle`][struct@crate::CellRendererToggle]
371pub trait CellRendererToggleExt: IsA<CellRendererToggle> + 'static {
372    /// Returns whether the cell renderer is activatable. See
373    /// [`set_activatable()`][Self::set_activatable()].
374    ///
375    /// # Returns
376    ///
377    /// [`true`] if the cell renderer is activatable.
378    #[doc(alias = "gtk_cell_renderer_toggle_get_activatable")]
379    #[doc(alias = "get_activatable")]
380    #[doc(alias = "activatable")]
381    fn is_activatable(&self) -> bool {
382        unsafe {
383            from_glib(ffi::gtk_cell_renderer_toggle_get_activatable(
384                self.as_ref().to_glib_none().0,
385            ))
386        }
387    }
388
389    /// Returns whether the cell renderer is active. See
390    /// [`set_active()`][Self::set_active()].
391    ///
392    /// # Returns
393    ///
394    /// [`true`] if the cell renderer is active.
395    #[doc(alias = "gtk_cell_renderer_toggle_get_active")]
396    #[doc(alias = "get_active")]
397    #[doc(alias = "active")]
398    fn is_active(&self) -> bool {
399        unsafe {
400            from_glib(ffi::gtk_cell_renderer_toggle_get_active(
401                self.as_ref().to_glib_none().0,
402            ))
403        }
404    }
405
406    /// Returns whether we’re rendering radio toggles rather than checkboxes.
407    ///
408    /// # Returns
409    ///
410    /// [`true`] if we’re rendering radio toggles rather than checkboxes
411    #[doc(alias = "gtk_cell_renderer_toggle_get_radio")]
412    #[doc(alias = "get_radio")]
413    #[doc(alias = "radio")]
414    fn is_radio(&self) -> bool {
415        unsafe {
416            from_glib(ffi::gtk_cell_renderer_toggle_get_radio(
417                self.as_ref().to_glib_none().0,
418            ))
419        }
420    }
421
422    /// Makes the cell renderer activatable.
423    /// ## `setting`
424    /// the value to set.
425    #[doc(alias = "gtk_cell_renderer_toggle_set_activatable")]
426    #[doc(alias = "activatable")]
427    fn set_activatable(&self, setting: bool) {
428        unsafe {
429            ffi::gtk_cell_renderer_toggle_set_activatable(
430                self.as_ref().to_glib_none().0,
431                setting.into_glib(),
432            );
433        }
434    }
435
436    /// Activates or deactivates a cell renderer.
437    /// ## `setting`
438    /// the value to set.
439    #[doc(alias = "gtk_cell_renderer_toggle_set_active")]
440    #[doc(alias = "active")]
441    fn set_active(&self, setting: bool) {
442        unsafe {
443            ffi::gtk_cell_renderer_toggle_set_active(
444                self.as_ref().to_glib_none().0,
445                setting.into_glib(),
446            );
447        }
448    }
449
450    /// If `radio` is [`true`], the cell renderer renders a radio toggle
451    /// (i.e. a toggle in a group of mutually-exclusive toggles).
452    /// If [`false`], it renders a check toggle (a standalone boolean option).
453    /// This can be set globally for the cell renderer, or changed just
454    /// before rendering each cell in the model (for [`TreeView`][crate::TreeView], you set
455    /// up a per-row setting using [`TreeViewColumn`][crate::TreeViewColumn] to associate model
456    /// columns with cell renderer properties).
457    /// ## `radio`
458    /// [`true`] to make the toggle look like a radio button
459    #[doc(alias = "gtk_cell_renderer_toggle_set_radio")]
460    #[doc(alias = "radio")]
461    fn set_radio(&self, radio: bool) {
462        unsafe {
463            ffi::gtk_cell_renderer_toggle_set_radio(
464                self.as_ref().to_glib_none().0,
465                radio.into_glib(),
466            );
467        }
468    }
469
470    fn is_inconsistent(&self) -> bool {
471        ObjectExt::property(self.as_ref(), "inconsistent")
472    }
473
474    fn set_inconsistent(&self, inconsistent: bool) {
475        ObjectExt::set_property(self.as_ref(), "inconsistent", inconsistent)
476    }
477
478    #[doc(alias = "indicator-size")]
479    fn indicator_size(&self) -> i32 {
480        ObjectExt::property(self.as_ref(), "indicator-size")
481    }
482
483    #[doc(alias = "indicator-size")]
484    fn set_indicator_size(&self, indicator_size: i32) {
485        ObjectExt::set_property(self.as_ref(), "indicator-size", indicator_size)
486    }
487
488    /// The ::toggled signal is emitted when the cell is toggled.
489    ///
490    /// It is the responsibility of the application to update the model
491    /// with the correct value to store at `path`. Often this is simply the
492    /// opposite of the value currently stored at `path`.
493    /// ## `path`
494    /// string representation of [`TreePath`][crate::TreePath] describing the
495    ///  event location
496    #[doc(alias = "toggled")]
497    fn connect_toggled<F: Fn(&Self, TreePath) + 'static>(&self, f: F) -> SignalHandlerId {
498        unsafe extern "C" fn toggled_trampoline<
499            P: IsA<CellRendererToggle>,
500            F: Fn(&P, TreePath) + 'static,
501        >(
502            this: *mut ffi::GtkCellRendererToggle,
503            path: *mut std::ffi::c_char,
504            f: glib::ffi::gpointer,
505        ) {
506            unsafe {
507                let f: &F = &*(f as *const F);
508                let path = from_glib_full(crate::ffi::gtk_tree_path_new_from_string(path));
509                f(
510                    CellRendererToggle::from_glib_borrow(this).unsafe_cast_ref(),
511                    path,
512                )
513            }
514        }
515        unsafe {
516            let f: Box_<F> = Box_::new(f);
517            connect_raw(
518                self.as_ptr() as *mut _,
519                c"toggled".as_ptr(),
520                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
521                    toggled_trampoline::<Self, F> as *const (),
522                )),
523                Box_::into_raw(f),
524            )
525        }
526    }
527
528    #[doc(alias = "activatable")]
529    fn connect_activatable_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
530        unsafe extern "C" fn notify_activatable_trampoline<
531            P: IsA<CellRendererToggle>,
532            F: Fn(&P) + 'static,
533        >(
534            this: *mut ffi::GtkCellRendererToggle,
535            _param_spec: glib::ffi::gpointer,
536            f: glib::ffi::gpointer,
537        ) {
538            unsafe {
539                let f: &F = &*(f as *const F);
540                f(CellRendererToggle::from_glib_borrow(this).unsafe_cast_ref())
541            }
542        }
543        unsafe {
544            let f: Box_<F> = Box_::new(f);
545            connect_raw(
546                self.as_ptr() as *mut _,
547                c"notify::activatable".as_ptr(),
548                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
549                    notify_activatable_trampoline::<Self, F> as *const (),
550                )),
551                Box_::into_raw(f),
552            )
553        }
554    }
555
556    #[doc(alias = "active")]
557    fn connect_active_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
558        unsafe extern "C" fn notify_active_trampoline<
559            P: IsA<CellRendererToggle>,
560            F: Fn(&P) + 'static,
561        >(
562            this: *mut ffi::GtkCellRendererToggle,
563            _param_spec: glib::ffi::gpointer,
564            f: glib::ffi::gpointer,
565        ) {
566            unsafe {
567                let f: &F = &*(f as *const F);
568                f(CellRendererToggle::from_glib_borrow(this).unsafe_cast_ref())
569            }
570        }
571        unsafe {
572            let f: Box_<F> = Box_::new(f);
573            connect_raw(
574                self.as_ptr() as *mut _,
575                c"notify::active".as_ptr(),
576                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
577                    notify_active_trampoline::<Self, F> as *const (),
578                )),
579                Box_::into_raw(f),
580            )
581        }
582    }
583
584    #[doc(alias = "inconsistent")]
585    fn connect_inconsistent_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
586        unsafe extern "C" fn notify_inconsistent_trampoline<
587            P: IsA<CellRendererToggle>,
588            F: Fn(&P) + 'static,
589        >(
590            this: *mut ffi::GtkCellRendererToggle,
591            _param_spec: glib::ffi::gpointer,
592            f: glib::ffi::gpointer,
593        ) {
594            unsafe {
595                let f: &F = &*(f as *const F);
596                f(CellRendererToggle::from_glib_borrow(this).unsafe_cast_ref())
597            }
598        }
599        unsafe {
600            let f: Box_<F> = Box_::new(f);
601            connect_raw(
602                self.as_ptr() as *mut _,
603                c"notify::inconsistent".as_ptr(),
604                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
605                    notify_inconsistent_trampoline::<Self, F> as *const (),
606                )),
607                Box_::into_raw(f),
608            )
609        }
610    }
611
612    #[doc(alias = "indicator-size")]
613    fn connect_indicator_size_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
614        unsafe extern "C" fn notify_indicator_size_trampoline<
615            P: IsA<CellRendererToggle>,
616            F: Fn(&P) + 'static,
617        >(
618            this: *mut ffi::GtkCellRendererToggle,
619            _param_spec: glib::ffi::gpointer,
620            f: glib::ffi::gpointer,
621        ) {
622            unsafe {
623                let f: &F = &*(f as *const F);
624                f(CellRendererToggle::from_glib_borrow(this).unsafe_cast_ref())
625            }
626        }
627        unsafe {
628            let f: Box_<F> = Box_::new(f);
629            connect_raw(
630                self.as_ptr() as *mut _,
631                c"notify::indicator-size".as_ptr(),
632                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
633                    notify_indicator_size_trampoline::<Self, F> as *const (),
634                )),
635                Box_::into_raw(f),
636            )
637        }
638    }
639
640    #[doc(alias = "radio")]
641    fn connect_radio_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
642        unsafe extern "C" fn notify_radio_trampoline<
643            P: IsA<CellRendererToggle>,
644            F: Fn(&P) + 'static,
645        >(
646            this: *mut ffi::GtkCellRendererToggle,
647            _param_spec: glib::ffi::gpointer,
648            f: glib::ffi::gpointer,
649        ) {
650            unsafe {
651                let f: &F = &*(f as *const F);
652                f(CellRendererToggle::from_glib_borrow(this).unsafe_cast_ref())
653            }
654        }
655        unsafe {
656            let f: Box_<F> = Box_::new(f);
657            connect_raw(
658                self.as_ptr() as *mut _,
659                c"notify::radio".as_ptr(),
660                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
661                    notify_radio_trampoline::<Self, F> as *const (),
662                )),
663                Box_::into_raw(f),
664            )
665        }
666    }
667}
668
669impl<O: IsA<CellRendererToggle>> CellRendererToggleExt for O {}