1 // Take a look at the license at the top of the repository in the LICENSE file.
2 
3 use crate::Notebook;
4 use crate::Widget;
5 use glib::translate::*;
6 use glib::IsA;
7 use libc::c_int;
8 
9 pub trait NotebookExtManual: 'static {
10     #[doc(alias = "gtk_notebook_append_page")]
append_page<T: IsA<Widget>, U: IsA<Widget>>(&self, child: &T, tab_label: Option<&U>) -> u3211     fn append_page<T: IsA<Widget>, U: IsA<Widget>>(&self, child: &T, tab_label: Option<&U>) -> u32;
12 
13     #[doc(alias = "gtk_notebook_append_page_menu")]
append_page_menu<T, U, V>( &self, child: &T, tab_label: Option<&U>, menu_label: Option<&V>, ) -> u32 where T: IsA<Widget>, U: IsA<Widget>, V: IsA<Widget>14     fn append_page_menu<T, U, V>(
15         &self,
16         child: &T,
17         tab_label: Option<&U>,
18         menu_label: Option<&V>,
19     ) -> u32
20     where
21         T: IsA<Widget>,
22         U: IsA<Widget>,
23         V: IsA<Widget>;
24 
25     #[doc(alias = "gtk_notebook_get_current_page")]
26     #[doc(alias = "get_current_page")]
current_page(&self) -> Option<u32>27     fn current_page(&self) -> Option<u32>;
28 
29     #[doc(alias = "gtk_notebook_get_n_pages")]
30     #[doc(alias = "get_n_pages")]
n_pages(&self) -> u3231     fn n_pages(&self) -> u32;
32 
33     #[doc(alias = "gtk_notebook_get_nth_page")]
34     #[doc(alias = "get_nth_page")]
nth_page(&self, page_num: Option<u32>) -> Option<Widget>35     fn nth_page(&self, page_num: Option<u32>) -> Option<Widget>;
36 
37     #[doc(alias = "gtk_notebook_insert_page")]
insert_page<T, U>(&self, child: &T, tab_label: Option<&U>, position: Option<u32>) -> u32 where T: IsA<Widget>, U: IsA<Widget>38     fn insert_page<T, U>(&self, child: &T, tab_label: Option<&U>, position: Option<u32>) -> u32
39     where
40         T: IsA<Widget>,
41         U: IsA<Widget>;
42 
43     #[doc(alias = "gtk_notebook_insert_page_menu")]
insert_page_menu<T, U, V>( &self, child: &T, tab_label: Option<&U>, menu_label: Option<&V>, position: Option<u32>, ) -> u32 where T: IsA<Widget>, U: IsA<Widget>, V: IsA<Widget>44     fn insert_page_menu<T, U, V>(
45         &self,
46         child: &T,
47         tab_label: Option<&U>,
48         menu_label: Option<&V>,
49         position: Option<u32>,
50     ) -> u32
51     where
52         T: IsA<Widget>,
53         U: IsA<Widget>,
54         V: IsA<Widget>;
55 
56     #[doc(alias = "gtk_notebook_page_num")]
page_num<T: IsA<Widget>>(&self, child: &T) -> Option<u32>57     fn page_num<T: IsA<Widget>>(&self, child: &T) -> Option<u32>;
58 
59     #[doc(alias = "gtk_notebook_prepend_page")]
prepend_page<T, U>(&self, child: &T, tab_label: Option<&U>) -> u32 where T: IsA<Widget>, U: IsA<Widget>60     fn prepend_page<T, U>(&self, child: &T, tab_label: Option<&U>) -> u32
61     where
62         T: IsA<Widget>,
63         U: IsA<Widget>;
64 
65     #[doc(alias = "gtk_notebook_prepend_page_menu")]
prepend_page_menu<T, U, V>( &self, child: &T, tab_label: Option<&U>, menu_label: Option<&V>, ) -> u32 where T: IsA<Widget>, U: IsA<Widget>, V: IsA<Widget>66     fn prepend_page_menu<T, U, V>(
67         &self,
68         child: &T,
69         tab_label: Option<&U>,
70         menu_label: Option<&V>,
71     ) -> u32
72     where
73         T: IsA<Widget>,
74         U: IsA<Widget>,
75         V: IsA<Widget>;
76 
77     #[doc(alias = "gtk_notebook_remove_page")]
remove_page(&self, page_num: Option<u32>)78     fn remove_page(&self, page_num: Option<u32>);
79 
80     #[doc(alias = "gtk_notebook_reorder_child")]
reorder_child<T: IsA<Widget>>(&self, child: &T, position: Option<u32>)81     fn reorder_child<T: IsA<Widget>>(&self, child: &T, position: Option<u32>);
82 
83     #[doc(alias = "gtk_notebook_set_current_page")]
set_current_page(&self, page_num: Option<u32>)84     fn set_current_page(&self, page_num: Option<u32>);
85 }
86 
87 impl<O: IsA<Notebook>> NotebookExtManual for O {
append_page<T: IsA<Widget>, U: IsA<Widget>>(&self, child: &T, tab_label: Option<&U>) -> u3288     fn append_page<T: IsA<Widget>, U: IsA<Widget>>(&self, child: &T, tab_label: Option<&U>) -> u32 {
89         unsafe {
90             let ret = ffi::gtk_notebook_append_page(
91                 self.as_ref().to_glib_none().0,
92                 child.as_ref().to_glib_none().0,
93                 tab_label.map(|p| p.as_ref()).to_glib_none().0,
94             );
95             assert!(ret >= 0);
96             ret as u32
97         }
98     }
99 
append_page_menu<T, U, V>( &self, child: &T, tab_label: Option<&U>, menu_label: Option<&V>, ) -> u32 where T: IsA<Widget>, U: IsA<Widget>, V: IsA<Widget>,100     fn append_page_menu<T, U, V>(
101         &self,
102         child: &T,
103         tab_label: Option<&U>,
104         menu_label: Option<&V>,
105     ) -> u32
106     where
107         T: IsA<Widget>,
108         U: IsA<Widget>,
109         V: IsA<Widget>,
110     {
111         unsafe {
112             let ret = ffi::gtk_notebook_append_page_menu(
113                 self.as_ref().to_glib_none().0,
114                 child.as_ref().to_glib_none().0,
115                 tab_label.map(|p| p.as_ref()).to_glib_none().0,
116                 menu_label.map(|p| p.as_ref()).to_glib_none().0,
117             );
118             assert!(ret >= 0);
119             ret as u32
120         }
121     }
122 
current_page(&self) -> Option<u32>123     fn current_page(&self) -> Option<u32> {
124         unsafe {
125             let ret = ffi::gtk_notebook_get_current_page(self.as_ref().to_glib_none().0);
126             if ret >= 0 {
127                 Some(ret as u32)
128             } else {
129                 None
130             }
131         }
132     }
133 
n_pages(&self) -> u32134     fn n_pages(&self) -> u32 {
135         unsafe {
136             let ret = ffi::gtk_notebook_get_n_pages(self.as_ref().to_glib_none().0);
137             assert!(ret >= 0);
138             ret as u32
139         }
140     }
141 
nth_page(&self, page_num: Option<u32>) -> Option<Widget>142     fn nth_page(&self, page_num: Option<u32>) -> Option<Widget> {
143         unsafe {
144             from_glib_none(ffi::gtk_notebook_get_nth_page(
145                 self.as_ref().to_glib_none().0,
146                 page_num.map_or(-1, |n| n as c_int),
147             ))
148         }
149     }
150 
insert_page<T, U>(&self, child: &T, tab_label: Option<&U>, position: Option<u32>) -> u32 where T: IsA<Widget>, U: IsA<Widget>,151     fn insert_page<T, U>(&self, child: &T, tab_label: Option<&U>, position: Option<u32>) -> u32
152     where
153         T: IsA<Widget>,
154         U: IsA<Widget>,
155     {
156         unsafe {
157             let ret = ffi::gtk_notebook_insert_page(
158                 self.as_ref().to_glib_none().0,
159                 child.as_ref().to_glib_none().0,
160                 tab_label.map(|p| p.as_ref()).to_glib_none().0,
161                 position.map_or(-1, |n| n as c_int),
162             );
163             assert!(ret >= 0);
164             ret as u32
165         }
166     }
167 
insert_page_menu<T, U, V>( &self, child: &T, tab_label: Option<&U>, menu_label: Option<&V>, position: Option<u32>, ) -> u32 where T: IsA<Widget>, U: IsA<Widget>, V: IsA<Widget>,168     fn insert_page_menu<T, U, V>(
169         &self,
170         child: &T,
171         tab_label: Option<&U>,
172         menu_label: Option<&V>,
173         position: Option<u32>,
174     ) -> u32
175     where
176         T: IsA<Widget>,
177         U: IsA<Widget>,
178         V: IsA<Widget>,
179     {
180         unsafe {
181             let ret = ffi::gtk_notebook_insert_page_menu(
182                 self.as_ref().to_glib_none().0,
183                 child.as_ref().to_glib_none().0,
184                 tab_label.map(|p| p.as_ref()).to_glib_none().0,
185                 menu_label.map(|p| p.as_ref()).to_glib_none().0,
186                 position.map_or(-1, |n| n as c_int),
187             );
188             assert!(ret >= 0);
189             ret as u32
190         }
191     }
192 
page_num<T: IsA<Widget>>(&self, child: &T) -> Option<u32>193     fn page_num<T: IsA<Widget>>(&self, child: &T) -> Option<u32> {
194         unsafe {
195             let ret = ffi::gtk_notebook_page_num(
196                 self.as_ref().to_glib_none().0,
197                 child.as_ref().to_glib_none().0,
198             );
199             if ret >= 0 {
200                 Some(ret as u32)
201             } else {
202                 None
203             }
204         }
205     }
206 
prepend_page<T, U>(&self, child: &T, tab_label: Option<&U>) -> u32 where T: IsA<Widget>, U: IsA<Widget>,207     fn prepend_page<T, U>(&self, child: &T, tab_label: Option<&U>) -> u32
208     where
209         T: IsA<Widget>,
210         U: IsA<Widget>,
211     {
212         unsafe {
213             let ret = ffi::gtk_notebook_prepend_page(
214                 self.as_ref().to_glib_none().0,
215                 child.as_ref().to_glib_none().0,
216                 tab_label.map(|p| p.as_ref()).to_glib_none().0,
217             );
218             assert!(ret >= 0);
219             ret as u32
220         }
221     }
222 
prepend_page_menu<T, U, V>( &self, child: &T, tab_label: Option<&U>, menu_label: Option<&V>, ) -> u32 where T: IsA<Widget>, U: IsA<Widget>, V: IsA<Widget>,223     fn prepend_page_menu<T, U, V>(
224         &self,
225         child: &T,
226         tab_label: Option<&U>,
227         menu_label: Option<&V>,
228     ) -> u32
229     where
230         T: IsA<Widget>,
231         U: IsA<Widget>,
232         V: IsA<Widget>,
233     {
234         unsafe {
235             let ret = ffi::gtk_notebook_prepend_page_menu(
236                 self.as_ref().to_glib_none().0,
237                 child.as_ref().to_glib_none().0,
238                 tab_label.map(|p| p.as_ref()).to_glib_none().0,
239                 menu_label.map(|p| p.as_ref()).to_glib_none().0,
240             );
241             assert!(ret >= 0);
242             ret as u32
243         }
244     }
245 
remove_page(&self, page_num: Option<u32>)246     fn remove_page(&self, page_num: Option<u32>) {
247         unsafe {
248             ffi::gtk_notebook_remove_page(
249                 self.as_ref().to_glib_none().0,
250                 page_num.map_or(-1, |n| n as c_int),
251             );
252         }
253     }
254 
reorder_child<T: IsA<Widget>>(&self, child: &T, position: Option<u32>)255     fn reorder_child<T: IsA<Widget>>(&self, child: &T, position: Option<u32>) {
256         unsafe {
257             ffi::gtk_notebook_reorder_child(
258                 self.as_ref().to_glib_none().0,
259                 child.as_ref().to_glib_none().0,
260                 position.map_or(-1, |n| n as c_int),
261             );
262         }
263     }
264 
set_current_page(&self, page_num: Option<u32>)265     fn set_current_page(&self, page_num: Option<u32>) {
266         unsafe {
267             ffi::gtk_notebook_set_current_page(
268                 self.as_ref().to_glib_none().0,
269                 page_num.map_or(-1, |n| n as c_int),
270             );
271         }
272     }
273 }
274