1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
// This file was generated by gir (https://github.com/gtk-rs/gir)
// from gir-files (https://github.com/gtk-rs/gir-files)
// DO NOT EDIT
use crate::{
prelude::*,
signal::{connect_raw, SignalHandlerId},
translate::*,
Object,
};
use std::{boxed::Box as Box_, fmt, mem::transmute};
crate::wrapper! {
/// The [`BindingGroup`][crate::BindingGroup] can be used to bind multiple properties
/// from an object collectively.
///
/// Use the various methods to bind properties from a single source
/// object to multiple destination objects. Properties can be bound
/// bidirectionally and are connected when the source object is set
/// with [`set_source()`][Self::set_source()].
///
/// ## Properties
///
///
/// #### `source`
/// The source object used for binding properties.
///
/// Readable | Writeable
///
/// # Implements
///
/// [`ObjectExt`][trait@crate::prelude::ObjectExt]
#[doc(alias = "GBindingGroup")]
pub struct BindingGroup(Object<gobject_ffi::GBindingGroup>);
match fn {
type_ => || gobject_ffi::g_binding_group_get_type(),
}
}
impl BindingGroup {
/// Creates a new [`BindingGroup`][crate::BindingGroup].
///
/// # Returns
///
/// a new [`BindingGroup`][crate::BindingGroup]
#[doc(alias = "g_binding_group_new")]
pub fn new() -> BindingGroup {
unsafe { from_glib_full(gobject_ffi::g_binding_group_new()) }
}
/// Gets the source object used for binding properties.
///
/// # Returns
///
/// a [`Object`][crate::Object] or [`None`].
#[doc(alias = "g_binding_group_dup_source")]
#[doc(alias = "dup_source")]
pub fn source(&self) -> Option<Object> {
unsafe {
from_glib_none(gobject_ffi::g_binding_group_dup_source(
self.to_glib_none().0,
))
}
}
/// Sets `source` as the source object used for creating property
/// bindings. If there is already a source object all bindings from it
/// will be removed.
///
/// Note that all properties that have been bound must exist on `source`.
/// ## `source`
/// the source [`Object`][crate::Object],
/// or [`None`] to clear it
#[doc(alias = "g_binding_group_set_source")]
pub fn set_source(&self, source: Option<&impl IsA<Object>>) {
unsafe {
gobject_ffi::g_binding_group_set_source(
self.to_glib_none().0,
source.map(|p| p.as_ref()).to_glib_none().0,
);
}
}
#[cfg(any(feature = "v2_72", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v2_72")))]
#[doc(alias = "source")]
pub fn connect_source_notify<F: Fn(&Self) + Send + Sync + 'static>(
&self,
f: F,
) -> SignalHandlerId {
unsafe extern "C" fn notify_source_trampoline<
F: Fn(&BindingGroup) + Send + Sync + 'static,
>(
this: *mut crate::gobject_ffi::GBindingGroup,
_param_spec: ffi::gpointer,
f: ffi::gpointer,
) {
let f: &F = &*(f as *const F);
f(&from_glib_borrow(this))
}
unsafe {
let f: Box_<F> = Box_::new(f);
connect_raw(
self.as_ptr() as *mut _,
b"notify::source\0".as_ptr() as *const _,
Some(transmute::<_, unsafe extern "C" fn()>(
notify_source_trampoline::<F> as *const (),
)),
Box_::into_raw(f),
)
}
}
}
#[cfg(any(feature = "v2_72", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v2_72")))]
impl Default for BindingGroup {
fn default() -> Self {
Self::new()
}
}
unsafe impl Send for BindingGroup {}
unsafe impl Sync for BindingGroup {}
impl fmt::Display for BindingGroup {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write_str("BindingGroup")
}
}