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 ListStore(Object<gtk_sys::GtkListStore, gtk_sys::GtkListStoreClass, ListStoreClass>) @implements Buildable, TreeDragDest, TreeDragSource, TreeModel, TreeSortable;
18
19 match fn {
20 get_type => || gtk_sys::gtk_list_store_get_type(),
21 }
22}
23
24impl ListStore {
25 }
33
34pub const NONE_LIST_STORE: Option<&ListStore> = None;
35
36pub trait GtkListStoreExt: 'static {
37 fn append(&self) -> TreeIter;
38
39 fn clear(&self);
40
41 fn insert(&self, position: i32) -> TreeIter;
42
43 fn insert_after(&self, sibling: Option<&TreeIter>) -> TreeIter;
44
45 fn insert_before(&self, sibling: Option<&TreeIter>) -> TreeIter;
46
47 fn iter_is_valid(&self, iter: &TreeIter) -> bool;
52
53 fn move_after(&self, iter: &TreeIter, position: Option<&TreeIter>);
54
55 fn move_before(&self, iter: &TreeIter, position: Option<&TreeIter>);
56
57 fn prepend(&self) -> TreeIter;
58
59 fn remove(&self, iter: &TreeIter) -> bool;
60
61 fn swap(&self, a: &TreeIter, b: &TreeIter);
72}
73
74impl<O: IsA<ListStore>> GtkListStoreExt for O {
75 fn append(&self) -> TreeIter {
76 unsafe {
77 let mut iter = TreeIter::uninitialized();
78 gtk_sys::gtk_list_store_append(
79 self.as_ref().to_glib_none().0,
80 iter.to_glib_none_mut().0,
81 );
82 iter
83 }
84 }
85
86 fn clear(&self) {
87 unsafe {
88 gtk_sys::gtk_list_store_clear(self.as_ref().to_glib_none().0);
89 }
90 }
91
92 fn insert(&self, position: i32) -> TreeIter {
93 unsafe {
94 let mut iter = TreeIter::uninitialized();
95 gtk_sys::gtk_list_store_insert(
96 self.as_ref().to_glib_none().0,
97 iter.to_glib_none_mut().0,
98 position,
99 );
100 iter
101 }
102 }
103
104 fn insert_after(&self, sibling: Option<&TreeIter>) -> TreeIter {
105 unsafe {
106 let mut iter = TreeIter::uninitialized();
107 gtk_sys::gtk_list_store_insert_after(
108 self.as_ref().to_glib_none().0,
109 iter.to_glib_none_mut().0,
110 mut_override(sibling.to_glib_none().0),
111 );
112 iter
113 }
114 }
115
116 fn insert_before(&self, sibling: Option<&TreeIter>) -> TreeIter {
117 unsafe {
118 let mut iter = TreeIter::uninitialized();
119 gtk_sys::gtk_list_store_insert_before(
120 self.as_ref().to_glib_none().0,
121 iter.to_glib_none_mut().0,
122 mut_override(sibling.to_glib_none().0),
123 );
124 iter
125 }
126 }
127
128 fn iter_is_valid(&self, iter: &TreeIter) -> bool {
137 unsafe {
138 from_glib(gtk_sys::gtk_list_store_iter_is_valid(
139 self.as_ref().to_glib_none().0,
140 mut_override(iter.to_glib_none().0),
141 ))
142 }
143 }
144
145 fn move_after(&self, iter: &TreeIter, position: Option<&TreeIter>) {
146 unsafe {
147 gtk_sys::gtk_list_store_move_after(
148 self.as_ref().to_glib_none().0,
149 mut_override(iter.to_glib_none().0),
150 mut_override(position.to_glib_none().0),
151 );
152 }
153 }
154
155 fn move_before(&self, iter: &TreeIter, position: Option<&TreeIter>) {
156 unsafe {
157 gtk_sys::gtk_list_store_move_before(
158 self.as_ref().to_glib_none().0,
159 mut_override(iter.to_glib_none().0),
160 mut_override(position.to_glib_none().0),
161 );
162 }
163 }
164
165 fn prepend(&self) -> TreeIter {
166 unsafe {
167 let mut iter = TreeIter::uninitialized();
168 gtk_sys::gtk_list_store_prepend(
169 self.as_ref().to_glib_none().0,
170 iter.to_glib_none_mut().0,
171 );
172 iter
173 }
174 }
175
176 fn remove(&self, iter: &TreeIter) -> bool {
177 unsafe {
178 from_glib(gtk_sys::gtk_list_store_remove(
179 self.as_ref().to_glib_none().0,
180 mut_override(iter.to_glib_none().0),
181 ))
182 }
183 }
184
185 fn swap(&self, a: &TreeIter, b: &TreeIter) {
206 unsafe {
207 gtk_sys::gtk_list_store_swap(
208 self.as_ref().to_glib_none().0,
209 mut_override(a.to_glib_none().0),
210 mut_override(b.to_glib_none().0),
211 );
212 }
213 }
214}
215
216impl fmt::Display for ListStore {
217 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
218 write!(f, "ListStore")
219 }
220}