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 
5 use crate::MenuAttributeIter;
6 use crate::MenuLinkIter;
7 use glib::object::Cast;
8 use glib::object::IsA;
9 use glib::signal::connect_raw;
10 use glib::signal::SignalHandlerId;
11 use glib::translate::*;
12 use std::boxed::Box as Box_;
13 use std::fmt;
14 use std::mem::transmute;
15 
16 glib::wrapper! {
17     #[doc(alias = "GMenuModel")]
18     pub struct MenuModel(Object<ffi::GMenuModel, ffi::GMenuModelClass>);
19 
20     match fn {
21         type_ => || ffi::g_menu_model_get_type(),
22     }
23 }
24 
25 pub const NONE_MENU_MODEL: Option<&MenuModel> = None;
26 
27 pub trait MenuModelExt: 'static {
28     //#[doc(alias = "g_menu_model_get_item_attribute")]
29     //#[doc(alias = "get_item_attribute")]
30     //fn is_item_attribute(&self, item_index: i32, attribute: &str, format_string: &str, : /*Unknown conversion*//*Unimplemented*/Fundamental: VarArgs) -> bool;
31 
32     #[doc(alias = "g_menu_model_get_item_attribute_value")]
33     #[doc(alias = "get_item_attribute_value")]
item_attribute_value( &self, item_index: i32, attribute: &str, expected_type: Option<&glib::VariantTy>, ) -> Option<glib::Variant>34     fn item_attribute_value(
35         &self,
36         item_index: i32,
37         attribute: &str,
38         expected_type: Option<&glib::VariantTy>,
39     ) -> Option<glib::Variant>;
40 
41     #[doc(alias = "g_menu_model_get_item_link")]
42     #[doc(alias = "get_item_link")]
item_link(&self, item_index: i32, link: &str) -> Option<MenuModel>43     fn item_link(&self, item_index: i32, link: &str) -> Option<MenuModel>;
44 
45     #[doc(alias = "g_menu_model_get_n_items")]
46     #[doc(alias = "get_n_items")]
n_items(&self) -> i3247     fn n_items(&self) -> i32;
48 
49     #[doc(alias = "g_menu_model_is_mutable")]
is_mutable(&self) -> bool50     fn is_mutable(&self) -> bool;
51 
52     #[doc(alias = "g_menu_model_items_changed")]
items_changed(&self, position: i32, removed: i32, added: i32)53     fn items_changed(&self, position: i32, removed: i32, added: i32);
54 
55     #[doc(alias = "g_menu_model_iterate_item_attributes")]
iterate_item_attributes(&self, item_index: i32) -> MenuAttributeIter56     fn iterate_item_attributes(&self, item_index: i32) -> MenuAttributeIter;
57 
58     #[doc(alias = "g_menu_model_iterate_item_links")]
iterate_item_links(&self, item_index: i32) -> MenuLinkIter59     fn iterate_item_links(&self, item_index: i32) -> MenuLinkIter;
60 
61     #[doc(alias = "items-changed")]
connect_items_changed<F: Fn(&Self, i32, i32, i32) + 'static>(&self, f: F) -> SignalHandlerId62     fn connect_items_changed<F: Fn(&Self, i32, i32, i32) + 'static>(&self, f: F)
63         -> SignalHandlerId;
64 }
65 
66 impl<O: IsA<MenuModel>> MenuModelExt for O {
67     //fn is_item_attribute(&self, item_index: i32, attribute: &str, format_string: &str, : /*Unknown conversion*//*Unimplemented*/Fundamental: VarArgs) -> bool {
68     //    unsafe { TODO: call ffi:g_menu_model_get_item_attribute() }
69     //}
70 
item_attribute_value( &self, item_index: i32, attribute: &str, expected_type: Option<&glib::VariantTy>, ) -> Option<glib::Variant>71     fn item_attribute_value(
72         &self,
73         item_index: i32,
74         attribute: &str,
75         expected_type: Option<&glib::VariantTy>,
76     ) -> Option<glib::Variant> {
77         unsafe {
78             from_glib_full(ffi::g_menu_model_get_item_attribute_value(
79                 self.as_ref().to_glib_none().0,
80                 item_index,
81                 attribute.to_glib_none().0,
82                 expected_type.to_glib_none().0,
83             ))
84         }
85     }
86 
item_link(&self, item_index: i32, link: &str) -> Option<MenuModel>87     fn item_link(&self, item_index: i32, link: &str) -> Option<MenuModel> {
88         unsafe {
89             from_glib_full(ffi::g_menu_model_get_item_link(
90                 self.as_ref().to_glib_none().0,
91                 item_index,
92                 link.to_glib_none().0,
93             ))
94         }
95     }
96 
n_items(&self) -> i3297     fn n_items(&self) -> i32 {
98         unsafe { ffi::g_menu_model_get_n_items(self.as_ref().to_glib_none().0) }
99     }
100 
is_mutable(&self) -> bool101     fn is_mutable(&self) -> bool {
102         unsafe { from_glib(ffi::g_menu_model_is_mutable(self.as_ref().to_glib_none().0)) }
103     }
104 
items_changed(&self, position: i32, removed: i32, added: i32)105     fn items_changed(&self, position: i32, removed: i32, added: i32) {
106         unsafe {
107             ffi::g_menu_model_items_changed(
108                 self.as_ref().to_glib_none().0,
109                 position,
110                 removed,
111                 added,
112             );
113         }
114     }
115 
iterate_item_attributes(&self, item_index: i32) -> MenuAttributeIter116     fn iterate_item_attributes(&self, item_index: i32) -> MenuAttributeIter {
117         unsafe {
118             from_glib_full(ffi::g_menu_model_iterate_item_attributes(
119                 self.as_ref().to_glib_none().0,
120                 item_index,
121             ))
122         }
123     }
124 
iterate_item_links(&self, item_index: i32) -> MenuLinkIter125     fn iterate_item_links(&self, item_index: i32) -> MenuLinkIter {
126         unsafe {
127             from_glib_full(ffi::g_menu_model_iterate_item_links(
128                 self.as_ref().to_glib_none().0,
129                 item_index,
130             ))
131         }
132     }
133 
connect_items_changed<F: Fn(&Self, i32, i32, i32) + 'static>( &self, f: F, ) -> SignalHandlerId134     fn connect_items_changed<F: Fn(&Self, i32, i32, i32) + 'static>(
135         &self,
136         f: F,
137     ) -> SignalHandlerId {
138         unsafe extern "C" fn items_changed_trampoline<
139             P: IsA<MenuModel>,
140             F: Fn(&P, i32, i32, i32) + 'static,
141         >(
142             this: *mut ffi::GMenuModel,
143             position: libc::c_int,
144             removed: libc::c_int,
145             added: libc::c_int,
146             f: glib::ffi::gpointer,
147         ) {
148             let f: &F = &*(f as *const F);
149             f(
150                 MenuModel::from_glib_borrow(this).unsafe_cast_ref(),
151                 position,
152                 removed,
153                 added,
154             )
155         }
156         unsafe {
157             let f: Box_<F> = Box_::new(f);
158             connect_raw(
159                 self.as_ptr() as *mut _,
160                 b"items-changed\0".as_ptr() as *const _,
161                 Some(transmute::<_, unsafe extern "C" fn()>(
162                     items_changed_trampoline::<Self, F> as *const (),
163                 )),
164                 Box_::into_raw(f),
165             )
166         }
167     }
168 }
169 
170 impl fmt::Display for MenuModel {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result171     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
172         f.write_str("MenuModel")
173     }
174 }
175