1use glib;
6use glib::object::IsA;
7use glib::translate::*;
8use glib::GString;
9use gtk_sys;
10use std::fmt;
11use StateFlags;
12use Widget;
13
14glib_wrapper! {
15 #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
16 pub struct WidgetPath(Shared<gtk_sys::GtkWidgetPath>);
17
18 match fn {
19 ref => |ptr| gtk_sys::gtk_widget_path_ref(ptr),
20 unref => |ptr| gtk_sys::gtk_widget_path_unref(ptr),
21 get_type => || gtk_sys::gtk_widget_path_get_type(),
22 }
23}
24
25impl WidgetPath {
26 pub fn new() -> WidgetPath {
27 assert_initialized_main_thread!();
28 unsafe { from_glib_full(gtk_sys::gtk_widget_path_new()) }
29 }
30
31 pub fn append_for_widget<P: IsA<Widget>>(&self, widget: &P) -> i32 {
32 unsafe {
33 gtk_sys::gtk_widget_path_append_for_widget(
34 self.to_glib_none().0,
35 widget.as_ref().to_glib_none().0,
36 )
37 }
38 }
39
40 pub fn append_type(&self, type_: glib::types::Type) -> i32 {
41 unsafe { gtk_sys::gtk_widget_path_append_type(self.to_glib_none().0, type_.to_glib()) }
42 }
43
44 pub fn append_with_siblings(&self, siblings: &WidgetPath, sibling_index: u32) -> i32 {
45 unsafe {
46 gtk_sys::gtk_widget_path_append_with_siblings(
47 self.to_glib_none().0,
48 siblings.to_glib_none().0,
49 sibling_index,
50 )
51 }
52 }
53
54 pub fn copy(&self) -> Option<WidgetPath> {
55 unsafe { from_glib_full(gtk_sys::gtk_widget_path_copy(self.to_glib_none().0)) }
56 }
57
58 pub fn get_object_type(&self) -> glib::types::Type {
59 unsafe {
60 from_glib(gtk_sys::gtk_widget_path_get_object_type(
61 self.to_glib_none().0,
62 ))
63 }
64 }
65
66 pub fn has_parent(&self, type_: glib::types::Type) -> bool {
67 unsafe {
68 from_glib(gtk_sys::gtk_widget_path_has_parent(
69 self.to_glib_none().0,
70 type_.to_glib(),
71 ))
72 }
73 }
74
75 pub fn is_type(&self, type_: glib::types::Type) -> bool {
76 unsafe {
77 from_glib(gtk_sys::gtk_widget_path_is_type(
78 self.to_glib_none().0,
79 type_.to_glib(),
80 ))
81 }
82 }
83
84 pub fn iter_add_class(&self, pos: i32, name: &str) {
85 unsafe {
86 gtk_sys::gtk_widget_path_iter_add_class(
87 self.to_glib_none().0,
88 pos,
89 name.to_glib_none().0,
90 );
91 }
92 }
93
94 pub fn iter_clear_classes(&self, pos: i32) {
95 unsafe {
96 gtk_sys::gtk_widget_path_iter_clear_classes(self.to_glib_none().0, pos);
97 }
98 }
99
100 pub fn iter_get_name(&self, pos: i32) -> Option<GString> {
101 unsafe {
102 from_glib_none(gtk_sys::gtk_widget_path_iter_get_name(
103 self.to_glib_none().0,
104 pos,
105 ))
106 }
107 }
108
109 #[cfg(any(feature = "v3_20", feature = "dox"))]
110 pub fn iter_get_object_name(&self, pos: i32) -> Option<GString> {
111 unsafe {
112 from_glib_none(gtk_sys::gtk_widget_path_iter_get_object_name(
113 self.to_glib_none().0,
114 pos,
115 ))
116 }
117 }
118
119 pub fn iter_get_object_type(&self, pos: i32) -> glib::types::Type {
120 unsafe {
121 from_glib(gtk_sys::gtk_widget_path_iter_get_object_type(
122 self.to_glib_none().0,
123 pos,
124 ))
125 }
126 }
127
128 pub fn iter_get_sibling_index(&self, pos: i32) -> u32 {
129 unsafe { gtk_sys::gtk_widget_path_iter_get_sibling_index(self.to_glib_none().0, pos) }
130 }
131
132 pub fn iter_get_siblings(&self, pos: i32) -> Option<WidgetPath> {
133 unsafe {
134 from_glib_none(gtk_sys::gtk_widget_path_iter_get_siblings(
135 self.to_glib_none().0,
136 pos,
137 ))
138 }
139 }
140
141 pub fn iter_get_state(&self, pos: i32) -> StateFlags {
142 unsafe {
143 from_glib(gtk_sys::gtk_widget_path_iter_get_state(
144 self.to_glib_none().0,
145 pos,
146 ))
147 }
148 }
149
150 pub fn iter_has_class(&self, pos: i32, name: &str) -> bool {
151 unsafe {
152 from_glib(gtk_sys::gtk_widget_path_iter_has_class(
153 self.to_glib_none().0,
154 pos,
155 name.to_glib_none().0,
156 ))
157 }
158 }
159
160 pub fn iter_has_name(&self, pos: i32, name: &str) -> bool {
161 unsafe {
162 from_glib(gtk_sys::gtk_widget_path_iter_has_name(
163 self.to_glib_none().0,
164 pos,
165 name.to_glib_none().0,
166 ))
167 }
168 }
169
170 pub fn iter_has_qclass(&self, pos: i32, qname: glib::Quark) -> bool {
171 unsafe {
172 from_glib(gtk_sys::gtk_widget_path_iter_has_qclass(
173 self.to_glib_none().0,
174 pos,
175 qname.to_glib(),
176 ))
177 }
178 }
179
180 pub fn iter_has_qname(&self, pos: i32, qname: glib::Quark) -> bool {
181 unsafe {
182 from_glib(gtk_sys::gtk_widget_path_iter_has_qname(
183 self.to_glib_none().0,
184 pos,
185 qname.to_glib(),
186 ))
187 }
188 }
189
190 pub fn iter_list_classes(&self, pos: i32) -> Vec<GString> {
191 unsafe {
192 FromGlibPtrContainer::from_glib_container(gtk_sys::gtk_widget_path_iter_list_classes(
193 self.to_glib_none().0,
194 pos,
195 ))
196 }
197 }
198
199 pub fn iter_remove_class(&self, pos: i32, name: &str) {
200 unsafe {
201 gtk_sys::gtk_widget_path_iter_remove_class(
202 self.to_glib_none().0,
203 pos,
204 name.to_glib_none().0,
205 );
206 }
207 }
208
209 pub fn iter_set_name(&self, pos: i32, name: &str) {
210 unsafe {
211 gtk_sys::gtk_widget_path_iter_set_name(
212 self.to_glib_none().0,
213 pos,
214 name.to_glib_none().0,
215 );
216 }
217 }
218
219 #[cfg(any(feature = "v3_20", feature = "dox"))]
220 pub fn iter_set_object_name(&self, pos: i32, name: Option<&str>) {
221 unsafe {
222 gtk_sys::gtk_widget_path_iter_set_object_name(
223 self.to_glib_none().0,
224 pos,
225 name.to_glib_none().0,
226 );
227 }
228 }
229
230 pub fn iter_set_object_type(&self, pos: i32, type_: glib::types::Type) {
231 unsafe {
232 gtk_sys::gtk_widget_path_iter_set_object_type(
233 self.to_glib_none().0,
234 pos,
235 type_.to_glib(),
236 );
237 }
238 }
239
240 pub fn iter_set_state(&self, pos: i32, state: StateFlags) {
241 unsafe {
242 gtk_sys::gtk_widget_path_iter_set_state(self.to_glib_none().0, pos, state.to_glib());
243 }
244 }
245
246 pub fn length(&self) -> i32 {
247 unsafe { gtk_sys::gtk_widget_path_length(self.to_glib_none().0) }
248 }
249
250 pub fn prepend_type(&self, type_: glib::types::Type) {
251 unsafe {
252 gtk_sys::gtk_widget_path_prepend_type(self.to_glib_none().0, type_.to_glib());
253 }
254 }
255
256 fn to_string(&self) -> GString {
257 unsafe { from_glib_full(gtk_sys::gtk_widget_path_to_string(self.to_glib_none().0)) }
258 }
259}
260
261impl Default for WidgetPath {
262 fn default() -> Self {
263 Self::new()
264 }
265}
266
267impl fmt::Display for WidgetPath {
268 #[inline]
269 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
270 write!(f, "{}", self.to_string())
271 }
272}