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
132
133
134
135
use Icon;
use MenuModel;
use ffi;
use glib;
use glib::object::IsA;
use glib::translate::*;
use std::fmt;
glib_wrapper! {
pub struct MenuItem(Object<ffi::GMenuItem, MenuItemClass>);
match fn {
get_type => || ffi::g_menu_item_get_type(),
}
}
impl MenuItem {
pub fn new<'a, 'b, P: Into<Option<&'a str>>, Q: Into<Option<&'b str>>>(label: P, detailed_action: Q) -> MenuItem {
let label = label.into();
let detailed_action = detailed_action.into();
unsafe {
from_glib_full(ffi::g_menu_item_new(label.to_glib_none().0, detailed_action.to_glib_none().0))
}
}
pub fn new_from_model<P: IsA<MenuModel>>(model: &P, item_index: i32) -> MenuItem {
unsafe {
from_glib_full(ffi::g_menu_item_new_from_model(model.as_ref().to_glib_none().0, item_index))
}
}
pub fn new_section<'a, P: Into<Option<&'a str>>, Q: IsA<MenuModel>>(label: P, section: &Q) -> MenuItem {
let label = label.into();
unsafe {
from_glib_full(ffi::g_menu_item_new_section(label.to_glib_none().0, section.as_ref().to_glib_none().0))
}
}
pub fn new_submenu<'a, P: Into<Option<&'a str>>, Q: IsA<MenuModel>>(label: P, submenu: &Q) -> MenuItem {
let label = label.into();
unsafe {
from_glib_full(ffi::g_menu_item_new_submenu(label.to_glib_none().0, submenu.as_ref().to_glib_none().0))
}
}
pub fn get_attribute_value<'a, P: Into<Option<&'a glib::VariantTy>>>(&self, attribute: &str, expected_type: P) -> Option<glib::Variant> {
let expected_type = expected_type.into();
unsafe {
from_glib_full(ffi::g_menu_item_get_attribute_value(self.to_glib_none().0, attribute.to_glib_none().0, expected_type.to_glib_none().0))
}
}
pub fn get_link(&self, link: &str) -> Option<MenuModel> {
unsafe {
from_glib_full(ffi::g_menu_item_get_link(self.to_glib_none().0, link.to_glib_none().0))
}
}
pub fn set_action_and_target_value<'a, 'b, P: Into<Option<&'a str>>, Q: Into<Option<&'b glib::Variant>>>(&self, action: P, target_value: Q) {
let action = action.into();
let target_value = target_value.into();
unsafe {
ffi::g_menu_item_set_action_and_target_value(self.to_glib_none().0, action.to_glib_none().0, target_value.to_glib_none().0);
}
}
pub fn set_attribute_value<'a, P: Into<Option<&'a glib::Variant>>>(&self, attribute: &str, value: P) {
let value = value.into();
unsafe {
ffi::g_menu_item_set_attribute_value(self.to_glib_none().0, attribute.to_glib_none().0, value.to_glib_none().0);
}
}
pub fn set_detailed_action(&self, detailed_action: &str) {
unsafe {
ffi::g_menu_item_set_detailed_action(self.to_glib_none().0, detailed_action.to_glib_none().0);
}
}
pub fn set_icon<P: IsA<Icon>>(&self, icon: &P) {
unsafe {
ffi::g_menu_item_set_icon(self.to_glib_none().0, icon.as_ref().to_glib_none().0);
}
}
pub fn set_label<'a, P: Into<Option<&'a str>>>(&self, label: P) {
let label = label.into();
unsafe {
ffi::g_menu_item_set_label(self.to_glib_none().0, label.to_glib_none().0);
}
}
pub fn set_link<'a, P: IsA<MenuModel> + 'a, Q: Into<Option<&'a P>>>(&self, link: &str, model: Q) {
let model = model.into();
unsafe {
ffi::g_menu_item_set_link(self.to_glib_none().0, link.to_glib_none().0, model.map(|p| p.as_ref()).to_glib_none().0);
}
}
pub fn set_section<'a, P: IsA<MenuModel> + 'a, Q: Into<Option<&'a P>>>(&self, section: Q) {
let section = section.into();
unsafe {
ffi::g_menu_item_set_section(self.to_glib_none().0, section.map(|p| p.as_ref()).to_glib_none().0);
}
}
pub fn set_submenu<'a, P: IsA<MenuModel> + 'a, Q: Into<Option<&'a P>>>(&self, submenu: Q) {
let submenu = submenu.into();
unsafe {
ffi::g_menu_item_set_submenu(self.to_glib_none().0, submenu.map(|p| p.as_ref()).to_glib_none().0);
}
}
}
impl fmt::Display for MenuItem {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "MenuItem")
}
}