28 if (!Glib::file_test(start_path, Glib::FileTest::EXISTS)) {
29 std::cerr <<
"get_start_directory: directory does not exist: " << start_path << std::endl;
34 if (start_path.empty() && try_document_dir) {
35 start_path = Glib::get_user_special_dir(Glib::UserDirectory::DOCUMENTS);
39 if (start_path.empty()) {
40 start_path = Glib::get_home_dir();
49 auto allfiles = Gtk::FileFilter::create();
50 allfiles->set_name(_(
"All Files"));
51 allfiles->add_pattern(
"*");
52 filters->append(allfiles);
54 auto inkscape = Gtk::FileFilter::create();
55 inkscape->set_name(_(
"All Inkscape Files"));
56 filters->append(inkscape);
58 auto images = Gtk::FileFilter::create();
59 images->set_name(_(
"Images"));
60 filters->append(images);
62 auto bitmaps = Gtk::FileFilter::create();
63 bitmaps->set_name(_(
"Bitmaps"));
64 filters->append(bitmaps);
66 auto vectors = Gtk::FileFilter::create();
67 vectors->set_name(_(
"Vectors"));
68 filters->append(vectors);
74 for (
auto imod : extension_list) {
76 gchar
const * extension = imod->get_extension();
78 extension = extension + 1;
85 auto filter = Gtk::FileFilter::create();
86 filter->set_name(imod->get_filetypename(
true));
87 filter->add_suffix(extension);
88 filters->append(filter);
90 inkscape->add_suffix(extension);
92 if (strncmp(
"image", imod->get_mimetype(), 5) == 0) {
93 images->add_suffix(extension);
98 if (strncmp(
"image/png", imod->get_mimetype(), 9) == 0 ||
99 strncmp(
"image/jpeg", imod->get_mimetype(), 10) == 0 ||
100 strncmp(
"image/gif", imod->get_mimetype(), 9) == 0 ||
101 strncmp(
"image/x-icon", imod->get_mimetype(), 12) == 0 ||
102 strncmp(
"image/x-navi-animation", imod->get_mimetype(), 22) == 0 ||
103 strncmp(
"image/x-cmu-raster", imod->get_mimetype(), 18) == 0 ||
104 strncmp(
"image/x-xpixmap", imod->get_mimetype(), 15) == 0 ||
105 strncmp(
"image/bmp", imod->get_mimetype(), 9) == 0 ||
106 strncmp(
"image/vnd.wap.wbmp", imod->get_mimetype(), 18) == 0 ||
107 strncmp(
"image/tiff", imod->get_mimetype(), 10) == 0 ||
108 strncmp(
"image/x-xbitmap", imod->get_mimetype(), 15) == 0 ||
109 strncmp(
"image/x-tga", imod->get_mimetype(), 11) == 0 ||
110 strncmp(
"image/x-pcx", imod->get_mimetype(), 11) == 0) {
111 bitmaps->add_suffix(extension);
113 vectors->add_suffix(extension);
129 auto allfiles = Gtk::FileFilter::create();
130 allfiles->set_name(_(
"All Files"));
131 allfiles->add_pattern(
"*");
132 filters->append(allfiles);
138 std::vector<Glib::ustring> file_extensions;
140 for (
auto omod : extension_list) {
150 if (for_save && omod->is_raster()) {
154 gchar
const * extension = omod->get_extension();
156 extension = extension + 1;
158 Glib::ustring file_extension(extension);
161 if (std::find(file_extensions.begin(), file_extensions.end(), file_extension) != file_extensions.end()) {
165 file_extensions.emplace_back(extension);
169 auto name = omod->get_filetypename(
true);
170 if (file_extension ==
"svg") {
173 else if (file_extension ==
"svgz") {
174 name = _(
"Compressed SVG (.svgz)");
176 else if (file_extension ==
"dxf") {
179 else if (file_extension ==
"zip") {
182 else if (file_extension ==
"pdf") {
185 else if (file_extension ==
"png") {
190 auto filter = Gtk::FileFilter::create();
191 filter->set_name(
name);
192 filter->add_suffix(extension);
193 filters->append(filter);