1use crate::{CellRenderer, CellRendererMode, TreePath};
6use glib::{
7 prelude::*,
8 signal::{connect_raw, SignalHandlerId},
9 translate::*,
10};
11use std::{boxed::Box as Box_, fmt, mem::transmute};
12
13glib::wrapper! {
14 #[doc(alias = "GtkCellRendererToggle")]
177 pub struct CellRendererToggle(Object<ffi::GtkCellRendererToggle, ffi::GtkCellRendererToggleClass>) @extends CellRenderer;
178
179 match fn {
180 type_ => || ffi::gtk_cell_renderer_toggle_get_type(),
181 }
182}
183
184impl CellRendererToggle {
185 pub const NONE: Option<&'static CellRendererToggle> = None;
186
187 #[doc(alias = "gtk_cell_renderer_toggle_new")]
199 pub fn new() -> CellRendererToggle {
200 assert_initialized_main_thread!();
201 unsafe { CellRenderer::from_glib_none(ffi::gtk_cell_renderer_toggle_new()).unsafe_cast() }
202 }
203
204 pub fn builder() -> CellRendererToggleBuilder {
209 CellRendererToggleBuilder::new()
210 }
211}
212
213impl Default for CellRendererToggle {
214 fn default() -> Self {
215 Self::new()
216 }
217}
218
219#[must_use = "The builder must be built to be used"]
224pub struct CellRendererToggleBuilder {
225 builder: glib::object::ObjectBuilder<'static, CellRendererToggle>,
226}
227
228impl CellRendererToggleBuilder {
229 fn new() -> Self {
230 Self {
231 builder: glib::object::Object::builder(),
232 }
233 }
234
235 pub fn activatable(self, activatable: bool) -> Self {
236 Self {
237 builder: self.builder.property("activatable", activatable),
238 }
239 }
240
241 pub fn active(self, active: bool) -> Self {
242 Self {
243 builder: self.builder.property("active", active),
244 }
245 }
246
247 pub fn inconsistent(self, inconsistent: bool) -> Self {
248 Self {
249 builder: self.builder.property("inconsistent", inconsistent),
250 }
251 }
252
253 pub fn indicator_size(self, indicator_size: i32) -> Self {
254 Self {
255 builder: self.builder.property("indicator-size", indicator_size),
256 }
257 }
258
259 pub fn radio(self, radio: bool) -> Self {
260 Self {
261 builder: self.builder.property("radio", radio),
262 }
263 }
264
265 pub fn cell_background(self, cell_background: impl Into<glib::GString>) -> Self {
266 Self {
267 builder: self
268 .builder
269 .property("cell-background", cell_background.into()),
270 }
271 }
272
273 pub fn cell_background_rgba(self, cell_background_rgba: &gdk::RGBA) -> Self {
275 Self {
276 builder: self
277 .builder
278 .property("cell-background-rgba", cell_background_rgba),
279 }
280 }
281
282 pub fn cell_background_set(self, cell_background_set: bool) -> Self {
283 Self {
284 builder: self
285 .builder
286 .property("cell-background-set", cell_background_set),
287 }
288 }
289
290 pub fn height(self, height: i32) -> Self {
291 Self {
292 builder: self.builder.property("height", height),
293 }
294 }
295
296 pub fn is_expanded(self, is_expanded: bool) -> Self {
297 Self {
298 builder: self.builder.property("is-expanded", is_expanded),
299 }
300 }
301
302 pub fn is_expander(self, is_expander: bool) -> Self {
303 Self {
304 builder: self.builder.property("is-expander", is_expander),
305 }
306 }
307
308 pub fn mode(self, mode: CellRendererMode) -> Self {
309 Self {
310 builder: self.builder.property("mode", mode),
311 }
312 }
313
314 pub fn sensitive(self, sensitive: bool) -> Self {
315 Self {
316 builder: self.builder.property("sensitive", sensitive),
317 }
318 }
319
320 pub fn visible(self, visible: bool) -> Self {
321 Self {
322 builder: self.builder.property("visible", visible),
323 }
324 }
325
326 pub fn width(self, width: i32) -> Self {
327 Self {
328 builder: self.builder.property("width", width),
329 }
330 }
331
332 pub fn xalign(self, xalign: f32) -> Self {
333 Self {
334 builder: self.builder.property("xalign", xalign),
335 }
336 }
337
338 pub fn xpad(self, xpad: u32) -> Self {
339 Self {
340 builder: self.builder.property("xpad", xpad),
341 }
342 }
343
344 pub fn yalign(self, yalign: f32) -> Self {
345 Self {
346 builder: self.builder.property("yalign", yalign),
347 }
348 }
349
350 pub fn ypad(self, ypad: u32) -> Self {
351 Self {
352 builder: self.builder.property("ypad", ypad),
353 }
354 }
355
356 #[must_use = "Building the object from the builder is usually expensive and is not expected to have side effects"]
359 pub fn build(self) -> CellRendererToggle {
360 self.builder.build()
361 }
362}
363
364mod sealed {
365 pub trait Sealed {}
366 impl<T: super::IsA<super::CellRendererToggle>> Sealed for T {}
367}
368
369pub trait CellRendererToggleExt: IsA<CellRendererToggle> + sealed::Sealed + 'static {
375 #[doc(alias = "gtk_cell_renderer_toggle_get_activatable")]
382 #[doc(alias = "get_activatable")]
383 fn is_activatable(&self) -> bool {
384 unsafe {
385 from_glib(ffi::gtk_cell_renderer_toggle_get_activatable(
386 self.as_ref().to_glib_none().0,
387 ))
388 }
389 }
390
391 #[doc(alias = "gtk_cell_renderer_toggle_get_active")]
398 #[doc(alias = "get_active")]
399 fn is_active(&self) -> bool {
400 unsafe {
401 from_glib(ffi::gtk_cell_renderer_toggle_get_active(
402 self.as_ref().to_glib_none().0,
403 ))
404 }
405 }
406
407 #[doc(alias = "gtk_cell_renderer_toggle_get_radio")]
413 #[doc(alias = "get_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 #[doc(alias = "gtk_cell_renderer_toggle_set_activatable")]
426 fn set_activatable(&self, setting: bool) {
427 unsafe {
428 ffi::gtk_cell_renderer_toggle_set_activatable(
429 self.as_ref().to_glib_none().0,
430 setting.into_glib(),
431 );
432 }
433 }
434
435 #[doc(alias = "gtk_cell_renderer_toggle_set_active")]
439 fn set_active(&self, setting: bool) {
440 unsafe {
441 ffi::gtk_cell_renderer_toggle_set_active(
442 self.as_ref().to_glib_none().0,
443 setting.into_glib(),
444 );
445 }
446 }
447
448 #[doc(alias = "gtk_cell_renderer_toggle_set_radio")]
458 fn set_radio(&self, radio: bool) {
459 unsafe {
460 ffi::gtk_cell_renderer_toggle_set_radio(
461 self.as_ref().to_glib_none().0,
462 radio.into_glib(),
463 );
464 }
465 }
466
467 fn is_inconsistent(&self) -> bool {
468 ObjectExt::property(self.as_ref(), "inconsistent")
469 }
470
471 fn set_inconsistent(&self, inconsistent: bool) {
472 ObjectExt::set_property(self.as_ref(), "inconsistent", inconsistent)
473 }
474
475 #[doc(alias = "indicator-size")]
476 fn indicator_size(&self) -> i32 {
477 ObjectExt::property(self.as_ref(), "indicator-size")
478 }
479
480 #[doc(alias = "indicator-size")]
481 fn set_indicator_size(&self, indicator_size: i32) {
482 ObjectExt::set_property(self.as_ref(), "indicator-size", indicator_size)
483 }
484
485 #[doc(alias = "toggled")]
494 fn connect_toggled<F: Fn(&Self, TreePath) + 'static>(&self, f: F) -> SignalHandlerId {
495 unsafe extern "C" fn toggled_trampoline<
496 P: IsA<CellRendererToggle>,
497 F: Fn(&P, TreePath) + 'static,
498 >(
499 this: *mut ffi::GtkCellRendererToggle,
500 path: *mut libc::c_char,
501 f: glib::ffi::gpointer,
502 ) {
503 let f: &F = &*(f as *const F);
504 let path = from_glib_full(crate::ffi::gtk_tree_path_new_from_string(path));
505 f(
506 CellRendererToggle::from_glib_borrow(this).unsafe_cast_ref(),
507 path,
508 )
509 }
510 unsafe {
511 let f: Box_<F> = Box_::new(f);
512 connect_raw(
513 self.as_ptr() as *mut _,
514 b"toggled\0".as_ptr() as *const _,
515 Some(transmute::<_, unsafe extern "C" fn()>(
516 toggled_trampoline::<Self, F> as *const (),
517 )),
518 Box_::into_raw(f),
519 )
520 }
521 }
522
523 #[doc(alias = "activatable")]
524 fn connect_activatable_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
525 unsafe extern "C" fn notify_activatable_trampoline<
526 P: IsA<CellRendererToggle>,
527 F: Fn(&P) + 'static,
528 >(
529 this: *mut ffi::GtkCellRendererToggle,
530 _param_spec: glib::ffi::gpointer,
531 f: glib::ffi::gpointer,
532 ) {
533 let f: &F = &*(f as *const F);
534 f(CellRendererToggle::from_glib_borrow(this).unsafe_cast_ref())
535 }
536 unsafe {
537 let f: Box_<F> = Box_::new(f);
538 connect_raw(
539 self.as_ptr() as *mut _,
540 b"notify::activatable\0".as_ptr() as *const _,
541 Some(transmute::<_, unsafe extern "C" fn()>(
542 notify_activatable_trampoline::<Self, F> as *const (),
543 )),
544 Box_::into_raw(f),
545 )
546 }
547 }
548
549 #[doc(alias = "active")]
550 fn connect_active_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
551 unsafe extern "C" fn notify_active_trampoline<
552 P: IsA<CellRendererToggle>,
553 F: Fn(&P) + 'static,
554 >(
555 this: *mut ffi::GtkCellRendererToggle,
556 _param_spec: glib::ffi::gpointer,
557 f: glib::ffi::gpointer,
558 ) {
559 let f: &F = &*(f as *const F);
560 f(CellRendererToggle::from_glib_borrow(this).unsafe_cast_ref())
561 }
562 unsafe {
563 let f: Box_<F> = Box_::new(f);
564 connect_raw(
565 self.as_ptr() as *mut _,
566 b"notify::active\0".as_ptr() as *const _,
567 Some(transmute::<_, unsafe extern "C" fn()>(
568 notify_active_trampoline::<Self, F> as *const (),
569 )),
570 Box_::into_raw(f),
571 )
572 }
573 }
574
575 #[doc(alias = "inconsistent")]
576 fn connect_inconsistent_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
577 unsafe extern "C" fn notify_inconsistent_trampoline<
578 P: IsA<CellRendererToggle>,
579 F: Fn(&P) + 'static,
580 >(
581 this: *mut ffi::GtkCellRendererToggle,
582 _param_spec: glib::ffi::gpointer,
583 f: glib::ffi::gpointer,
584 ) {
585 let f: &F = &*(f as *const F);
586 f(CellRendererToggle::from_glib_borrow(this).unsafe_cast_ref())
587 }
588 unsafe {
589 let f: Box_<F> = Box_::new(f);
590 connect_raw(
591 self.as_ptr() as *mut _,
592 b"notify::inconsistent\0".as_ptr() as *const _,
593 Some(transmute::<_, unsafe extern "C" fn()>(
594 notify_inconsistent_trampoline::<Self, F> as *const (),
595 )),
596 Box_::into_raw(f),
597 )
598 }
599 }
600
601 #[doc(alias = "indicator-size")]
602 fn connect_indicator_size_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
603 unsafe extern "C" fn notify_indicator_size_trampoline<
604 P: IsA<CellRendererToggle>,
605 F: Fn(&P) + 'static,
606 >(
607 this: *mut ffi::GtkCellRendererToggle,
608 _param_spec: glib::ffi::gpointer,
609 f: glib::ffi::gpointer,
610 ) {
611 let f: &F = &*(f as *const F);
612 f(CellRendererToggle::from_glib_borrow(this).unsafe_cast_ref())
613 }
614 unsafe {
615 let f: Box_<F> = Box_::new(f);
616 connect_raw(
617 self.as_ptr() as *mut _,
618 b"notify::indicator-size\0".as_ptr() as *const _,
619 Some(transmute::<_, unsafe extern "C" fn()>(
620 notify_indicator_size_trampoline::<Self, F> as *const (),
621 )),
622 Box_::into_raw(f),
623 )
624 }
625 }
626
627 #[doc(alias = "radio")]
628 fn connect_radio_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
629 unsafe extern "C" fn notify_radio_trampoline<
630 P: IsA<CellRendererToggle>,
631 F: Fn(&P) + 'static,
632 >(
633 this: *mut ffi::GtkCellRendererToggle,
634 _param_spec: glib::ffi::gpointer,
635 f: glib::ffi::gpointer,
636 ) {
637 let f: &F = &*(f as *const F);
638 f(CellRendererToggle::from_glib_borrow(this).unsafe_cast_ref())
639 }
640 unsafe {
641 let f: Box_<F> = Box_::new(f);
642 connect_raw(
643 self.as_ptr() as *mut _,
644 b"notify::radio\0".as_ptr() as *const _,
645 Some(transmute::<_, unsafe extern "C" fn()>(
646 notify_radio_trampoline::<Self, F> as *const (),
647 )),
648 Box_::into_raw(f),
649 )
650 }
651 }
652}
653
654impl<O: IsA<CellRendererToggle>> CellRendererToggleExt for O {}
655
656impl fmt::Display for CellRendererToggle {
657 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
658 f.write_str("CellRendererToggle")
659 }
660}