1use glib::object::IsA;
6use glib::translate::*;
7use gtk_sys;
8use std::fmt;
9use Buildable;
10use TreeDragDest;
11use TreeDragSource;
12use TreeIter;
13use TreeModel;
14use TreeSortable;
15
16glib_wrapper! {
17 pub struct TreeStore(Object<gtk_sys::GtkTreeStore, gtk_sys::GtkTreeStoreClass, TreeStoreClass>) @implements Buildable, TreeDragDest, TreeDragSource, TreeModel, TreeSortable;
18
19 match fn {
20 get_type => || gtk_sys::gtk_tree_store_get_type(),
21 }
22}
23
24impl TreeStore {
25 }
33
34pub const NONE_TREE_STORE: Option<&TreeStore> = None;
35
36pub trait TreeStoreExt: 'static {
37 fn append(&self, parent: Option<&TreeIter>) -> TreeIter;
38
39 fn clear(&self);
40
41 fn insert(&self, parent: Option<&TreeIter>, position: i32) -> TreeIter;
42
43 fn insert_after(&self, parent: Option<&TreeIter>, sibling: Option<&TreeIter>) -> TreeIter;
44
45 fn insert_before(&self, parent: Option<&TreeIter>, sibling: Option<&TreeIter>) -> TreeIter;
46
47 fn is_ancestor(&self, iter: &TreeIter, descendant: &TreeIter) -> bool;
52
53 fn iter_depth(&self, iter: &TreeIter) -> i32;
54
55 fn iter_is_valid(&self, iter: &TreeIter) -> bool;
56
57 fn move_after(&self, iter: &TreeIter, position: Option<&TreeIter>);
58
59 fn move_before(&self, iter: &TreeIter, position: Option<&TreeIter>);
60
61 fn prepend(&self, parent: Option<&TreeIter>) -> TreeIter;
62
63 fn remove(&self, iter: &TreeIter) -> bool;
64
65 fn swap(&self, a: &TreeIter, b: &TreeIter);
76}
77
78impl<O: IsA<TreeStore>> TreeStoreExt for O {
79 fn append(&self, parent: Option<&TreeIter>) -> TreeIter {
80 unsafe {
81 let mut iter = TreeIter::uninitialized();
82 gtk_sys::gtk_tree_store_append(
83 self.as_ref().to_glib_none().0,
84 iter.to_glib_none_mut().0,
85 mut_override(parent.to_glib_none().0),
86 );
87 iter
88 }
89 }
90
91 fn clear(&self) {
92 unsafe {
93 gtk_sys::gtk_tree_store_clear(self.as_ref().to_glib_none().0);
94 }
95 }
96
97 fn insert(&self, parent: Option<&TreeIter>, position: i32) -> TreeIter {
98 unsafe {
99 let mut iter = TreeIter::uninitialized();
100 gtk_sys::gtk_tree_store_insert(
101 self.as_ref().to_glib_none().0,
102 iter.to_glib_none_mut().0,
103 mut_override(parent.to_glib_none().0),
104 position,
105 );
106 iter
107 }
108 }
109
110 fn insert_after(&self, parent: Option<&TreeIter>, sibling: Option<&TreeIter>) -> TreeIter {
111 unsafe {
112 let mut iter = TreeIter::uninitialized();
113 gtk_sys::gtk_tree_store_insert_after(
114 self.as_ref().to_glib_none().0,
115 iter.to_glib_none_mut().0,
116 mut_override(parent.to_glib_none().0),
117 mut_override(sibling.to_glib_none().0),
118 );
119 iter
120 }
121 }
122
123 fn insert_before(&self, parent: Option<&TreeIter>, sibling: Option<&TreeIter>) -> TreeIter {
124 unsafe {
125 let mut iter = TreeIter::uninitialized();
126 gtk_sys::gtk_tree_store_insert_before(
127 self.as_ref().to_glib_none().0,
128 iter.to_glib_none_mut().0,
129 mut_override(parent.to_glib_none().0),
130 mut_override(sibling.to_glib_none().0),
131 );
132 iter
133 }
134 }
135
136 fn is_ancestor(&self, iter: &TreeIter, descendant: &TreeIter) -> bool {
145 unsafe {
146 from_glib(gtk_sys::gtk_tree_store_is_ancestor(
147 self.as_ref().to_glib_none().0,
148 mut_override(iter.to_glib_none().0),
149 mut_override(descendant.to_glib_none().0),
150 ))
151 }
152 }
153
154 fn iter_depth(&self, iter: &TreeIter) -> i32 {
155 unsafe {
156 gtk_sys::gtk_tree_store_iter_depth(
157 self.as_ref().to_glib_none().0,
158 mut_override(iter.to_glib_none().0),
159 )
160 }
161 }
162
163 fn iter_is_valid(&self, iter: &TreeIter) -> bool {
164 unsafe {
165 from_glib(gtk_sys::gtk_tree_store_iter_is_valid(
166 self.as_ref().to_glib_none().0,
167 mut_override(iter.to_glib_none().0),
168 ))
169 }
170 }
171
172 fn move_after(&self, iter: &TreeIter, position: Option<&TreeIter>) {
173 unsafe {
174 gtk_sys::gtk_tree_store_move_after(
175 self.as_ref().to_glib_none().0,
176 mut_override(iter.to_glib_none().0),
177 mut_override(position.to_glib_none().0),
178 );
179 }
180 }
181
182 fn move_before(&self, iter: &TreeIter, position: Option<&TreeIter>) {
183 unsafe {
184 gtk_sys::gtk_tree_store_move_before(
185 self.as_ref().to_glib_none().0,
186 mut_override(iter.to_glib_none().0),
187 mut_override(position.to_glib_none().0),
188 );
189 }
190 }
191
192 fn prepend(&self, parent: Option<&TreeIter>) -> TreeIter {
193 unsafe {
194 let mut iter = TreeIter::uninitialized();
195 gtk_sys::gtk_tree_store_prepend(
196 self.as_ref().to_glib_none().0,
197 iter.to_glib_none_mut().0,
198 mut_override(parent.to_glib_none().0),
199 );
200 iter
201 }
202 }
203
204 fn remove(&self, iter: &TreeIter) -> bool {
205 unsafe {
206 from_glib(gtk_sys::gtk_tree_store_remove(
207 self.as_ref().to_glib_none().0,
208 mut_override(iter.to_glib_none().0),
209 ))
210 }
211 }
212
213 fn swap(&self, a: &TreeIter, b: &TreeIter) {
234 unsafe {
235 gtk_sys::gtk_tree_store_swap(
236 self.as_ref().to_glib_none().0,
237 mut_override(a.to_glib_none().0),
238 mut_override(b.to_glib_none().0),
239 );
240 }
241 }
242}
243
244impl fmt::Display for TreeStore {
245 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
246 write!(f, "TreeStore")
247 }
248}