app: Add an 'export' mode to the file save dialog

This commit is contained in:
Martin Nordholts 2009-04-25 10:51:07 +02:00
parent 3025dac653
commit 0971d61fc4
7 changed files with 73 additions and 21 deletions

View File

@ -513,7 +513,7 @@ file_save_dialog_show (Gimp *gimp,
gtk_window_set_title (GTK_WINDOW (dialog), title);
gimp_file_dialog_set_save_image (GIMP_FILE_DIALOG (dialog),
gimp, image, save_a_copy,
gimp, image, save_a_copy, FALSE,
close_after_saving);
gtk_window_present (GTK_WINDOW (dialog));

View File

@ -125,7 +125,7 @@ dialogs_file_save_new (GimpDialogFactory *factory,
GimpContext *context,
gint view_size)
{
return file_save_dialog_new (context->gimp);
return file_save_dialog_new (context->gimp, FALSE);
}
GtkWidget *

View File

@ -70,6 +70,8 @@ static gboolean file_save_dialog_check_uri (GtkWidget *save_
static gboolean file_save_dialog_uri_will_change (GimpFileDialog *dialog,
Gimp *gimp);
static gchar * file_save_dialog_get_uri (GimpFileDialog *dialog);
static GSList * file_save_dialog_get_procs (GimpFileDialog *dialog,
Gimp *gimp);
static void file_save_dialog_unknown_ext_msg (GimpFileDialog *dialog,
Gimp *gimp);
static gboolean file_save_dialog_use_extension (GtkWidget *save_dialog,
@ -79,21 +81,35 @@ static gboolean file_save_dialog_use_extension (GtkWidget *save_
/* public functions */
GtkWidget *
file_save_dialog_new (Gimp *gimp)
file_save_dialog_new (Gimp *gimp,
gboolean export)
{
GtkWidget *dialog;
GimpFileDialogState *state;
if (! export)
{
dialog = gimp_file_dialog_new (gimp,
GIMP_FILE_CHOOSER_ACTION_SAVE,
_("Save Image"), "gimp-file-save",
GTK_STOCK_SAVE,
GIMP_HELP_FILE_SAVE);
state = g_object_get_data (G_OBJECT (gimp), "gimp-file-save-dialog-state");
}
else
{
dialog = gimp_file_dialog_new (gimp,
GIMP_FILE_CHOOSER_ACTION_EXPORT,
_("Export Image"), "gimp-file-export",
GTK_STOCK_SAVE,
GIMP_HELP_FILE_EXPORT);
state = g_object_get_data (G_OBJECT (gimp), "gimp-file-export-dialog-state");
}
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
dialog = gimp_file_dialog_new (gimp,
GIMP_FILE_CHOOSER_ACTION_SAVE,
_("Save Image"), "gimp-file-save",
GTK_STOCK_SAVE,
GIMP_HELP_FILE_SAVE);
state = g_object_get_data (G_OBJECT (gimp), "gimp-file-save-dialog-state");
if (state)
gimp_file_dialog_set_state (GIMP_FILE_DIALOG (dialog), state);
@ -137,9 +153,18 @@ file_save_dialog_response (GtkWidget *save_dialog,
GimpPlugInProcedure *save_proc;
gulong handler_id;
g_object_set_data_full (G_OBJECT (gimp), "gimp-file-save-dialog-state",
gimp_file_dialog_get_state (dialog),
(GDestroyNotify) gimp_file_dialog_state_destroy);
if (! dialog->export)
{
g_object_set_data_full (G_OBJECT (gimp), "gimp-file-save-dialog-state",
gimp_file_dialog_get_state (dialog),
(GDestroyNotify) gimp_file_dialog_state_destroy);
}
else
{
g_object_set_data_full (G_OBJECT (gimp), "gimp-file-export-dialog-state",
gimp_file_dialog_get_state (dialog),
(GDestroyNotify) gimp_file_dialog_state_destroy);
}
if (response_id != GTK_RESPONSE_OK)
{
@ -163,7 +188,7 @@ file_save_dialog_response (GtkWidget *save_dialog,
uri,
save_proc,
GIMP_RUN_INTERACTIVE,
! dialog->save_a_copy,
! dialog->save_a_copy && ! dialog->export,
FALSE))
{
/* Save was successful, now store the URI in a couple of
@ -184,6 +209,15 @@ file_save_dialog_response (GtkWidget *save_dialog,
NULL);
}
if (! dialog->export)
g_object_set_data_full (G_OBJECT (dialog->image->gimp),
GIMP_FILE_SAVE_LAST_URI_KEY,
g_strdup (uri), (GDestroyNotify) g_free);
else
g_object_set_data_full (G_OBJECT (dialog->image->gimp),
GIMP_FILE_EXPORT_LAST_URI_KEY,
g_strdup (uri), (GDestroyNotify) g_free);
g_object_set_data_full (G_OBJECT (dialog->image->gimp),
GIMP_FILE_SAVE_LAST_URI_KEY,
g_strdup (uri), (GDestroyNotify) g_free);
@ -251,9 +285,9 @@ file_save_dialog_check_uri (GtkWidget *save_dialog,
basename = file_utils_uri_display_basename (uri);
save_proc = dialog->file_proc;
uri_proc = file_procedure_find (gimp->plug_in_manager->save_procs,
uri_proc = file_procedure_find (file_save_dialog_get_procs (dialog, gimp),
uri, NULL);
basename_proc = file_procedure_find (gimp->plug_in_manager->save_procs,
basename_proc = file_procedure_find (file_save_dialog_get_procs (dialog, gimp),
basename, NULL);
GIMP_LOG (SAVE_DIALOG, "URI = %s", uri);
@ -301,9 +335,9 @@ file_save_dialog_check_uri (GtkWidget *save_dialog,
uri = ext_uri;
basename = ext_basename;
uri_proc = file_procedure_find (gimp->plug_in_manager->save_procs,
uri_proc = file_procedure_find (file_save_dialog_get_procs (dialog, gimp),
uri, NULL);
basename_proc = file_procedure_find (gimp->plug_in_manager->save_procs,
basename_proc = file_procedure_find (file_save_dialog_get_procs (dialog, gimp),
basename, NULL);
utf8 = g_filename_to_utf8 (basename, -1, NULL, NULL, NULL);
@ -503,6 +537,15 @@ file_save_dialog_get_uri (GimpFileDialog *dialog)
return uri;
}
static GSList *
file_save_dialog_get_procs (GimpFileDialog *dialog,
Gimp *gimp)
{
return (! dialog->export ?
gimp->plug_in_manager->save_procs :
gimp->plug_in_manager->export_procs);
}
static void
file_save_dialog_unknown_ext_msg (GimpFileDialog *dialog,
Gimp *gimp)

View File

@ -19,7 +19,8 @@
#define __FILE_SAVE_DIALOG_H__
GtkWidget * file_save_dialog_new (Gimp *gimp);
GtkWidget * file_save_dialog_new (Gimp *gimp,
gboolean export);
gboolean file_save_dialog_save_image (GimpProgress *progress_and_handler,
Gimp *gimp,

View File

@ -24,6 +24,7 @@
/* Data keys for Gimp */
#define GIMP_FILE_OPEN_LAST_URI_KEY "gimp-file-open-last-uri"
#define GIMP_FILE_SAVE_LAST_URI_KEY "gimp-file-save-last-uri"
#define GIMP_FILE_EXPORT_LAST_URI_KEY "gimp-file-export-last-uri"
/* Data keys for GimpImage */
#define GIMP_FILE_SAVE_A_COPY_URI_KEY "gimp-file-save-a-copy-uri"

View File

@ -320,8 +320,11 @@ gimp_file_dialog_new (Gimp *gimp,
break;
case GIMP_FILE_CHOOSER_ACTION_SAVE:
case GIMP_FILE_CHOOSER_ACTION_EXPORT:
gtk_action = GTK_FILE_CHOOSER_ACTION_SAVE;
file_procs = gimp->plug_in_manager->save_procs;
file_procs = (action == GIMP_FILE_CHOOSER_ACTION_SAVE ?
gimp->plug_in_manager->save_procs :
gimp->plug_in_manager->export_procs);
automatic = _("By Extension");
automatic_help_id = GIMP_HELP_FILE_SAVE_BY_EXTENSION;
@ -461,6 +464,7 @@ gimp_file_dialog_set_save_image (GimpFileDialog *dialog,
Gimp *gimp,
GimpImage *image,
gboolean save_a_copy,
gboolean export,
gboolean close_after_saving)
{
const gchar *uri = NULL;
@ -472,6 +476,7 @@ gimp_file_dialog_set_save_image (GimpFileDialog *dialog,
dialog->image = image;
dialog->save_a_copy = save_a_copy;
dialog->export = export;
dialog->close_after_saving = close_after_saving;
if (save_a_copy)

View File

@ -43,6 +43,7 @@ struct _GimpFileDialog
GimpImage *image;
gboolean open_as_layers;
gboolean save_a_copy;
gboolean export;
gboolean close_after_saving;
GtkWidget *thumb_box;
@ -85,6 +86,7 @@ void gimp_file_dialog_set_save_image (GimpFileDialog *dialog,
Gimp *gimp,
GimpImage *image,
gboolean save_a_copy,
gboolean export,
gboolean close_after_saving);
GimpFileDialogState * gimp_file_dialog_get_state (GimpFileDialog *dialog);