Skip to main content

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