summaryrefslogtreecommitdiffstats
path: root/app/widgets/gimpexportdialog.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/widgets/gimpexportdialog.c')
-rw-r--r--app/widgets/gimpexportdialog.c221
1 files changed, 221 insertions, 0 deletions
diff --git a/app/widgets/gimpexportdialog.c b/app/widgets/gimpexportdialog.c
new file mode 100644
index 0000000..eebf98e
--- /dev/null
+++ b/app/widgets/gimpexportdialog.c
@@ -0,0 +1,221 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpexportdialog.c
+ * Copyright (C) 2015 Jehan <jehan@girinstud.io>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include <gegl.h>
+#include <gtk/gtk.h>
+
+#include "libgimpbase/gimpbase.h"
+#include "libgimpwidgets/gimpwidgets.h"
+
+#include "widgets-types.h"
+
+#include "core/gimp.h"
+#include "core/gimp-utils.h"
+#include "core/gimpimage.h"
+
+#include "config/gimpcoreconfig.h"
+
+#include "file/gimp-file.h"
+
+#include "gimpexportdialog.h"
+#include "gimphelp-ids.h"
+
+#include "gimp-intl.h"
+
+
+G_DEFINE_TYPE (GimpExportDialog, gimp_export_dialog,
+ GIMP_TYPE_FILE_DIALOG)
+
+#define parent_class gimp_export_dialog_parent_class
+
+
+static void
+gimp_export_dialog_class_init (GimpExportDialogClass *klass)
+{
+}
+
+static void
+gimp_export_dialog_init (GimpExportDialog *dialog)
+{
+}
+
+
+/* public functions */
+
+GtkWidget *
+gimp_export_dialog_new (Gimp *gimp)
+{
+ g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
+
+ return g_object_new (GIMP_TYPE_EXPORT_DIALOG,
+ "gimp", gimp,
+ "title", _("Export Image"),
+ "role", "gimp-file-export",
+ "help-id", GIMP_HELP_FILE_EXPORT_AS,
+ "ok-button-label", _("_Export"),
+
+ "automatic-label", _("By Extension"),
+ "automatic-help-id", GIMP_HELP_FILE_SAVE_BY_EXTENSION,
+
+ "action", GTK_FILE_CHOOSER_ACTION_SAVE,
+ "file-procs", GIMP_FILE_PROCEDURE_GROUP_EXPORT,
+ "file-procs-all-images", GIMP_FILE_PROCEDURE_GROUP_SAVE,
+ "file-filter-label", _("All export images"),
+ NULL);
+}
+
+void
+gimp_export_dialog_set_image (GimpExportDialog *dialog,
+ GimpImage *image)
+{
+ GimpFileDialog *file_dialog;
+ GFile *dir_file = NULL;
+ GFile *name_file = NULL;
+ GFile *ext_file = NULL;
+ gchar *basename;
+
+ g_return_if_fail (GIMP_IS_EXPORT_DIALOG (dialog));
+ g_return_if_fail (GIMP_IS_IMAGE (image));
+
+ file_dialog = GIMP_FILE_DIALOG (dialog);
+
+ file_dialog->image = image;
+
+ gimp_file_dialog_set_file_proc (file_dialog, NULL);
+
+ /* Priority of default paths for Export:
+ *
+ * 1. Last Export path
+ * 2. Path of import source
+ * 3. Path of XCF source
+ * 4. Last path of any save to XCF
+ * 5. Last Export path of any document
+ * 6. The default path (usually the OS 'Documents' path)
+ */
+
+ dir_file = gimp_image_get_exported_file (image);
+
+ if (! dir_file)
+ dir_file = g_object_get_data (G_OBJECT (image),
+ "gimp-image-source-file");
+
+ if (! dir_file)
+ dir_file = gimp_image_get_imported_file (image);
+
+ if (! dir_file)
+ dir_file = gimp_image_get_file (image);
+
+ if (! dir_file)
+ dir_file = g_object_get_data (G_OBJECT (file_dialog->gimp),
+ GIMP_FILE_SAVE_LAST_FILE_KEY);
+
+ if (! dir_file)
+ dir_file = g_object_get_data (G_OBJECT (file_dialog->gimp),
+ GIMP_FILE_EXPORT_LAST_FILE_KEY);
+
+ if (! dir_file)
+ dir_file = gimp_file_dialog_get_default_folder (file_dialog);
+
+ /* Priority of default basenames for Export:
+ *
+ * 1. Last Export name
+ * 3. Save URI
+ * 2. Source file name
+ * 3. 'Untitled'
+ */
+
+ name_file = gimp_image_get_exported_file (image);
+
+ if (! name_file)
+ name_file = gimp_image_get_file (image);
+
+ if (! name_file)
+ name_file = gimp_image_get_imported_file (image);
+
+ if (! name_file)
+ name_file = gimp_image_get_untitled_file (image);
+
+
+ /* Priority of default type/extension for Export:
+ *
+ * 1. Type of last Export
+ * 2. Type of the image Import
+ * 3. Type of latest Export of any document
+ * 4. Default file type set in Preferences
+ */
+
+ ext_file = gimp_image_get_exported_file (image);
+
+ if (! ext_file)
+ ext_file = gimp_image_get_imported_file (image);
+
+ if (! ext_file)
+ ext_file = g_object_get_data (G_OBJECT (file_dialog->gimp),
+ GIMP_FILE_EXPORT_LAST_FILE_KEY);
+
+ if (ext_file)
+ {
+ g_object_ref (ext_file);
+ }
+ else
+ {
+ const gchar *extension;
+ gchar *uri;
+
+ gimp_enum_get_value (GIMP_TYPE_EXPORT_FILE_TYPE,
+ image->gimp->config->export_file_type,
+ NULL, &extension, NULL, NULL);
+
+ uri = g_strconcat ("file:///we/only/care/about/extension.",
+ extension, NULL);
+ ext_file = g_file_new_for_uri (uri);
+ g_free (uri);
+ }
+
+ if (ext_file)
+ {
+ GFile *tmp_file = gimp_file_with_new_extension (name_file, ext_file);
+ basename = g_path_get_basename (gimp_file_get_utf8_name (tmp_file));
+ g_object_unref (tmp_file);
+ g_object_unref (ext_file);
+ }
+ else
+ {
+ basename = g_path_get_basename (gimp_file_get_utf8_name (name_file));
+ }
+
+ if (g_file_query_file_type (dir_file, G_FILE_QUERY_INFO_NONE, NULL) ==
+ G_FILE_TYPE_DIRECTORY)
+ {
+ gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (dialog),
+ dir_file, NULL);
+ }
+ else
+ {
+ GFile *parent_file = g_file_get_parent (dir_file);
+ gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (dialog),
+ parent_file, NULL);
+ g_object_unref (parent_file);
+ }
+
+ gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), basename);
+}