gtk/auto/
tree_model_sort.rs1use glib::object::IsA;
6use glib::translate::*;
7use gtk_sys;
8use std::fmt;
9use TreeDragSource;
10use TreeIter;
11use TreeModel;
12use TreePath;
13use TreeSortable;
14
15glib_wrapper! {
16 pub struct TreeModelSort(Object<gtk_sys::GtkTreeModelSort, gtk_sys::GtkTreeModelSortClass, TreeModelSortClass>) @implements TreeDragSource, TreeModel, TreeSortable;
17
18 match fn {
19 get_type => || gtk_sys::gtk_tree_model_sort_get_type(),
20 }
21}
22
23pub const NONE_TREE_MODEL_SORT: Option<&TreeModelSort> = None;
24
25pub trait TreeModelSortExt: 'static {
26 fn clear_cache(&self);
27
28 fn convert_child_iter_to_iter(&self, child_iter: &TreeIter) -> Option<TreeIter>;
29
30 fn convert_child_path_to_path(&self, child_path: &TreePath) -> Option<TreePath>;
31
32 fn convert_iter_to_child_iter(&self, sorted_iter: &TreeIter) -> TreeIter;
33
34 fn convert_path_to_child_path(&self, sorted_path: &TreePath) -> Option<TreePath>;
35
36 fn get_model(&self) -> TreeModel;
37
38 fn iter_is_valid(&self, iter: &TreeIter) -> bool;
39
40 fn reset_default_sort_func(&self);
41}
42
43impl<O: IsA<TreeModelSort>> TreeModelSortExt for O {
44 fn clear_cache(&self) {
45 unsafe {
46 gtk_sys::gtk_tree_model_sort_clear_cache(self.as_ref().to_glib_none().0);
47 }
48 }
49
50 fn convert_child_iter_to_iter(&self, child_iter: &TreeIter) -> Option<TreeIter> {
51 unsafe {
52 let mut sort_iter = TreeIter::uninitialized();
53 let ret = from_glib(gtk_sys::gtk_tree_model_sort_convert_child_iter_to_iter(
54 self.as_ref().to_glib_none().0,
55 sort_iter.to_glib_none_mut().0,
56 mut_override(child_iter.to_glib_none().0),
57 ));
58 if ret {
59 Some(sort_iter)
60 } else {
61 None
62 }
63 }
64 }
65
66 fn convert_child_path_to_path(&self, child_path: &TreePath) -> Option<TreePath> {
67 unsafe {
68 from_glib_full(gtk_sys::gtk_tree_model_sort_convert_child_path_to_path(
69 self.as_ref().to_glib_none().0,
70 mut_override(child_path.to_glib_none().0),
71 ))
72 }
73 }
74
75 fn convert_iter_to_child_iter(&self, sorted_iter: &TreeIter) -> TreeIter {
76 unsafe {
77 let mut child_iter = TreeIter::uninitialized();
78 gtk_sys::gtk_tree_model_sort_convert_iter_to_child_iter(
79 self.as_ref().to_glib_none().0,
80 child_iter.to_glib_none_mut().0,
81 mut_override(sorted_iter.to_glib_none().0),
82 );
83 child_iter
84 }
85 }
86
87 fn convert_path_to_child_path(&self, sorted_path: &TreePath) -> Option<TreePath> {
88 unsafe {
89 from_glib_full(gtk_sys::gtk_tree_model_sort_convert_path_to_child_path(
90 self.as_ref().to_glib_none().0,
91 mut_override(sorted_path.to_glib_none().0),
92 ))
93 }
94 }
95
96 fn get_model(&self) -> TreeModel {
97 unsafe {
98 from_glib_none(gtk_sys::gtk_tree_model_sort_get_model(
99 self.as_ref().to_glib_none().0,
100 ))
101 }
102 }
103
104 fn iter_is_valid(&self, iter: &TreeIter) -> bool {
105 unsafe {
106 from_glib(gtk_sys::gtk_tree_model_sort_iter_is_valid(
107 self.as_ref().to_glib_none().0,
108 mut_override(iter.to_glib_none().0),
109 ))
110 }
111 }
112
113 fn reset_default_sort_func(&self) {
114 unsafe {
115 gtk_sys::gtk_tree_model_sort_reset_default_sort_func(self.as_ref().to_glib_none().0);
116 }
117 }
118}
119
120impl fmt::Display for TreeModelSort {
121 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
122 write!(f, "TreeModelSort")
123 }
124}