1#![allow(deprecated)]
5
6use crate::{ffi, TreeIter, TreeModelFlags, TreePath};
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 = "GtkTreeModel")]
17 pub struct TreeModel(Interface<ffi::GtkTreeModel, ffi::GtkTreeModelIface>);
18
19 match fn {
20 type_ => || ffi::gtk_tree_model_get_type(),
21 }
22}
23
24impl TreeModel {
25 pub const NONE: Option<&'static TreeModel> = None;
26}
27
28pub trait TreeModelExt: IsA<TreeModel> + 'static {
29 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
30 #[allow(deprecated)]
31 #[doc(alias = "gtk_tree_model_foreach")]
32 fn foreach<P: FnMut(&TreeModel, &TreePath, &TreeIter) -> bool>(&self, func: P) {
33 let mut func_data: P = func;
34 unsafe extern "C" fn func_func<P: FnMut(&TreeModel, &TreePath, &TreeIter) -> bool>(
35 model: *mut ffi::GtkTreeModel,
36 path: *mut ffi::GtkTreePath,
37 iter: *mut ffi::GtkTreeIter,
38 data: glib::ffi::gpointer,
39 ) -> glib::ffi::gboolean {
40 let model = from_glib_borrow(model);
41 let path = from_glib_borrow(path);
42 let iter = from_glib_borrow(iter);
43 let callback = data as *mut P;
44 (*callback)(&model, &path, &iter).into_glib()
45 }
46 let func = Some(func_func::<P> as _);
47 let super_callback0: &mut P = &mut func_data;
48 unsafe {
49 ffi::gtk_tree_model_foreach(
50 self.as_ref().to_glib_none().0,
51 func,
52 super_callback0 as *mut _ as *mut _,
53 );
54 }
55 }
56
57 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
58 #[allow(deprecated)]
59 #[doc(alias = "gtk_tree_model_get_column_type")]
60 #[doc(alias = "get_column_type")]
61 fn column_type(&self, index_: i32) -> glib::types::Type {
62 unsafe {
63 from_glib(ffi::gtk_tree_model_get_column_type(
64 self.as_ref().to_glib_none().0,
65 index_,
66 ))
67 }
68 }
69
70 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
71 #[allow(deprecated)]
72 #[doc(alias = "gtk_tree_model_get_flags")]
73 #[doc(alias = "get_flags")]
74 fn flags(&self) -> TreeModelFlags {
75 unsafe {
76 from_glib(ffi::gtk_tree_model_get_flags(
77 self.as_ref().to_glib_none().0,
78 ))
79 }
80 }
81
82 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
83 #[allow(deprecated)]
84 #[doc(alias = "gtk_tree_model_get_iter")]
85 #[doc(alias = "get_iter")]
86 fn iter(&self, path: &TreePath) -> Option<TreeIter> {
87 unsafe {
88 let mut iter = TreeIter::uninitialized();
89 let ret = from_glib(ffi::gtk_tree_model_get_iter(
90 self.as_ref().to_glib_none().0,
91 iter.to_glib_none_mut().0,
92 mut_override(path.to_glib_none().0),
93 ));
94 if ret {
95 Some(iter)
96 } else {
97 None
98 }
99 }
100 }
101
102 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
103 #[allow(deprecated)]
104 #[doc(alias = "gtk_tree_model_get_iter_first")]
105 #[doc(alias = "get_iter_first")]
106 fn iter_first(&self) -> Option<TreeIter> {
107 unsafe {
108 let mut iter = TreeIter::uninitialized();
109 let ret = from_glib(ffi::gtk_tree_model_get_iter_first(
110 self.as_ref().to_glib_none().0,
111 iter.to_glib_none_mut().0,
112 ));
113 if ret {
114 Some(iter)
115 } else {
116 None
117 }
118 }
119 }
120
121 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
122 #[allow(deprecated)]
123 #[doc(alias = "gtk_tree_model_get_iter_from_string")]
124 #[doc(alias = "get_iter_from_string")]
125 fn iter_from_string(&self, path_string: &str) -> Option<TreeIter> {
126 unsafe {
127 let mut iter = TreeIter::uninitialized();
128 let ret = from_glib(ffi::gtk_tree_model_get_iter_from_string(
129 self.as_ref().to_glib_none().0,
130 iter.to_glib_none_mut().0,
131 path_string.to_glib_none().0,
132 ));
133 if ret {
134 Some(iter)
135 } else {
136 None
137 }
138 }
139 }
140
141 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
142 #[allow(deprecated)]
143 #[doc(alias = "gtk_tree_model_get_n_columns")]
144 #[doc(alias = "get_n_columns")]
145 fn n_columns(&self) -> i32 {
146 unsafe { ffi::gtk_tree_model_get_n_columns(self.as_ref().to_glib_none().0) }
147 }
148
149 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
150 #[allow(deprecated)]
151 #[doc(alias = "gtk_tree_model_get_path")]
152 #[doc(alias = "get_path")]
153 fn path(&self, iter: &TreeIter) -> TreePath {
154 unsafe {
155 from_glib_full(ffi::gtk_tree_model_get_path(
156 self.as_ref().to_glib_none().0,
157 mut_override(iter.to_glib_none().0),
158 ))
159 }
160 }
161
162 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
163 #[allow(deprecated)]
164 #[doc(alias = "gtk_tree_model_get_string_from_iter")]
165 #[doc(alias = "get_string_from_iter")]
166 fn string_from_iter(&self, iter: &TreeIter) -> Option<glib::GString> {
167 unsafe {
168 from_glib_full(ffi::gtk_tree_model_get_string_from_iter(
169 self.as_ref().to_glib_none().0,
170 mut_override(iter.to_glib_none().0),
171 ))
172 }
173 }
174
175 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
176 #[allow(deprecated)]
177 #[doc(alias = "gtk_tree_model_iter_children")]
178 fn iter_children(&self, parent: Option<&TreeIter>) -> Option<TreeIter> {
179 unsafe {
180 let mut iter = TreeIter::uninitialized();
181 let ret = from_glib(ffi::gtk_tree_model_iter_children(
182 self.as_ref().to_glib_none().0,
183 iter.to_glib_none_mut().0,
184 mut_override(parent.to_glib_none().0),
185 ));
186 if ret {
187 Some(iter)
188 } else {
189 None
190 }
191 }
192 }
193
194 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
195 #[allow(deprecated)]
196 #[doc(alias = "gtk_tree_model_iter_has_child")]
197 fn iter_has_child(&self, iter: &TreeIter) -> bool {
198 unsafe {
199 from_glib(ffi::gtk_tree_model_iter_has_child(
200 self.as_ref().to_glib_none().0,
201 mut_override(iter.to_glib_none().0),
202 ))
203 }
204 }
205
206 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
207 #[allow(deprecated)]
208 #[doc(alias = "gtk_tree_model_iter_n_children")]
209 fn iter_n_children(&self, iter: Option<&TreeIter>) -> i32 {
210 unsafe {
211 ffi::gtk_tree_model_iter_n_children(
212 self.as_ref().to_glib_none().0,
213 mut_override(iter.to_glib_none().0),
214 )
215 }
216 }
217
218 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
219 #[allow(deprecated)]
220 #[doc(alias = "gtk_tree_model_iter_next")]
221 fn iter_next(&self, iter: &TreeIter) -> bool {
222 unsafe {
223 from_glib(ffi::gtk_tree_model_iter_next(
224 self.as_ref().to_glib_none().0,
225 mut_override(iter.to_glib_none().0),
226 ))
227 }
228 }
229
230 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
231 #[allow(deprecated)]
232 #[doc(alias = "gtk_tree_model_iter_nth_child")]
233 fn iter_nth_child(&self, parent: Option<&TreeIter>, n: i32) -> Option<TreeIter> {
234 unsafe {
235 let mut iter = TreeIter::uninitialized();
236 let ret = from_glib(ffi::gtk_tree_model_iter_nth_child(
237 self.as_ref().to_glib_none().0,
238 iter.to_glib_none_mut().0,
239 mut_override(parent.to_glib_none().0),
240 n,
241 ));
242 if ret {
243 Some(iter)
244 } else {
245 None
246 }
247 }
248 }
249
250 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
251 #[allow(deprecated)]
252 #[doc(alias = "gtk_tree_model_iter_parent")]
253 fn iter_parent(&self, child: &TreeIter) -> Option<TreeIter> {
254 unsafe {
255 let mut iter = TreeIter::uninitialized();
256 let ret = from_glib(ffi::gtk_tree_model_iter_parent(
257 self.as_ref().to_glib_none().0,
258 iter.to_glib_none_mut().0,
259 mut_override(child.to_glib_none().0),
260 ));
261 if ret {
262 Some(iter)
263 } else {
264 None
265 }
266 }
267 }
268
269 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
270 #[allow(deprecated)]
271 #[doc(alias = "gtk_tree_model_iter_previous")]
272 fn iter_previous(&self, iter: &TreeIter) -> bool {
273 unsafe {
274 from_glib(ffi::gtk_tree_model_iter_previous(
275 self.as_ref().to_glib_none().0,
276 mut_override(iter.to_glib_none().0),
277 ))
278 }
279 }
280
281 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
282 #[allow(deprecated)]
283 #[doc(alias = "gtk_tree_model_row_changed")]
284 fn row_changed(&self, path: &TreePath, iter: &TreeIter) {
285 unsafe {
286 ffi::gtk_tree_model_row_changed(
287 self.as_ref().to_glib_none().0,
288 mut_override(path.to_glib_none().0),
289 mut_override(iter.to_glib_none().0),
290 );
291 }
292 }
293
294 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
295 #[allow(deprecated)]
296 #[doc(alias = "gtk_tree_model_row_deleted")]
297 fn row_deleted(&self, path: &TreePath) {
298 unsafe {
299 ffi::gtk_tree_model_row_deleted(
300 self.as_ref().to_glib_none().0,
301 mut_override(path.to_glib_none().0),
302 );
303 }
304 }
305
306 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
307 #[allow(deprecated)]
308 #[doc(alias = "gtk_tree_model_row_has_child_toggled")]
309 fn row_has_child_toggled(&self, path: &TreePath, iter: &TreeIter) {
310 unsafe {
311 ffi::gtk_tree_model_row_has_child_toggled(
312 self.as_ref().to_glib_none().0,
313 mut_override(path.to_glib_none().0),
314 mut_override(iter.to_glib_none().0),
315 );
316 }
317 }
318
319 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
320 #[allow(deprecated)]
321 #[doc(alias = "gtk_tree_model_row_inserted")]
322 fn row_inserted(&self, path: &TreePath, iter: &TreeIter) {
323 unsafe {
324 ffi::gtk_tree_model_row_inserted(
325 self.as_ref().to_glib_none().0,
326 mut_override(path.to_glib_none().0),
327 mut_override(iter.to_glib_none().0),
328 );
329 }
330 }
331
332 #[doc(alias = "row-changed")]
333 fn connect_row_changed<F: Fn(&Self, &TreePath, &TreeIter) + 'static>(
334 &self,
335 f: F,
336 ) -> SignalHandlerId {
337 unsafe extern "C" fn row_changed_trampoline<
338 P: IsA<TreeModel>,
339 F: Fn(&P, &TreePath, &TreeIter) + 'static,
340 >(
341 this: *mut ffi::GtkTreeModel,
342 path: *mut ffi::GtkTreePath,
343 iter: *mut ffi::GtkTreeIter,
344 f: glib::ffi::gpointer,
345 ) {
346 let f: &F = &*(f as *const F);
347 f(
348 TreeModel::from_glib_borrow(this).unsafe_cast_ref(),
349 &from_glib_borrow(path),
350 &from_glib_borrow(iter),
351 )
352 }
353 unsafe {
354 let f: Box_<F> = Box_::new(f);
355 connect_raw(
356 self.as_ptr() as *mut _,
357 c"row-changed".as_ptr() as *const _,
358 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
359 row_changed_trampoline::<Self, F> as *const (),
360 )),
361 Box_::into_raw(f),
362 )
363 }
364 }
365
366 #[doc(alias = "row-deleted")]
367 fn connect_row_deleted<F: Fn(&Self, &TreePath) + 'static>(&self, f: F) -> SignalHandlerId {
368 unsafe extern "C" fn row_deleted_trampoline<
369 P: IsA<TreeModel>,
370 F: Fn(&P, &TreePath) + 'static,
371 >(
372 this: *mut ffi::GtkTreeModel,
373 path: *mut ffi::GtkTreePath,
374 f: glib::ffi::gpointer,
375 ) {
376 let f: &F = &*(f as *const F);
377 f(
378 TreeModel::from_glib_borrow(this).unsafe_cast_ref(),
379 &from_glib_borrow(path),
380 )
381 }
382 unsafe {
383 let f: Box_<F> = Box_::new(f);
384 connect_raw(
385 self.as_ptr() as *mut _,
386 c"row-deleted".as_ptr() as *const _,
387 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
388 row_deleted_trampoline::<Self, F> as *const (),
389 )),
390 Box_::into_raw(f),
391 )
392 }
393 }
394
395 #[doc(alias = "row-has-child-toggled")]
396 fn connect_row_has_child_toggled<F: Fn(&Self, &TreePath, &TreeIter) + 'static>(
397 &self,
398 f: F,
399 ) -> SignalHandlerId {
400 unsafe extern "C" fn row_has_child_toggled_trampoline<
401 P: IsA<TreeModel>,
402 F: Fn(&P, &TreePath, &TreeIter) + 'static,
403 >(
404 this: *mut ffi::GtkTreeModel,
405 path: *mut ffi::GtkTreePath,
406 iter: *mut ffi::GtkTreeIter,
407 f: glib::ffi::gpointer,
408 ) {
409 let f: &F = &*(f as *const F);
410 f(
411 TreeModel::from_glib_borrow(this).unsafe_cast_ref(),
412 &from_glib_borrow(path),
413 &from_glib_borrow(iter),
414 )
415 }
416 unsafe {
417 let f: Box_<F> = Box_::new(f);
418 connect_raw(
419 self.as_ptr() as *mut _,
420 c"row-has-child-toggled".as_ptr() as *const _,
421 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
422 row_has_child_toggled_trampoline::<Self, F> as *const (),
423 )),
424 Box_::into_raw(f),
425 )
426 }
427 }
428
429 #[doc(alias = "row-inserted")]
430 fn connect_row_inserted<F: Fn(&Self, &TreePath, &TreeIter) + 'static>(
431 &self,
432 f: F,
433 ) -> SignalHandlerId {
434 unsafe extern "C" fn row_inserted_trampoline<
435 P: IsA<TreeModel>,
436 F: Fn(&P, &TreePath, &TreeIter) + 'static,
437 >(
438 this: *mut ffi::GtkTreeModel,
439 path: *mut ffi::GtkTreePath,
440 iter: *mut ffi::GtkTreeIter,
441 f: glib::ffi::gpointer,
442 ) {
443 let f: &F = &*(f as *const F);
444 f(
445 TreeModel::from_glib_borrow(this).unsafe_cast_ref(),
446 &from_glib_borrow(path),
447 &from_glib_borrow(iter),
448 )
449 }
450 unsafe {
451 let f: Box_<F> = Box_::new(f);
452 connect_raw(
453 self.as_ptr() as *mut _,
454 c"row-inserted".as_ptr() as *const _,
455 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
456 row_inserted_trampoline::<Self, F> as *const (),
457 )),
458 Box_::into_raw(f),
459 )
460 }
461 }
462
463 }
468
469impl<O: IsA<TreeModel>> TreeModelExt for O {}