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::SelectionMode;
6 use crate::TreeIter;
7 use crate::TreeModel;
8 use crate::TreePath;
9 use crate::TreeView;
10 use glib::object::Cast;
11 use glib::object::IsA;
12 use glib::signal::connect_raw;
13 use glib::signal::SignalHandlerId;
14 use glib::translate::*;
15 use std::boxed::Box as Box_;
16 use std::fmt;
17 use std::mem::transmute;
18 use std::ptr;
19 
20 glib::wrapper! {
21     #[doc(alias = "GtkTreeSelection")]
22     pub struct TreeSelection(Object<ffi::GtkTreeSelection, ffi::GtkTreeSelectionClass>);
23 
24     match fn {
25         type_ => || ffi::gtk_tree_selection_get_type(),
26     }
27 }
28 
29 pub const NONE_TREE_SELECTION: Option<&TreeSelection> = None;
30 
31 pub trait TreeSelectionExt: 'static {
32     #[doc(alias = "gtk_tree_selection_count_selected_rows")]
count_selected_rows(&self) -> i3233     fn count_selected_rows(&self) -> i32;
34 
35     #[doc(alias = "gtk_tree_selection_get_mode")]
36     #[doc(alias = "get_mode")]
mode(&self) -> SelectionMode37     fn mode(&self) -> SelectionMode;
38 
39     //#[doc(alias = "gtk_tree_selection_get_select_function")]
40     //#[doc(alias = "get_select_function")]
41     //fn select_function(&self) -> Option<Box_<dyn Fn(&TreeSelection, &TreeModel, &TreePath, bool) -> bool + 'static>>;
42 
43     #[doc(alias = "gtk_tree_selection_get_selected")]
44     #[doc(alias = "get_selected")]
selected(&self) -> Option<(TreeModel, TreeIter)>45     fn selected(&self) -> Option<(TreeModel, TreeIter)>;
46 
47     #[doc(alias = "gtk_tree_selection_get_selected_rows")]
48     #[doc(alias = "get_selected_rows")]
selected_rows(&self) -> (Vec<TreePath>, TreeModel)49     fn selected_rows(&self) -> (Vec<TreePath>, TreeModel);
50 
51     #[doc(alias = "gtk_tree_selection_get_tree_view")]
52     #[doc(alias = "get_tree_view")]
tree_view(&self) -> Option<TreeView>53     fn tree_view(&self) -> Option<TreeView>;
54 
55     //#[doc(alias = "gtk_tree_selection_get_user_data")]
56     //#[doc(alias = "get_user_data")]
57     //fn user_data(&self) -> /*Unimplemented*/Option<Fundamental: Pointer>;
58 
59     #[doc(alias = "gtk_tree_selection_iter_is_selected")]
iter_is_selected(&self, iter: &TreeIter) -> bool60     fn iter_is_selected(&self, iter: &TreeIter) -> bool;
61 
62     #[doc(alias = "gtk_tree_selection_path_is_selected")]
path_is_selected(&self, path: &TreePath) -> bool63     fn path_is_selected(&self, path: &TreePath) -> bool;
64 
65     #[doc(alias = "gtk_tree_selection_select_all")]
select_all(&self)66     fn select_all(&self);
67 
68     #[doc(alias = "gtk_tree_selection_select_iter")]
select_iter(&self, iter: &TreeIter)69     fn select_iter(&self, iter: &TreeIter);
70 
71     #[doc(alias = "gtk_tree_selection_select_path")]
select_path(&self, path: &TreePath)72     fn select_path(&self, path: &TreePath);
73 
74     #[doc(alias = "gtk_tree_selection_select_range")]
select_range(&self, start_path: &TreePath, end_path: &TreePath)75     fn select_range(&self, start_path: &TreePath, end_path: &TreePath);
76 
77     #[doc(alias = "gtk_tree_selection_selected_foreach")]
selected_foreach<P: FnMut(&TreeModel, &TreePath, &TreeIter)>(&self, func: P)78     fn selected_foreach<P: FnMut(&TreeModel, &TreePath, &TreeIter)>(&self, func: P);
79 
80     #[doc(alias = "gtk_tree_selection_set_mode")]
set_mode(&self, type_: SelectionMode)81     fn set_mode(&self, type_: SelectionMode);
82 
83     #[doc(alias = "gtk_tree_selection_set_select_function")]
set_select_function( &self, func: Option<Box_<dyn Fn(&TreeSelection, &TreeModel, &TreePath, bool) -> bool + 'static>>, )84     fn set_select_function(
85         &self,
86         func: Option<Box_<dyn Fn(&TreeSelection, &TreeModel, &TreePath, bool) -> bool + 'static>>,
87     );
88 
89     #[doc(alias = "gtk_tree_selection_unselect_all")]
unselect_all(&self)90     fn unselect_all(&self);
91 
92     #[doc(alias = "gtk_tree_selection_unselect_iter")]
unselect_iter(&self, iter: &TreeIter)93     fn unselect_iter(&self, iter: &TreeIter);
94 
95     #[doc(alias = "gtk_tree_selection_unselect_path")]
unselect_path(&self, path: &TreePath)96     fn unselect_path(&self, path: &TreePath);
97 
98     #[doc(alias = "gtk_tree_selection_unselect_range")]
unselect_range(&self, start_path: &TreePath, end_path: &TreePath)99     fn unselect_range(&self, start_path: &TreePath, end_path: &TreePath);
100 
101     #[doc(alias = "changed")]
connect_changed<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId102     fn connect_changed<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
103 
104     #[doc(alias = "mode")]
connect_mode_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId105     fn connect_mode_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
106 }
107 
108 impl<O: IsA<TreeSelection>> TreeSelectionExt for O {
count_selected_rows(&self) -> i32109     fn count_selected_rows(&self) -> i32 {
110         unsafe { ffi::gtk_tree_selection_count_selected_rows(self.as_ref().to_glib_none().0) }
111     }
112 
mode(&self) -> SelectionMode113     fn mode(&self) -> SelectionMode {
114         unsafe {
115             from_glib(ffi::gtk_tree_selection_get_mode(
116                 self.as_ref().to_glib_none().0,
117             ))
118         }
119     }
120 
121     //fn select_function(&self) -> Option<Box_<dyn Fn(&TreeSelection, &TreeModel, &TreePath, bool) -> bool + 'static>> {
122     //    unsafe { TODO: call ffi:gtk_tree_selection_get_select_function() }
123     //}
124 
selected(&self) -> Option<(TreeModel, TreeIter)>125     fn selected(&self) -> Option<(TreeModel, TreeIter)> {
126         unsafe {
127             let mut model = ptr::null_mut();
128             let mut iter = TreeIter::uninitialized();
129             let ret = from_glib(ffi::gtk_tree_selection_get_selected(
130                 self.as_ref().to_glib_none().0,
131                 &mut model,
132                 iter.to_glib_none_mut().0,
133             ));
134             if ret {
135                 Some((from_glib_none(model), iter))
136             } else {
137                 None
138             }
139         }
140     }
141 
selected_rows(&self) -> (Vec<TreePath>, TreeModel)142     fn selected_rows(&self) -> (Vec<TreePath>, TreeModel) {
143         unsafe {
144             let mut model = ptr::null_mut();
145             let ret =
146                 FromGlibPtrContainer::from_glib_full(ffi::gtk_tree_selection_get_selected_rows(
147                     self.as_ref().to_glib_none().0,
148                     &mut model,
149                 ));
150             (ret, from_glib_none(model))
151         }
152     }
153 
tree_view(&self) -> Option<TreeView>154     fn tree_view(&self) -> Option<TreeView> {
155         unsafe {
156             from_glib_none(ffi::gtk_tree_selection_get_tree_view(
157                 self.as_ref().to_glib_none().0,
158             ))
159         }
160     }
161 
162     //fn user_data(&self) -> /*Unimplemented*/Option<Fundamental: Pointer> {
163     //    unsafe { TODO: call ffi:gtk_tree_selection_get_user_data() }
164     //}
165 
iter_is_selected(&self, iter: &TreeIter) -> bool166     fn iter_is_selected(&self, iter: &TreeIter) -> bool {
167         unsafe {
168             from_glib(ffi::gtk_tree_selection_iter_is_selected(
169                 self.as_ref().to_glib_none().0,
170                 mut_override(iter.to_glib_none().0),
171             ))
172         }
173     }
174 
path_is_selected(&self, path: &TreePath) -> bool175     fn path_is_selected(&self, path: &TreePath) -> bool {
176         unsafe {
177             from_glib(ffi::gtk_tree_selection_path_is_selected(
178                 self.as_ref().to_glib_none().0,
179                 mut_override(path.to_glib_none().0),
180             ))
181         }
182     }
183 
select_all(&self)184     fn select_all(&self) {
185         unsafe {
186             ffi::gtk_tree_selection_select_all(self.as_ref().to_glib_none().0);
187         }
188     }
189 
select_iter(&self, iter: &TreeIter)190     fn select_iter(&self, iter: &TreeIter) {
191         unsafe {
192             ffi::gtk_tree_selection_select_iter(
193                 self.as_ref().to_glib_none().0,
194                 mut_override(iter.to_glib_none().0),
195             );
196         }
197     }
198 
select_path(&self, path: &TreePath)199     fn select_path(&self, path: &TreePath) {
200         unsafe {
201             ffi::gtk_tree_selection_select_path(
202                 self.as_ref().to_glib_none().0,
203                 mut_override(path.to_glib_none().0),
204             );
205         }
206     }
207 
select_range(&self, start_path: &TreePath, end_path: &TreePath)208     fn select_range(&self, start_path: &TreePath, end_path: &TreePath) {
209         unsafe {
210             ffi::gtk_tree_selection_select_range(
211                 self.as_ref().to_glib_none().0,
212                 mut_override(start_path.to_glib_none().0),
213                 mut_override(end_path.to_glib_none().0),
214             );
215         }
216     }
217 
selected_foreach<P: FnMut(&TreeModel, &TreePath, &TreeIter)>(&self, func: P)218     fn selected_foreach<P: FnMut(&TreeModel, &TreePath, &TreeIter)>(&self, func: P) {
219         let func_data: P = func;
220         unsafe extern "C" fn func_func<P: FnMut(&TreeModel, &TreePath, &TreeIter)>(
221             model: *mut ffi::GtkTreeModel,
222             path: *mut ffi::GtkTreePath,
223             iter: *mut ffi::GtkTreeIter,
224             data: glib::ffi::gpointer,
225         ) {
226             let model = from_glib_borrow(model);
227             let path = from_glib_borrow(path);
228             let iter = from_glib_borrow(iter);
229             let callback: *mut P = data as *const _ as usize as *mut P;
230             (*callback)(&model, &path, &iter);
231         }
232         let func = Some(func_func::<P> as _);
233         let super_callback0: &P = &func_data;
234         unsafe {
235             ffi::gtk_tree_selection_selected_foreach(
236                 self.as_ref().to_glib_none().0,
237                 func,
238                 super_callback0 as *const _ as usize as *mut _,
239             );
240         }
241     }
242 
set_mode(&self, type_: SelectionMode)243     fn set_mode(&self, type_: SelectionMode) {
244         unsafe {
245             ffi::gtk_tree_selection_set_mode(self.as_ref().to_glib_none().0, type_.into_glib());
246         }
247     }
248 
set_select_function( &self, func: Option<Box_<dyn Fn(&TreeSelection, &TreeModel, &TreePath, bool) -> bool + 'static>>, )249     fn set_select_function(
250         &self,
251         func: Option<Box_<dyn Fn(&TreeSelection, &TreeModel, &TreePath, bool) -> bool + 'static>>,
252     ) {
253         let func_data: Box_<
254             Option<Box_<dyn Fn(&TreeSelection, &TreeModel, &TreePath, bool) -> bool + 'static>>,
255         > = Box_::new(func);
256         unsafe extern "C" fn func_func(
257             selection: *mut ffi::GtkTreeSelection,
258             model: *mut ffi::GtkTreeModel,
259             path: *mut ffi::GtkTreePath,
260             path_currently_selected: glib::ffi::gboolean,
261             data: glib::ffi::gpointer,
262         ) -> glib::ffi::gboolean {
263             let selection = from_glib_borrow(selection);
264             let model = from_glib_borrow(model);
265             let path = from_glib_borrow(path);
266             let path_currently_selected = from_glib(path_currently_selected);
267             let callback: &Option<
268                 Box_<dyn Fn(&TreeSelection, &TreeModel, &TreePath, bool) -> bool + 'static>,
269             > = &*(data as *mut _);
270             let res = if let Some(ref callback) = *callback {
271                 callback(&selection, &model, &path, path_currently_selected)
272             } else {
273                 panic!("cannot get closure...")
274             };
275             res.into_glib()
276         }
277         let func = if func_data.is_some() {
278             Some(func_func as _)
279         } else {
280             None
281         };
282         unsafe extern "C" fn destroy_func(data: glib::ffi::gpointer) {
283             let _callback: Box_<
284                 Option<Box_<dyn Fn(&TreeSelection, &TreeModel, &TreePath, bool) -> bool + 'static>>,
285             > = Box_::from_raw(data as *mut _);
286         }
287         let destroy_call3 = Some(destroy_func as _);
288         let super_callback0: Box_<
289             Option<Box_<dyn Fn(&TreeSelection, &TreeModel, &TreePath, bool) -> bool + 'static>>,
290         > = func_data;
291         unsafe {
292             ffi::gtk_tree_selection_set_select_function(
293                 self.as_ref().to_glib_none().0,
294                 func,
295                 Box_::into_raw(super_callback0) as *mut _,
296                 destroy_call3,
297             );
298         }
299     }
300 
unselect_all(&self)301     fn unselect_all(&self) {
302         unsafe {
303             ffi::gtk_tree_selection_unselect_all(self.as_ref().to_glib_none().0);
304         }
305     }
306 
unselect_iter(&self, iter: &TreeIter)307     fn unselect_iter(&self, iter: &TreeIter) {
308         unsafe {
309             ffi::gtk_tree_selection_unselect_iter(
310                 self.as_ref().to_glib_none().0,
311                 mut_override(iter.to_glib_none().0),
312             );
313         }
314     }
315 
unselect_path(&self, path: &TreePath)316     fn unselect_path(&self, path: &TreePath) {
317         unsafe {
318             ffi::gtk_tree_selection_unselect_path(
319                 self.as_ref().to_glib_none().0,
320                 mut_override(path.to_glib_none().0),
321             );
322         }
323     }
324 
unselect_range(&self, start_path: &TreePath, end_path: &TreePath)325     fn unselect_range(&self, start_path: &TreePath, end_path: &TreePath) {
326         unsafe {
327             ffi::gtk_tree_selection_unselect_range(
328                 self.as_ref().to_glib_none().0,
329                 mut_override(start_path.to_glib_none().0),
330                 mut_override(end_path.to_glib_none().0),
331             );
332         }
333     }
334 
connect_changed<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId335     fn connect_changed<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
336         unsafe extern "C" fn changed_trampoline<P: IsA<TreeSelection>, F: Fn(&P) + 'static>(
337             this: *mut ffi::GtkTreeSelection,
338             f: glib::ffi::gpointer,
339         ) {
340             let f: &F = &*(f as *const F);
341             f(TreeSelection::from_glib_borrow(this).unsafe_cast_ref())
342         }
343         unsafe {
344             let f: Box_<F> = Box_::new(f);
345             connect_raw(
346                 self.as_ptr() as *mut _,
347                 b"changed\0".as_ptr() as *const _,
348                 Some(transmute::<_, unsafe extern "C" fn()>(
349                     changed_trampoline::<Self, F> as *const (),
350                 )),
351                 Box_::into_raw(f),
352             )
353         }
354     }
355 
connect_mode_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId356     fn connect_mode_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
357         unsafe extern "C" fn notify_mode_trampoline<P: IsA<TreeSelection>, F: Fn(&P) + 'static>(
358             this: *mut ffi::GtkTreeSelection,
359             _param_spec: glib::ffi::gpointer,
360             f: glib::ffi::gpointer,
361         ) {
362             let f: &F = &*(f as *const F);
363             f(TreeSelection::from_glib_borrow(this).unsafe_cast_ref())
364         }
365         unsafe {
366             let f: Box_<F> = Box_::new(f);
367             connect_raw(
368                 self.as_ptr() as *mut _,
369                 b"notify::mode\0".as_ptr() as *const _,
370                 Some(transmute::<_, unsafe extern "C" fn()>(
371                     notify_mode_trampoline::<Self, F> as *const (),
372                 )),
373                 Box_::into_raw(f),
374             )
375         }
376     }
377 }
378 
379 impl fmt::Display for TreeSelection {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result380     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
381         f.write_str("TreeSelection")
382     }
383 }
384