1 use crate::i18n::i18n;
2 use gtk::prelude::*;
3 use gtk::ResponseType;
4 use std::path::PathBuf;
5 
save(parent: &gtk::Window, title: &str, filter: &[gtk::FileFilter]) -> Option<PathBuf>6 pub fn save(parent: &gtk::Window, title: &str, filter: &[gtk::FileFilter]) -> Option<PathBuf> {
7     let file_chooser = gtk::FileChooserNative::new(
8         Some(i18n("Save media as").as_str()),
9         Some(parent),
10         gtk::FileChooserAction::Save,
11         Some(i18n("_Save").as_str()),
12         Some(i18n("_Cancel").as_str()),
13     );
14     for f in filter {
15         file_chooser.add_filter(f);
16     }
17 
18     file_chooser.set_current_folder(dirs::download_dir().unwrap_or_default());
19     file_chooser.set_current_name(title);
20     let response = file_chooser.run();
21     if response == ResponseType::Accept {
22         return file_chooser.get_filename();
23     }
24     None
25 }
26 
open(parent: &gtk::Window, title: &str, filter: &[gtk::FileFilter]) -> Option<PathBuf>27 pub fn open(parent: &gtk::Window, title: &str, filter: &[gtk::FileFilter]) -> Option<PathBuf> {
28     let file_chooser = gtk::FileChooserNative::new(
29         Some(title),
30         Some(parent),
31         gtk::FileChooserAction::Open,
32         Some(i18n("_Select").as_str()),
33         Some(i18n("_Cancel").as_str()),
34     );
35 
36     for f in filter {
37         file_chooser.add_filter(f);
38     }
39 
40     let response = file_chooser.run();
41     if response == gtk::ResponseType::Accept {
42         return file_chooser.get_filename();
43     }
44     None
45 }
46