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
// 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::Action;
use glib::object::IsA;
use glib::object::ObjectType as ObjectType_;
use glib::translate::*;
use glib::StaticType;
use std::fmt;
glib::wrapper! {
/// A [`PropertyAction`][crate::PropertyAction] is a way to get a [`Action`][crate::Action] with a state value
/// reflecting and controlling the value of a [`glib::Object`][crate::glib::Object] property.
///
/// The state of the action will correspond to the value of the property.
/// Changing it will change the property (assuming the requested value
/// matches the requirements as specified in the `GParamSpec`).
///
/// Only the most common types are presently supported. Booleans are
/// mapped to booleans, strings to strings, signed/unsigned integers to
/// int32/uint32 and floats and doubles to doubles.
///
/// If the property is an enum then the state will be string-typed and
/// conversion will automatically be performed between the enum value and
/// "nick" string as per the `GEnumValue` table.
///
/// Flags types are not currently supported.
///
/// Properties of object types, boxed types and pointer types are not
/// supported and probably never will be.
///
/// Properties of [`glib::Variant`][struct@crate::glib::Variant] types are not currently supported.
///
/// If the property is boolean-valued then the action will have a NULL
/// parameter type, and activating the action (with no parameter) will
/// toggle the value of the property.
///
/// In all other cases, the parameter type will correspond to the type of
/// the property.
///
/// The general idea here is to reduce the number of locations where a
/// particular piece of state is kept (and therefore has to be synchronised
/// between). [`PropertyAction`][crate::PropertyAction] does not have a separate state that is kept
/// in sync with the property value -- its state is the property value.
///
/// For example, it might be useful to create a [`Action`][crate::Action] corresponding to
/// the "visible-child-name" property of a `GtkStack` so that the current
/// page can be switched from a menu. The active radio indication in the
/// menu is then directly determined from the active page of the
/// `GtkStack`.
///
/// An anti-example would be binding the "active-id" property on a
/// `GtkComboBox`. This is because the state of the combobox itself is
/// probably uninteresting and is actually being used to control
/// something else.
///
/// Another anti-example would be to bind to the "visible-child-name"
/// property of a `GtkStack` if this value is actually stored in
/// [`Settings`][crate::Settings]. In that case, the real source of the value is
/// [`Settings`][crate::Settings]. If you want a [`Action`][crate::Action] to control a setting stored in
/// [`Settings`][crate::Settings], see [`SettingsExt::create_action()`][crate::prelude::SettingsExt::create_action()] instead, and possibly
/// combine its use with [`SettingsExtManual::bind()`][crate::prelude::SettingsExtManual::bind()].
///
/// # Implements
///
/// [`trait@glib::ObjectExt`], [`ActionExt`][trait@crate::prelude::ActionExt]
#[doc(alias = "GPropertyAction")]
pub struct PropertyAction(Object<ffi::GPropertyAction>) @implements Action;
match fn {
type_ => || ffi::g_property_action_get_type(),
}
}
impl PropertyAction {
/// Creates a [`Action`][crate::Action] corresponding to the value of property
/// `property_name` on `object`.
///
/// The property must be existent and readable and writable (and not
/// construct-only).
///
/// This function takes a reference on `object` and doesn't release it
/// until the action is destroyed.
/// ## `name`
/// the name of the action to create
/// ## `object`
/// the object that has the property
/// to wrap
/// ## `property_name`
/// the name of the property
///
/// # Returns
///
/// a new [`PropertyAction`][crate::PropertyAction]
#[doc(alias = "g_property_action_new")]
pub fn new(name: &str, object: &impl IsA<glib::Object>, property_name: &str) -> PropertyAction {
unsafe {
from_glib_full(ffi::g_property_action_new(
name.to_glib_none().0,
object.as_ref().to_glib_none().0,
property_name.to_glib_none().0,
))
}
}
/// If [`true`], the state of the action will be the negation of the
/// property value, provided the property is boolean.
#[doc(alias = "invert-boolean")]
pub fn inverts_boolean(&self) -> bool {
glib::ObjectExt::property(self, "invert-boolean")
}
}
impl fmt::Display for PropertyAction {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write_str("PropertyAction")
}
}