gtk4/auto/
tree_selection.rs

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#![allow(deprecated)]
5
6use crate::{ffi, SelectionMode, TreeIter, TreeModel, TreePath, TreeView};
7use glib::{
8    object::ObjectType as _,
9    prelude::*,
10    signal::{connect_raw, SignalHandlerId},
11    translate::*,
12};
13use std::boxed::Box as Box_;
14
15glib::wrapper! {
16    #[doc(alias = "GtkTreeSelection")]
17    pub struct TreeSelection(Object<ffi::GtkTreeSelection>);
18
19    match fn {
20        type_ => || ffi::gtk_tree_selection_get_type(),
21    }
22}
23
24impl TreeSelection {
25    #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
26    #[allow(deprecated)]
27    #[doc(alias = "gtk_tree_selection_count_selected_rows")]
28    pub fn count_selected_rows(&self) -> i32 {
29        unsafe { ffi::gtk_tree_selection_count_selected_rows(self.to_glib_none().0) }
30    }
31
32    #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
33    #[allow(deprecated)]
34    #[doc(alias = "gtk_tree_selection_get_mode")]
35    #[doc(alias = "get_mode")]
36    pub fn mode(&self) -> SelectionMode {
37        unsafe { from_glib(ffi::gtk_tree_selection_get_mode(self.to_glib_none().0)) }
38    }
39
40    #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
41    #[allow(deprecated)]
42    #[doc(alias = "gtk_tree_selection_get_selected")]
43    #[doc(alias = "get_selected")]
44    pub fn selected(&self) -> Option<(TreeModel, TreeIter)> {
45        unsafe {
46            let mut model = std::ptr::null_mut();
47            let mut iter = TreeIter::uninitialized();
48            let ret = from_glib(ffi::gtk_tree_selection_get_selected(
49                self.to_glib_none().0,
50                &mut model,
51                iter.to_glib_none_mut().0,
52            ));
53            if ret {
54                Some((from_glib_none(model), iter))
55            } else {
56                None
57            }
58        }
59    }
60
61    #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
62    #[allow(deprecated)]
63    #[doc(alias = "gtk_tree_selection_get_selected_rows")]
64    #[doc(alias = "get_selected_rows")]
65    pub fn selected_rows(&self) -> (Vec<TreePath>, TreeModel) {
66        unsafe {
67            let mut model = std::ptr::null_mut();
68            let ret = FromGlibPtrContainer::from_glib_full(
69                ffi::gtk_tree_selection_get_selected_rows(self.to_glib_none().0, &mut model),
70            );
71            (ret, from_glib_none(model))
72        }
73    }
74
75    #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
76    #[allow(deprecated)]
77    #[doc(alias = "gtk_tree_selection_get_tree_view")]
78    #[doc(alias = "get_tree_view")]
79    pub fn tree_view(&self) -> TreeView {
80        unsafe { from_glib_none(ffi::gtk_tree_selection_get_tree_view(self.to_glib_none().0)) }
81    }
82
83    #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
84    #[allow(deprecated)]
85    #[doc(alias = "gtk_tree_selection_iter_is_selected")]
86    pub fn iter_is_selected(&self, iter: &TreeIter) -> bool {
87        unsafe {
88            from_glib(ffi::gtk_tree_selection_iter_is_selected(
89                self.to_glib_none().0,
90                mut_override(iter.to_glib_none().0),
91            ))
92        }
93    }
94
95    #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
96    #[allow(deprecated)]
97    #[doc(alias = "gtk_tree_selection_path_is_selected")]
98    pub fn path_is_selected(&self, path: &TreePath) -> bool {
99        unsafe {
100            from_glib(ffi::gtk_tree_selection_path_is_selected(
101                self.to_glib_none().0,
102                mut_override(path.to_glib_none().0),
103            ))
104        }
105    }
106
107    #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
108    #[allow(deprecated)]
109    #[doc(alias = "gtk_tree_selection_select_all")]
110    pub fn select_all(&self) {
111        unsafe {
112            ffi::gtk_tree_selection_select_all(self.to_glib_none().0);
113        }
114    }
115
116    #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
117    #[allow(deprecated)]
118    #[doc(alias = "gtk_tree_selection_select_iter")]
119    pub fn select_iter(&self, iter: &TreeIter) {
120        unsafe {
121            ffi::gtk_tree_selection_select_iter(
122                self.to_glib_none().0,
123                mut_override(iter.to_glib_none().0),
124            );
125        }
126    }
127
128    #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
129    #[allow(deprecated)]
130    #[doc(alias = "gtk_tree_selection_select_path")]
131    pub fn select_path(&self, path: &TreePath) {
132        unsafe {
133            ffi::gtk_tree_selection_select_path(
134                self.to_glib_none().0,
135                mut_override(path.to_glib_none().0),
136            );
137        }
138    }
139
140    #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
141    #[allow(deprecated)]
142    #[doc(alias = "gtk_tree_selection_select_range")]
143    pub fn select_range(&self, start_path: &TreePath, end_path: &TreePath) {
144        unsafe {
145            ffi::gtk_tree_selection_select_range(
146                self.to_glib_none().0,
147                mut_override(start_path.to_glib_none().0),
148                mut_override(end_path.to_glib_none().0),
149            );
150        }
151    }
152
153    #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
154    #[allow(deprecated)]
155    #[doc(alias = "gtk_tree_selection_selected_foreach")]
156    pub fn selected_foreach<P: FnMut(&TreeModel, &TreePath, &TreeIter)>(&self, func: P) {
157        let mut func_data: P = func;
158        unsafe extern "C" fn func_func<P: FnMut(&TreeModel, &TreePath, &TreeIter)>(
159            model: *mut ffi::GtkTreeModel,
160            path: *mut ffi::GtkTreePath,
161            iter: *mut ffi::GtkTreeIter,
162            data: glib::ffi::gpointer,
163        ) {
164            let model = from_glib_borrow(model);
165            let path = from_glib_borrow(path);
166            let iter = from_glib_borrow(iter);
167            let callback = data as *mut P;
168            (*callback)(&model, &path, &iter)
169        }
170        let func = Some(func_func::<P> as _);
171        let super_callback0: &mut P = &mut func_data;
172        unsafe {
173            ffi::gtk_tree_selection_selected_foreach(
174                self.to_glib_none().0,
175                func,
176                super_callback0 as *mut _ as *mut _,
177            );
178        }
179    }
180
181    #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
182    #[allow(deprecated)]
183    #[doc(alias = "gtk_tree_selection_set_mode")]
184    #[doc(alias = "mode")]
185    pub fn set_mode(&self, type_: SelectionMode) {
186        unsafe {
187            ffi::gtk_tree_selection_set_mode(self.to_glib_none().0, type_.into_glib());
188        }
189    }
190
191    #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
192    #[allow(deprecated)]
193    #[doc(alias = "gtk_tree_selection_set_select_function")]
194    pub fn set_select_function<
195        P: Fn(&TreeSelection, &TreeModel, &TreePath, bool) -> bool + 'static,
196    >(
197        &self,
198        func: P,
199    ) {
200        let func_data: Box_<P> = Box_::new(func);
201        unsafe extern "C" fn func_func<
202            P: Fn(&TreeSelection, &TreeModel, &TreePath, bool) -> bool + 'static,
203        >(
204            selection: *mut ffi::GtkTreeSelection,
205            model: *mut ffi::GtkTreeModel,
206            path: *mut ffi::GtkTreePath,
207            path_currently_selected: glib::ffi::gboolean,
208            data: glib::ffi::gpointer,
209        ) -> glib::ffi::gboolean {
210            let selection = from_glib_borrow(selection);
211            let model = from_glib_borrow(model);
212            let path = from_glib_borrow(path);
213            let path_currently_selected = from_glib(path_currently_selected);
214            let callback = &*(data as *mut P);
215            (*callback)(&selection, &model, &path, path_currently_selected).into_glib()
216        }
217        let func = Some(func_func::<P> as _);
218        unsafe extern "C" fn destroy_func<
219            P: Fn(&TreeSelection, &TreeModel, &TreePath, bool) -> bool + 'static,
220        >(
221            data: glib::ffi::gpointer,
222        ) {
223            let _callback = Box_::from_raw(data as *mut P);
224        }
225        let destroy_call3 = Some(destroy_func::<P> as _);
226        let super_callback0: Box_<P> = func_data;
227        unsafe {
228            ffi::gtk_tree_selection_set_select_function(
229                self.to_glib_none().0,
230                func,
231                Box_::into_raw(super_callback0) as *mut _,
232                destroy_call3,
233            );
234        }
235    }
236
237    #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
238    #[allow(deprecated)]
239    #[doc(alias = "gtk_tree_selection_unselect_all")]
240    pub fn unselect_all(&self) {
241        unsafe {
242            ffi::gtk_tree_selection_unselect_all(self.to_glib_none().0);
243        }
244    }
245
246    #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
247    #[allow(deprecated)]
248    #[doc(alias = "gtk_tree_selection_unselect_iter")]
249    pub fn unselect_iter(&self, iter: &TreeIter) {
250        unsafe {
251            ffi::gtk_tree_selection_unselect_iter(
252                self.to_glib_none().0,
253                mut_override(iter.to_glib_none().0),
254            );
255        }
256    }
257
258    #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
259    #[allow(deprecated)]
260    #[doc(alias = "gtk_tree_selection_unselect_path")]
261    pub fn unselect_path(&self, path: &TreePath) {
262        unsafe {
263            ffi::gtk_tree_selection_unselect_path(
264                self.to_glib_none().0,
265                mut_override(path.to_glib_none().0),
266            );
267        }
268    }
269
270    #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
271    #[allow(deprecated)]
272    #[doc(alias = "gtk_tree_selection_unselect_range")]
273    pub fn unselect_range(&self, start_path: &TreePath, end_path: &TreePath) {
274        unsafe {
275            ffi::gtk_tree_selection_unselect_range(
276                self.to_glib_none().0,
277                mut_override(start_path.to_glib_none().0),
278                mut_override(end_path.to_glib_none().0),
279            );
280        }
281    }
282
283    #[doc(alias = "changed")]
284    pub fn connect_changed<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
285        unsafe extern "C" fn changed_trampoline<F: Fn(&TreeSelection) + 'static>(
286            this: *mut ffi::GtkTreeSelection,
287            f: glib::ffi::gpointer,
288        ) {
289            let f: &F = &*(f as *const F);
290            f(&from_glib_borrow(this))
291        }
292        unsafe {
293            let f: Box_<F> = Box_::new(f);
294            connect_raw(
295                self.as_ptr() as *mut _,
296                b"changed\0".as_ptr() as *const _,
297                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
298                    changed_trampoline::<F> as *const (),
299                )),
300                Box_::into_raw(f),
301            )
302        }
303    }
304
305    #[doc(alias = "mode")]
306    pub fn connect_mode_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
307        unsafe extern "C" fn notify_mode_trampoline<F: Fn(&TreeSelection) + 'static>(
308            this: *mut ffi::GtkTreeSelection,
309            _param_spec: glib::ffi::gpointer,
310            f: glib::ffi::gpointer,
311        ) {
312            let f: &F = &*(f as *const F);
313            f(&from_glib_borrow(this))
314        }
315        unsafe {
316            let f: Box_<F> = Box_::new(f);
317            connect_raw(
318                self.as_ptr() as *mut _,
319                b"notify::mode\0".as_ptr() as *const _,
320                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
321                    notify_mode_trampoline::<F> as *const (),
322                )),
323                Box_::into_raw(f),
324            )
325        }
326    }
327}