1 use crate::i18n::i18n;
2 use gtk::prelude::*;
3 use gtk::ResponseType;
4 use std::path::PathBuf;
5
save(parent: >k::Window, title: &str, filter: &[gtk::FileFilter]) -> Option<PathBuf>6 pub fn save(parent: >k::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: >k::Window, title: &str, filter: &[gtk::FileFilter]) -> Option<PathBuf>27 pub fn open(parent: >k::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