1use crate::{ffi, MenuItem, MenuModel};
6use glib::{prelude::*, translate::*};
7
8glib::wrapper! {
9 #[doc(alias = "GMenu")]
10 pub struct Menu(Object<ffi::GMenu>) @extends MenuModel;
11
12 match fn {
13 type_ => || ffi::g_menu_get_type(),
14 }
15}
16
17impl Menu {
18 #[doc(alias = "g_menu_new")]
19 pub fn new() -> Menu {
20 unsafe { from_glib_full(ffi::g_menu_new()) }
21 }
22
23 #[doc(alias = "g_menu_append")]
24 pub fn append(&self, label: Option<&str>, detailed_action: Option<&str>) {
25 unsafe {
26 ffi::g_menu_append(
27 self.to_glib_none().0,
28 label.to_glib_none().0,
29 detailed_action.to_glib_none().0,
30 );
31 }
32 }
33
34 #[doc(alias = "g_menu_append_item")]
35 pub fn append_item(&self, item: &MenuItem) {
36 unsafe {
37 ffi::g_menu_append_item(self.to_glib_none().0, item.to_glib_none().0);
38 }
39 }
40
41 #[doc(alias = "g_menu_append_section")]
42 pub fn append_section(&self, label: Option<&str>, section: &impl IsA<MenuModel>) {
43 unsafe {
44 ffi::g_menu_append_section(
45 self.to_glib_none().0,
46 label.to_glib_none().0,
47 section.as_ref().to_glib_none().0,
48 );
49 }
50 }
51
52 #[doc(alias = "g_menu_append_submenu")]
53 pub fn append_submenu(&self, label: Option<&str>, submenu: &impl IsA<MenuModel>) {
54 unsafe {
55 ffi::g_menu_append_submenu(
56 self.to_glib_none().0,
57 label.to_glib_none().0,
58 submenu.as_ref().to_glib_none().0,
59 );
60 }
61 }
62
63 #[doc(alias = "g_menu_freeze")]
64 pub fn freeze(&self) {
65 unsafe {
66 ffi::g_menu_freeze(self.to_glib_none().0);
67 }
68 }
69
70 #[doc(alias = "g_menu_insert")]
71 pub fn insert(&self, position: i32, label: Option<&str>, detailed_action: Option<&str>) {
72 unsafe {
73 ffi::g_menu_insert(
74 self.to_glib_none().0,
75 position,
76 label.to_glib_none().0,
77 detailed_action.to_glib_none().0,
78 );
79 }
80 }
81
82 #[doc(alias = "g_menu_insert_item")]
83 pub fn insert_item(&self, position: i32, item: &MenuItem) {
84 unsafe {
85 ffi::g_menu_insert_item(self.to_glib_none().0, position, item.to_glib_none().0);
86 }
87 }
88
89 #[doc(alias = "g_menu_insert_section")]
90 pub fn insert_section(
91 &self,
92 position: i32,
93 label: Option<&str>,
94 section: &impl IsA<MenuModel>,
95 ) {
96 unsafe {
97 ffi::g_menu_insert_section(
98 self.to_glib_none().0,
99 position,
100 label.to_glib_none().0,
101 section.as_ref().to_glib_none().0,
102 );
103 }
104 }
105
106 #[doc(alias = "g_menu_insert_submenu")]
107 pub fn insert_submenu(
108 &self,
109 position: i32,
110 label: Option<&str>,
111 submenu: &impl IsA<MenuModel>,
112 ) {
113 unsafe {
114 ffi::g_menu_insert_submenu(
115 self.to_glib_none().0,
116 position,
117 label.to_glib_none().0,
118 submenu.as_ref().to_glib_none().0,
119 );
120 }
121 }
122
123 #[doc(alias = "g_menu_prepend")]
124 pub fn prepend(&self, label: Option<&str>, detailed_action: Option<&str>) {
125 unsafe {
126 ffi::g_menu_prepend(
127 self.to_glib_none().0,
128 label.to_glib_none().0,
129 detailed_action.to_glib_none().0,
130 );
131 }
132 }
133
134 #[doc(alias = "g_menu_prepend_item")]
135 pub fn prepend_item(&self, item: &MenuItem) {
136 unsafe {
137 ffi::g_menu_prepend_item(self.to_glib_none().0, item.to_glib_none().0);
138 }
139 }
140
141 #[doc(alias = "g_menu_prepend_section")]
142 pub fn prepend_section(&self, label: Option<&str>, section: &impl IsA<MenuModel>) {
143 unsafe {
144 ffi::g_menu_prepend_section(
145 self.to_glib_none().0,
146 label.to_glib_none().0,
147 section.as_ref().to_glib_none().0,
148 );
149 }
150 }
151
152 #[doc(alias = "g_menu_prepend_submenu")]
153 pub fn prepend_submenu(&self, label: Option<&str>, submenu: &impl IsA<MenuModel>) {
154 unsafe {
155 ffi::g_menu_prepend_submenu(
156 self.to_glib_none().0,
157 label.to_glib_none().0,
158 submenu.as_ref().to_glib_none().0,
159 );
160 }
161 }
162
163 #[doc(alias = "g_menu_remove")]
164 pub fn remove(&self, position: i32) {
165 unsafe {
166 ffi::g_menu_remove(self.to_glib_none().0, position);
167 }
168 }
169
170 #[doc(alias = "g_menu_remove_all")]
171 pub fn remove_all(&self) {
172 unsafe {
173 ffi::g_menu_remove_all(self.to_glib_none().0);
174 }
175 }
176}
177
178impl Default for Menu {
179 fn default() -> Self {
180 Self::new()
181 }
182}