gio/auto/
menu_model.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::{ffi, MenuAttributeIter, MenuLinkIter};
6use glib::{
7    object::ObjectType as _,
8    prelude::*,
9    signal::{connect_raw, SignalHandlerId},
10    translate::*,
11};
12use std::boxed::Box as Box_;
13
14glib::wrapper! {
15    #[doc(alias = "GMenuModel")]
16    pub struct MenuModel(Object<ffi::GMenuModel, ffi::GMenuModelClass>);
17
18    match fn {
19        type_ => || ffi::g_menu_model_get_type(),
20    }
21}
22
23impl MenuModel {
24    pub const NONE: Option<&'static MenuModel> = None;
25}
26
27mod sealed {
28    pub trait Sealed {}
29    impl<T: super::IsA<super::MenuModel>> Sealed for T {}
30}
31
32pub trait MenuModelExt: IsA<MenuModel> + sealed::Sealed + 'static {
33    //#[doc(alias = "g_menu_model_get_item_attribute")]
34    //#[doc(alias = "get_item_attribute")]
35    //fn is_item_attribute(&self, item_index: i32, attribute: &str, format_string: &str, : /*Unknown conversion*//*Unimplemented*/Basic: VarArgs) -> bool {
36    //    unsafe { TODO: call ffi:g_menu_model_get_item_attribute() }
37    //}
38
39    #[doc(alias = "g_menu_model_get_item_attribute_value")]
40    #[doc(alias = "get_item_attribute_value")]
41    fn item_attribute_value(
42        &self,
43        item_index: i32,
44        attribute: &str,
45        expected_type: Option<&glib::VariantTy>,
46    ) -> Option<glib::Variant> {
47        unsafe {
48            from_glib_full(ffi::g_menu_model_get_item_attribute_value(
49                self.as_ref().to_glib_none().0,
50                item_index,
51                attribute.to_glib_none().0,
52                expected_type.to_glib_none().0,
53            ))
54        }
55    }
56
57    #[doc(alias = "g_menu_model_get_item_link")]
58    #[doc(alias = "get_item_link")]
59    #[must_use]
60    fn item_link(&self, item_index: i32, link: &str) -> Option<MenuModel> {
61        unsafe {
62            from_glib_full(ffi::g_menu_model_get_item_link(
63                self.as_ref().to_glib_none().0,
64                item_index,
65                link.to_glib_none().0,
66            ))
67        }
68    }
69
70    #[doc(alias = "g_menu_model_get_n_items")]
71    #[doc(alias = "get_n_items")]
72    fn n_items(&self) -> i32 {
73        unsafe { ffi::g_menu_model_get_n_items(self.as_ref().to_glib_none().0) }
74    }
75
76    #[doc(alias = "g_menu_model_is_mutable")]
77    fn is_mutable(&self) -> bool {
78        unsafe { from_glib(ffi::g_menu_model_is_mutable(self.as_ref().to_glib_none().0)) }
79    }
80
81    #[doc(alias = "g_menu_model_items_changed")]
82    fn items_changed(&self, position: i32, removed: i32, added: i32) {
83        unsafe {
84            ffi::g_menu_model_items_changed(
85                self.as_ref().to_glib_none().0,
86                position,
87                removed,
88                added,
89            );
90        }
91    }
92
93    #[doc(alias = "g_menu_model_iterate_item_attributes")]
94    fn iterate_item_attributes(&self, item_index: i32) -> MenuAttributeIter {
95        unsafe {
96            from_glib_full(ffi::g_menu_model_iterate_item_attributes(
97                self.as_ref().to_glib_none().0,
98                item_index,
99            ))
100        }
101    }
102
103    #[doc(alias = "g_menu_model_iterate_item_links")]
104    fn iterate_item_links(&self, item_index: i32) -> MenuLinkIter {
105        unsafe {
106            from_glib_full(ffi::g_menu_model_iterate_item_links(
107                self.as_ref().to_glib_none().0,
108                item_index,
109            ))
110        }
111    }
112
113    #[doc(alias = "items-changed")]
114    fn connect_items_changed<F: Fn(&Self, i32, i32, i32) + 'static>(
115        &self,
116        f: F,
117    ) -> SignalHandlerId {
118        unsafe extern "C" fn items_changed_trampoline<
119            P: IsA<MenuModel>,
120            F: Fn(&P, i32, i32, i32) + 'static,
121        >(
122            this: *mut ffi::GMenuModel,
123            position: std::ffi::c_int,
124            removed: std::ffi::c_int,
125            added: std::ffi::c_int,
126            f: glib::ffi::gpointer,
127        ) {
128            let f: &F = &*(f as *const F);
129            f(
130                MenuModel::from_glib_borrow(this).unsafe_cast_ref(),
131                position,
132                removed,
133                added,
134            )
135        }
136        unsafe {
137            let f: Box_<F> = Box_::new(f);
138            connect_raw(
139                self.as_ptr() as *mut _,
140                b"items-changed\0".as_ptr() as *const _,
141                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
142                    items_changed_trampoline::<Self, F> as *const (),
143                )),
144                Box_::into_raw(f),
145            )
146        }
147    }
148}
149
150impl<O: IsA<MenuModel>> MenuModelExt for O {}