1#![allow(deprecated)]
5
6use crate::{ffi, FileChooserAction, FileFilter};
7use glib::{
8 prelude::*,
9 signal::{connect_raw, SignalHandlerId},
10 translate::*,
11};
12use std::boxed::Box as Box_;
13
14glib::wrapper! {
15 #[doc(alias = "GtkFileChooser")]
16 pub struct FileChooser(Interface<ffi::GtkFileChooser>);
17
18 match fn {
19 type_ => || ffi::gtk_file_chooser_get_type(),
20 }
21}
22
23impl FileChooser {
24 pub const NONE: Option<&'static FileChooser> = None;
25}
26
27mod sealed {
28 pub trait Sealed {}
29 impl<T: super::IsA<super::FileChooser>> Sealed for T {}
30}
31
32pub trait FileChooserExt: IsA<FileChooser> + sealed::Sealed + 'static {
33 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
34 #[allow(deprecated)]
35 #[doc(alias = "gtk_file_chooser_add_filter")]
36 fn add_filter(&self, filter: &FileFilter) {
37 unsafe {
38 ffi::gtk_file_chooser_add_filter(
39 self.as_ref().to_glib_none().0,
40 filter.to_glib_none().0,
41 );
42 }
43 }
44
45 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
46 #[allow(deprecated)]
47 #[doc(alias = "gtk_file_chooser_add_shortcut_folder")]
48 fn add_shortcut_folder(&self, folder: &impl IsA<gio::File>) -> Result<(), glib::Error> {
49 unsafe {
50 let mut error = std::ptr::null_mut();
51 let is_ok = ffi::gtk_file_chooser_add_shortcut_folder(
52 self.as_ref().to_glib_none().0,
53 folder.as_ref().to_glib_none().0,
54 &mut error,
55 );
56 debug_assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
57 if error.is_null() {
58 Ok(())
59 } else {
60 Err(from_glib_full(error))
61 }
62 }
63 }
64
65 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
66 #[allow(deprecated)]
67 #[doc(alias = "gtk_file_chooser_get_action")]
68 #[doc(alias = "get_action")]
69 fn action(&self) -> FileChooserAction {
70 unsafe {
71 from_glib(ffi::gtk_file_chooser_get_action(
72 self.as_ref().to_glib_none().0,
73 ))
74 }
75 }
76
77 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
78 #[allow(deprecated)]
79 #[doc(alias = "gtk_file_chooser_get_choice")]
80 #[doc(alias = "get_choice")]
81 fn choice(&self, id: &str) -> Option<glib::GString> {
82 unsafe {
83 from_glib_none(ffi::gtk_file_chooser_get_choice(
84 self.as_ref().to_glib_none().0,
85 id.to_glib_none().0,
86 ))
87 }
88 }
89
90 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
91 #[allow(deprecated)]
92 #[doc(alias = "gtk_file_chooser_get_create_folders")]
93 #[doc(alias = "get_create_folders")]
94 #[doc(alias = "create-folders")]
95 fn creates_folders(&self) -> bool {
96 unsafe {
97 from_glib(ffi::gtk_file_chooser_get_create_folders(
98 self.as_ref().to_glib_none().0,
99 ))
100 }
101 }
102
103 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
104 #[allow(deprecated)]
105 #[doc(alias = "gtk_file_chooser_get_current_folder")]
106 #[doc(alias = "get_current_folder")]
107 fn current_folder(&self) -> Option<gio::File> {
108 unsafe {
109 from_glib_full(ffi::gtk_file_chooser_get_current_folder(
110 self.as_ref().to_glib_none().0,
111 ))
112 }
113 }
114
115 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
116 #[allow(deprecated)]
117 #[doc(alias = "gtk_file_chooser_get_current_name")]
118 #[doc(alias = "get_current_name")]
119 fn current_name(&self) -> Option<glib::GString> {
120 unsafe {
121 from_glib_full(ffi::gtk_file_chooser_get_current_name(
122 self.as_ref().to_glib_none().0,
123 ))
124 }
125 }
126
127 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
128 #[allow(deprecated)]
129 #[doc(alias = "gtk_file_chooser_get_file")]
130 #[doc(alias = "get_file")]
131 fn file(&self) -> Option<gio::File> {
132 unsafe {
133 from_glib_full(ffi::gtk_file_chooser_get_file(
134 self.as_ref().to_glib_none().0,
135 ))
136 }
137 }
138
139 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
140 #[allow(deprecated)]
141 #[doc(alias = "gtk_file_chooser_get_files")]
142 #[doc(alias = "get_files")]
143 fn files(&self) -> gio::ListModel {
144 unsafe {
145 from_glib_full(ffi::gtk_file_chooser_get_files(
146 self.as_ref().to_glib_none().0,
147 ))
148 }
149 }
150
151 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
152 #[allow(deprecated)]
153 #[doc(alias = "gtk_file_chooser_get_filter")]
154 #[doc(alias = "get_filter")]
155 fn filter(&self) -> Option<FileFilter> {
156 unsafe {
157 from_glib_none(ffi::gtk_file_chooser_get_filter(
158 self.as_ref().to_glib_none().0,
159 ))
160 }
161 }
162
163 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
164 #[allow(deprecated)]
165 #[doc(alias = "gtk_file_chooser_get_filters")]
166 #[doc(alias = "get_filters")]
167 fn filters(&self) -> gio::ListModel {
168 unsafe {
169 from_glib_full(ffi::gtk_file_chooser_get_filters(
170 self.as_ref().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_file_chooser_get_select_multiple")]
178 #[doc(alias = "get_select_multiple")]
179 #[doc(alias = "select-multiple")]
180 fn selects_multiple(&self) -> bool {
181 unsafe {
182 from_glib(ffi::gtk_file_chooser_get_select_multiple(
183 self.as_ref().to_glib_none().0,
184 ))
185 }
186 }
187
188 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
189 #[allow(deprecated)]
190 #[doc(alias = "gtk_file_chooser_get_shortcut_folders")]
191 #[doc(alias = "get_shortcut_folders")]
192 #[doc(alias = "shortcut-folders")]
193 fn shortcut_folders(&self) -> gio::ListModel {
194 unsafe {
195 from_glib_full(ffi::gtk_file_chooser_get_shortcut_folders(
196 self.as_ref().to_glib_none().0,
197 ))
198 }
199 }
200
201 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
202 #[allow(deprecated)]
203 #[doc(alias = "gtk_file_chooser_remove_choice")]
204 fn remove_choice(&self, id: &str) {
205 unsafe {
206 ffi::gtk_file_chooser_remove_choice(
207 self.as_ref().to_glib_none().0,
208 id.to_glib_none().0,
209 );
210 }
211 }
212
213 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
214 #[allow(deprecated)]
215 #[doc(alias = "gtk_file_chooser_remove_filter")]
216 fn remove_filter(&self, filter: &FileFilter) {
217 unsafe {
218 ffi::gtk_file_chooser_remove_filter(
219 self.as_ref().to_glib_none().0,
220 filter.to_glib_none().0,
221 );
222 }
223 }
224
225 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
226 #[allow(deprecated)]
227 #[doc(alias = "gtk_file_chooser_remove_shortcut_folder")]
228 fn remove_shortcut_folder(&self, folder: &impl IsA<gio::File>) -> Result<(), glib::Error> {
229 unsafe {
230 let mut error = std::ptr::null_mut();
231 let is_ok = ffi::gtk_file_chooser_remove_shortcut_folder(
232 self.as_ref().to_glib_none().0,
233 folder.as_ref().to_glib_none().0,
234 &mut error,
235 );
236 debug_assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
237 if error.is_null() {
238 Ok(())
239 } else {
240 Err(from_glib_full(error))
241 }
242 }
243 }
244
245 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
246 #[allow(deprecated)]
247 #[doc(alias = "gtk_file_chooser_set_action")]
248 #[doc(alias = "action")]
249 fn set_action(&self, action: FileChooserAction) {
250 unsafe {
251 ffi::gtk_file_chooser_set_action(self.as_ref().to_glib_none().0, action.into_glib());
252 }
253 }
254
255 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
256 #[allow(deprecated)]
257 #[doc(alias = "gtk_file_chooser_set_choice")]
258 fn set_choice(&self, id: &str, option: &str) {
259 unsafe {
260 ffi::gtk_file_chooser_set_choice(
261 self.as_ref().to_glib_none().0,
262 id.to_glib_none().0,
263 option.to_glib_none().0,
264 );
265 }
266 }
267
268 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
269 #[allow(deprecated)]
270 #[doc(alias = "gtk_file_chooser_set_create_folders")]
271 #[doc(alias = "create-folders")]
272 fn set_create_folders(&self, create_folders: bool) {
273 unsafe {
274 ffi::gtk_file_chooser_set_create_folders(
275 self.as_ref().to_glib_none().0,
276 create_folders.into_glib(),
277 );
278 }
279 }
280
281 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
282 #[allow(deprecated)]
283 #[doc(alias = "gtk_file_chooser_set_current_name")]
284 fn set_current_name(&self, name: &str) {
285 unsafe {
286 ffi::gtk_file_chooser_set_current_name(
287 self.as_ref().to_glib_none().0,
288 name.to_glib_none().0,
289 );
290 }
291 }
292
293 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
294 #[allow(deprecated)]
295 #[doc(alias = "gtk_file_chooser_set_file")]
296 fn set_file(&self, file: &impl IsA<gio::File>) -> Result<(), glib::Error> {
297 unsafe {
298 let mut error = std::ptr::null_mut();
299 let is_ok = ffi::gtk_file_chooser_set_file(
300 self.as_ref().to_glib_none().0,
301 file.as_ref().to_glib_none().0,
302 &mut error,
303 );
304 debug_assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
305 if error.is_null() {
306 Ok(())
307 } else {
308 Err(from_glib_full(error))
309 }
310 }
311 }
312
313 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
314 #[allow(deprecated)]
315 #[doc(alias = "gtk_file_chooser_set_filter")]
316 #[doc(alias = "filter")]
317 fn set_filter(&self, filter: &FileFilter) {
318 unsafe {
319 ffi::gtk_file_chooser_set_filter(
320 self.as_ref().to_glib_none().0,
321 filter.to_glib_none().0,
322 );
323 }
324 }
325
326 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
327 #[allow(deprecated)]
328 #[doc(alias = "gtk_file_chooser_set_select_multiple")]
329 #[doc(alias = "select-multiple")]
330 fn set_select_multiple(&self, select_multiple: bool) {
331 unsafe {
332 ffi::gtk_file_chooser_set_select_multiple(
333 self.as_ref().to_glib_none().0,
334 select_multiple.into_glib(),
335 );
336 }
337 }
338
339 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
340 #[doc(alias = "action")]
341 fn connect_action_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
342 unsafe extern "C" fn notify_action_trampoline<P: IsA<FileChooser>, F: Fn(&P) + 'static>(
343 this: *mut ffi::GtkFileChooser,
344 _param_spec: glib::ffi::gpointer,
345 f: glib::ffi::gpointer,
346 ) {
347 let f: &F = &*(f as *const F);
348 f(FileChooser::from_glib_borrow(this).unsafe_cast_ref())
349 }
350 unsafe {
351 let f: Box_<F> = Box_::new(f);
352 connect_raw(
353 self.as_ptr() as *mut _,
354 b"notify::action\0".as_ptr() as *const _,
355 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
356 notify_action_trampoline::<Self, F> as *const (),
357 )),
358 Box_::into_raw(f),
359 )
360 }
361 }
362
363 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
364 #[doc(alias = "create-folders")]
365 fn connect_create_folders_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
366 unsafe extern "C" fn notify_create_folders_trampoline<
367 P: IsA<FileChooser>,
368 F: Fn(&P) + 'static,
369 >(
370 this: *mut ffi::GtkFileChooser,
371 _param_spec: glib::ffi::gpointer,
372 f: glib::ffi::gpointer,
373 ) {
374 let f: &F = &*(f as *const F);
375 f(FileChooser::from_glib_borrow(this).unsafe_cast_ref())
376 }
377 unsafe {
378 let f: Box_<F> = Box_::new(f);
379 connect_raw(
380 self.as_ptr() as *mut _,
381 b"notify::create-folders\0".as_ptr() as *const _,
382 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
383 notify_create_folders_trampoline::<Self, F> as *const (),
384 )),
385 Box_::into_raw(f),
386 )
387 }
388 }
389
390 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
391 #[doc(alias = "filter")]
392 fn connect_filter_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
393 unsafe extern "C" fn notify_filter_trampoline<P: IsA<FileChooser>, F: Fn(&P) + 'static>(
394 this: *mut ffi::GtkFileChooser,
395 _param_spec: glib::ffi::gpointer,
396 f: glib::ffi::gpointer,
397 ) {
398 let f: &F = &*(f as *const F);
399 f(FileChooser::from_glib_borrow(this).unsafe_cast_ref())
400 }
401 unsafe {
402 let f: Box_<F> = Box_::new(f);
403 connect_raw(
404 self.as_ptr() as *mut _,
405 b"notify::filter\0".as_ptr() as *const _,
406 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
407 notify_filter_trampoline::<Self, F> as *const (),
408 )),
409 Box_::into_raw(f),
410 )
411 }
412 }
413
414 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
415 #[doc(alias = "filters")]
416 fn connect_filters_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
417 unsafe extern "C" fn notify_filters_trampoline<P: IsA<FileChooser>, F: Fn(&P) + 'static>(
418 this: *mut ffi::GtkFileChooser,
419 _param_spec: glib::ffi::gpointer,
420 f: glib::ffi::gpointer,
421 ) {
422 let f: &F = &*(f as *const F);
423 f(FileChooser::from_glib_borrow(this).unsafe_cast_ref())
424 }
425 unsafe {
426 let f: Box_<F> = Box_::new(f);
427 connect_raw(
428 self.as_ptr() as *mut _,
429 b"notify::filters\0".as_ptr() as *const _,
430 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
431 notify_filters_trampoline::<Self, F> as *const (),
432 )),
433 Box_::into_raw(f),
434 )
435 }
436 }
437
438 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
439 #[doc(alias = "select-multiple")]
440 fn connect_select_multiple_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
441 unsafe extern "C" fn notify_select_multiple_trampoline<
442 P: IsA<FileChooser>,
443 F: Fn(&P) + 'static,
444 >(
445 this: *mut ffi::GtkFileChooser,
446 _param_spec: glib::ffi::gpointer,
447 f: glib::ffi::gpointer,
448 ) {
449 let f: &F = &*(f as *const F);
450 f(FileChooser::from_glib_borrow(this).unsafe_cast_ref())
451 }
452 unsafe {
453 let f: Box_<F> = Box_::new(f);
454 connect_raw(
455 self.as_ptr() as *mut _,
456 b"notify::select-multiple\0".as_ptr() as *const _,
457 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
458 notify_select_multiple_trampoline::<Self, F> as *const (),
459 )),
460 Box_::into_raw(f),
461 )
462 }
463 }
464
465 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
466 #[doc(alias = "shortcut-folders")]
467 fn connect_shortcut_folders_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
468 unsafe extern "C" fn notify_shortcut_folders_trampoline<
469 P: IsA<FileChooser>,
470 F: Fn(&P) + 'static,
471 >(
472 this: *mut ffi::GtkFileChooser,
473 _param_spec: glib::ffi::gpointer,
474 f: glib::ffi::gpointer,
475 ) {
476 let f: &F = &*(f as *const F);
477 f(FileChooser::from_glib_borrow(this).unsafe_cast_ref())
478 }
479 unsafe {
480 let f: Box_<F> = Box_::new(f);
481 connect_raw(
482 self.as_ptr() as *mut _,
483 b"notify::shortcut-folders\0".as_ptr() as *const _,
484 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
485 notify_shortcut_folders_trampoline::<Self, F> as *const (),
486 )),
487 Box_::into_raw(f),
488 )
489 }
490 }
491}
492
493impl<O: IsA<FileChooser>> FileChooserExt for O {}