app/commands.[ch] app/fileops.[ch] app/gdisplay.c Implemented "Save a Copy

2001-01-02  Michael Natterer  <mitch@gimp.org>

	* app/commands.[ch]
	* app/fileops.[ch]
	* app/gdisplay.c
	* app/menus.c: Implemented "Save a Copy as..." which saves the image
	without changing it's filename.

	* app/layers_dialogP.h: export layers_dialog_layer_merge_query()
	here instead of defining it in commands.c

	* TODO.xml: mark this entry as done :)
This commit is contained in:
Michael Natterer 2001-01-01 23:55:45 +00:00 committed by Michael Natterer
parent 6684bb77b0
commit 9ccab8523a
20 changed files with 525 additions and 340 deletions

View file

@ -1,3 +1,16 @@
2001-01-02 Michael Natterer <mitch@gimp.org>
* app/commands.[ch]
* app/fileops.[ch]
* app/gdisplay.c
* app/menus.c: Implemented "Save a Copy as..." which saves the image
without changing it's filename.
* app/layers_dialogP.h: export layers_dialog_layer_merge_query()
here instead of defining it in commands.c
* TODO.xml: mark this entry as done :)
2001-01-01 Michael Natterer <mitch@gimp.org>
* TODO.xml: added a TODO item for "Save a Copy..."

View file

@ -235,7 +235,7 @@
</contact>
</entry>
<entry size="small" difficulty="easy" status="0%" target="1.4">
<entry size="small" difficulty="easy" status="100%" target="1.4">
<title>Implement "Save a Copy..."</title>
<description>
<p>

View file

@ -59,6 +59,7 @@
#include "invert.h"
#include "lc_dialog.h"
#include "layer_select.h"
#include "layers_dialogP.h"
#include "module_db.h"
#include "palette.h"
#include "pattern_select.h"
@ -84,20 +85,29 @@
gdisp = gdisplay_active (); \
if (!gdisp) return
/* external functions */
extern void layers_dialog_layer_merge_query (GImage *, gboolean);
/* local functions */
static void image_resize_callback (GtkWidget *, gpointer);
static void image_scale_callback (GtkWidget *, gpointer);
static void gimage_mask_feather_callback (GtkWidget *, gdouble, GimpUnit,
gpointer);
static void gimage_mask_border_callback (GtkWidget *, gdouble, GimpUnit,
gpointer);
static void gimage_mask_grow_callback (GtkWidget *, gdouble, GimpUnit,
gpointer);
static void gimage_mask_shrink_callback (GtkWidget *, gdouble, GimpUnit,
gpointer);
static void image_resize_callback (GtkWidget *,
gpointer );
static void image_scale_callback (GtkWidget *,
gpointer );
static void gimage_mask_feather_callback (GtkWidget *,
gdouble ,
GimpUnit ,
gpointer );
static void gimage_mask_border_callback (GtkWidget *,
gdouble ,
GimpUnit ,
gpointer );
static void gimage_mask_grow_callback (GtkWidget *,
gdouble ,
GimpUnit ,
gpointer );
static void gimage_mask_shrink_callback (GtkWidget *,
gdouble ,
GimpUnit ,
gpointer );
/* local variables */
static gdouble selection_feather_radius = 5.0;
@ -130,6 +140,13 @@ file_save_as_cmd_callback (GtkWidget *widget,
file_save_as_callback (widget, client_data);
}
void
file_save_a_copy_as_cmd_callback (GtkWidget *widget,
gpointer client_data)
{
file_save_a_copy_as_callback (widget, client_data);
}
void
file_revert_cmd_callback (GtkWidget *widget,
gpointer client_data)

View file

@ -20,14 +20,15 @@
#define __COMMANDS_H__
void file_new_cmd_callback (GtkWidget *, gpointer, guint);
void file_open_cmd_callback (GtkWidget *, gpointer);
void file_save_cmd_callback (GtkWidget *, gpointer);
void file_save_as_cmd_callback (GtkWidget *, gpointer);
void file_revert_cmd_callback (GtkWidget *, gpointer);
void file_pref_cmd_callback (GtkWidget *, gpointer);
void file_close_cmd_callback (GtkWidget *, gpointer);
void file_quit_cmd_callback (GtkWidget *, gpointer);
void file_new_cmd_callback (GtkWidget *, gpointer, guint);
void file_open_cmd_callback (GtkWidget *, gpointer);
void file_save_cmd_callback (GtkWidget *, gpointer);
void file_save_as_cmd_callback (GtkWidget *, gpointer);
void file_save_a_copy_as_cmd_callback (GtkWidget *, gpointer);
void file_revert_cmd_callback (GtkWidget *, gpointer);
void file_pref_cmd_callback (GtkWidget *, gpointer);
void file_close_cmd_callback (GtkWidget *, gpointer);
void file_quit_cmd_callback (GtkWidget *, gpointer);
void edit_undo_cmd_callback (GtkWidget *, gpointer);
void edit_redo_cmd_callback (GtkWidget *, gpointer);

View file

@ -59,6 +59,7 @@
#include "invert.h"
#include "lc_dialog.h"
#include "layer_select.h"
#include "layers_dialogP.h"
#include "module_db.h"
#include "palette.h"
#include "pattern_select.h"
@ -84,20 +85,29 @@
gdisp = gdisplay_active (); \
if (!gdisp) return
/* external functions */
extern void layers_dialog_layer_merge_query (GImage *, gboolean);
/* local functions */
static void image_resize_callback (GtkWidget *, gpointer);
static void image_scale_callback (GtkWidget *, gpointer);
static void gimage_mask_feather_callback (GtkWidget *, gdouble, GimpUnit,
gpointer);
static void gimage_mask_border_callback (GtkWidget *, gdouble, GimpUnit,
gpointer);
static void gimage_mask_grow_callback (GtkWidget *, gdouble, GimpUnit,
gpointer);
static void gimage_mask_shrink_callback (GtkWidget *, gdouble, GimpUnit,
gpointer);
static void image_resize_callback (GtkWidget *,
gpointer );
static void image_scale_callback (GtkWidget *,
gpointer );
static void gimage_mask_feather_callback (GtkWidget *,
gdouble ,
GimpUnit ,
gpointer );
static void gimage_mask_border_callback (GtkWidget *,
gdouble ,
GimpUnit ,
gpointer );
static void gimage_mask_grow_callback (GtkWidget *,
gdouble ,
GimpUnit ,
gpointer );
static void gimage_mask_shrink_callback (GtkWidget *,
gdouble ,
GimpUnit ,
gpointer );
/* local variables */
static gdouble selection_feather_radius = 5.0;
@ -130,6 +140,13 @@ file_save_as_cmd_callback (GtkWidget *widget,
file_save_as_callback (widget, client_data);
}
void
file_save_a_copy_as_cmd_callback (GtkWidget *widget,
gpointer client_data)
{
file_save_a_copy_as_callback (widget, client_data);
}
void
file_revert_cmd_callback (GtkWidget *widget,
gpointer client_data)

View file

@ -20,14 +20,15 @@
#define __COMMANDS_H__
void file_new_cmd_callback (GtkWidget *, gpointer, guint);
void file_open_cmd_callback (GtkWidget *, gpointer);
void file_save_cmd_callback (GtkWidget *, gpointer);
void file_save_as_cmd_callback (GtkWidget *, gpointer);
void file_revert_cmd_callback (GtkWidget *, gpointer);
void file_pref_cmd_callback (GtkWidget *, gpointer);
void file_close_cmd_callback (GtkWidget *, gpointer);
void file_quit_cmd_callback (GtkWidget *, gpointer);
void file_new_cmd_callback (GtkWidget *, gpointer, guint);
void file_open_cmd_callback (GtkWidget *, gpointer);
void file_save_cmd_callback (GtkWidget *, gpointer);
void file_save_as_cmd_callback (GtkWidget *, gpointer);
void file_save_a_copy_as_cmd_callback (GtkWidget *, gpointer);
void file_revert_cmd_callback (GtkWidget *, gpointer);
void file_pref_cmd_callback (GtkWidget *, gpointer);
void file_close_cmd_callback (GtkWidget *, gpointer);
void file_quit_cmd_callback (GtkWidget *, gpointer);
void edit_undo_cmd_callback (GtkWidget *, gpointer);
void edit_redo_cmd_callback (GtkWidget *, gpointer);

View file

@ -1777,7 +1777,8 @@ gdisplay_set_menu_sensitivity (GDisplay *gdisp)
menus_set_state ("<Image>/" menu, (condition) != 0)
SET_SENSITIVE ("File/Save", gdisp && drawable);
SET_SENSITIVE ("File/Save As...", gdisp && drawable);
SET_SENSITIVE ("File/Save as...", gdisp && drawable);
SET_SENSITIVE ("File/Save a Copy as...", gdisp && drawable);
SET_SENSITIVE ("File/Revert...", gdisp && gdisp->gimage->filename);
SET_SENSITIVE ("File/Close", gdisp);

View file

@ -1777,7 +1777,8 @@ gdisplay_set_menu_sensitivity (GDisplay *gdisp)
menus_set_state ("<Image>/" menu, (condition) != 0)
SET_SENSITIVE ("File/Save", gdisp && drawable);
SET_SENSITIVE ("File/Save As...", gdisp && drawable);
SET_SENSITIVE ("File/Save as...", gdisp && drawable);
SET_SENSITIVE ("File/Save a Copy as...", gdisp && drawable);
SET_SENSITIVE ("File/Revert...", gdisp && gdisp->gimage->filename);
SET_SENSITIVE ("File/Close", gdisp);

View file

@ -102,6 +102,9 @@ struct _OverwriteData
};
static void file_open_dialog_create (void);
static void file_save_dialog_create (void);
static void file_overwrite (gchar *filename,
gchar *raw_filename);
static void file_overwrite_callback (GtkWidget *widget,
@ -120,7 +123,8 @@ static GimpImage * file_open_image (const gchar *filename,
static gint file_save (GimpImage *gimage,
gchar *filename,
gchar *raw_filename,
RunModeType run_mode);
RunModeType run_mode,
gboolean set_filename);
static void file_open_genbutton_callback (GtkWidget *widget,
gpointer data);
@ -191,7 +195,8 @@ GSList *save_procs = NULL;
static PlugInProcDef *load_file_proc = NULL;
static PlugInProcDef *save_file_proc = NULL;
static GimpImage *the_gimage = NULL;
static GimpImage *the_gimage = NULL;
static gboolean set_filename = TRUE;
extern GSList *display_list; /* from gdisplay.c */
@ -258,163 +263,148 @@ file_ops_post_init (void)
}
}
void
file_open_callback (GtkWidget *widget,
gpointer data)
static void
file_open_dialog_create (void)
{
if (!fileload)
fileload = gtk_file_selection_new (_("Load Image"));
gtk_window_set_position (GTK_WINDOW (fileload), GTK_WIN_POS_MOUSE);
gtk_window_set_wmclass (GTK_WINDOW (fileload), "load_image", "Gimp");
gtk_container_set_border_width (GTK_CONTAINER (fileload), 2);
gtk_container_set_border_width
(GTK_CONTAINER (GTK_FILE_SELECTION (fileload)->button_area), 2);
dialog_register_fileload (fileload);
gtk_signal_connect_object
(GTK_OBJECT (GTK_FILE_SELECTION (fileload)->cancel_button), "clicked",
GTK_SIGNAL_FUNC (file_dialog_hide),
GTK_OBJECT (fileload));
gtk_signal_connect (GTK_OBJECT (fileload), "delete_event",
GTK_SIGNAL_FUNC (file_dialog_hide),
NULL);
gtk_signal_connect
(GTK_OBJECT (GTK_FILE_SELECTION (fileload)->ok_button), "clicked",
GTK_SIGNAL_FUNC (file_open_ok_callback),
fileload);
gtk_quit_add_destroy (1, GTK_OBJECT (fileload));
gtk_clist_set_selection_mode
(GTK_CLIST (GTK_FILE_SELECTION (fileload)->file_list),
GTK_SELECTION_EXTENDED);
/* Catch file-clist clicks so we can update the preview thumbnail */
gtk_signal_connect
(GTK_OBJECT (GTK_FILE_SELECTION (fileload)->file_list), "select_row",
GTK_SIGNAL_FUNC (file_open_clistrow_callback),
fileload);
/* Connect the "F1" help key */
gimp_help_connect_help_accel (fileload,
gimp_standard_help_func,
"open/dialogs/file_open.html");
{
GtkWidget *frame;
GtkWidget *vbox;
GtkWidget *hbox;
GtkWidget *option_menu;
GtkWidget *load_menu;
GtkWidget *open_options_genbutton;
open_options = gtk_hbox_new (TRUE, 1);
/* format-chooser frame */
frame = gtk_frame_new (_("Determine File Type"));
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
gtk_box_pack_start (GTK_BOX (open_options), frame, TRUE, TRUE, 4);
vbox = gtk_vbox_new (FALSE, 2);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 4);
gtk_container_add (GTK_CONTAINER (frame), vbox);
hbox = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
gtk_widget_show (hbox);
option_menu = gtk_option_menu_new ();
gtk_box_pack_start (GTK_BOX (hbox), option_menu, FALSE, FALSE, 0);
gtk_widget_show (option_menu);
menus_get_load_menu (&load_menu, NULL);
gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu), load_menu);
gtk_widget_show (vbox);
gtk_widget_show (frame);
/* Preview frame */
open_options_frame = frame = gtk_frame_new ("");
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
gtk_box_pack_end (GTK_BOX (open_options), frame, FALSE, TRUE, 4);
vbox = gtk_vbox_new (FALSE, 2);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 4);
gtk_container_add (GTK_CONTAINER (frame), vbox);
hbox = gtk_hbox_new (TRUE, 0);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
gtk_widget_show (hbox);
open_options_genbutton = gtk_button_new ();
gtk_signal_connect (GTK_OBJECT (open_options_genbutton), "clicked",
GTK_SIGNAL_FUNC (file_open_genbutton_callback),
fileload);
gtk_box_pack_start (GTK_BOX (hbox), open_options_genbutton,
TRUE, FALSE, 0);
gtk_widget_show (open_options_genbutton);
open_options_fixed = gtk_fixed_new ();
gtk_widget_set_usize (open_options_fixed, 80, 60);
gtk_container_add (GTK_CONTAINER (GTK_BIN (open_options_genbutton)),
open_options_fixed);
gtk_widget_show (open_options_fixed);
{
fileload = gtk_file_selection_new (_("Load Image"));
gtk_window_set_position (GTK_WINDOW (fileload), GTK_WIN_POS_MOUSE);
gtk_window_set_wmclass (GTK_WINDOW (fileload), "load_image", "Gimp");
GtkWidget* abox;
GtkWidget* sbox;
GtkWidget* align;
gtk_container_set_border_width (GTK_CONTAINER (fileload), 2);
gtk_container_set_border_width
(GTK_CONTAINER (GTK_FILE_SELECTION (fileload)->button_area), 2);
sbox = gtk_vbox_new (TRUE, 0);
gtk_container_add (GTK_CONTAINER (open_options_fixed), sbox);
gtk_widget_show (sbox);
dialog_register_fileload (fileload);
align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
gtk_widget_set_usize (align, 80, 60);
gtk_box_pack_start (GTK_BOX (sbox), align, FALSE, TRUE, 0);
gtk_widget_show (align);
gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (fileload)->cancel_button),
"clicked",
GTK_SIGNAL_FUNC (file_dialog_hide),
GTK_OBJECT (fileload));
gtk_signal_connect (GTK_OBJECT (fileload), "delete_event",
GTK_SIGNAL_FUNC (file_dialog_hide),
NULL);
gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileload)->ok_button),
"clicked",
GTK_SIGNAL_FUNC (file_open_ok_callback),
fileload);
gtk_quit_add_destroy (1, GTK_OBJECT (fileload));
abox = gtk_hbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (align), abox);
gtk_widget_show (abox);
gtk_clist_set_selection_mode (GTK_CLIST
(GTK_FILE_SELECTION (fileload)->file_list),
GTK_SELECTION_EXTENDED);
open_options_preview =
GTK_PREVIEW (gtk_preview_new (GTK_PREVIEW_COLOR));
gtk_box_pack_start (GTK_BOX (abox), GTK_WIDGET (open_options_preview),
FALSE, TRUE, 0);
gtk_widget_show (GTK_WIDGET (open_options_preview));
/* Catch file-clist clicks so we can update the preview thumbnail */
gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileload)->file_list),
"select_row",
GTK_SIGNAL_FUNC (file_open_clistrow_callback),
fileload);
/* Connect the "F1" help key */
gimp_help_connect_help_accel (fileload,
gimp_standard_help_func,
"open/dialogs/file_open.html");
}
else
{
gtk_widget_set_sensitive (GTK_WIDGET (fileload), TRUE);
if (GTK_WIDGET_VISIBLE (fileload))
return;
gtk_file_selection_set_filename (GTK_FILE_SELECTION (fileload),
"." G_DIR_SEPARATOR_S);
gtk_window_set_title (GTK_WINDOW (fileload), _("Load Image"));
open_options_genbuttonlabel = gtk_label_new (_("Generate\nPreview"));
gtk_box_pack_start (GTK_BOX (abox), open_options_genbuttonlabel,
FALSE, TRUE, 0);
gtk_widget_show (open_options_genbuttonlabel);
}
if (!open_options)
{
GtkWidget *frame;
GtkWidget *vbox;
GtkWidget *hbox;
GtkWidget *option_menu;
GtkWidget *load_menu;
GtkWidget *open_options_genbutton;
open_options_label = gtk_label_new ("");
gtk_box_pack_start (GTK_BOX (vbox), open_options_label, FALSE, FALSE, 0);
gtk_widget_show (open_options_label);
open_options = gtk_hbox_new (TRUE, 1);
gtk_widget_show (vbox);
gtk_widget_show (frame);
/* format-chooser frame */
frame = gtk_frame_new (_("Determine File Type"));
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
gtk_box_pack_start (GTK_BOX (open_options), frame, TRUE, TRUE, 4);
vbox = gtk_vbox_new (FALSE, 2);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 4);
gtk_container_add (GTK_CONTAINER (frame), vbox);
hbox = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
gtk_widget_show (hbox);
option_menu = gtk_option_menu_new ();
gtk_box_pack_start (GTK_BOX (hbox), option_menu, FALSE, FALSE, 0);
gtk_widget_show (option_menu);
menus_get_load_menu (&load_menu, NULL);
gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu), load_menu);
gtk_widget_show (vbox);
gtk_widget_show (frame);
/* Preview frame */
open_options_frame = frame = gtk_frame_new ("");
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
gtk_box_pack_end (GTK_BOX (open_options), frame, FALSE, TRUE, 4);
vbox = gtk_vbox_new (FALSE, 2);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 4);
gtk_container_add (GTK_CONTAINER (frame), vbox);
hbox = gtk_hbox_new (TRUE, 0);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
gtk_widget_show (hbox);
open_options_genbutton = gtk_button_new ();
gtk_signal_connect (GTK_OBJECT (open_options_genbutton), "clicked",
GTK_SIGNAL_FUNC (file_open_genbutton_callback),
fileload);
gtk_box_pack_start (GTK_BOX (hbox), open_options_genbutton,
TRUE, FALSE, 0);
gtk_widget_show (open_options_genbutton);
open_options_fixed = gtk_fixed_new ();
gtk_widget_set_usize (open_options_fixed, 80, 60);
gtk_container_add (GTK_CONTAINER (GTK_BIN (open_options_genbutton)),
open_options_fixed);
gtk_widget_show (open_options_fixed);
{
GtkWidget* abox;
GtkWidget* sbox;
GtkWidget* align;
sbox = gtk_vbox_new (TRUE, 0);
gtk_container_add (GTK_CONTAINER (open_options_fixed), sbox);
gtk_widget_show (sbox);
align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
gtk_widget_set_usize (align, 80, 60);
gtk_box_pack_start (GTK_BOX (sbox), align, FALSE, TRUE, 0);
gtk_widget_show (align);
abox = gtk_hbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (align), abox);
gtk_widget_show (abox);
open_options_preview =
GTK_PREVIEW (gtk_preview_new (GTK_PREVIEW_COLOR));
gtk_box_pack_start (GTK_BOX (abox), GTK_WIDGET (open_options_preview),
FALSE, TRUE, 0);
gtk_widget_show (GTK_WIDGET (open_options_preview));
open_options_genbuttonlabel = gtk_label_new (_("Generate\nPreview"));
gtk_box_pack_start (GTK_BOX (abox), open_options_genbuttonlabel,
FALSE, TRUE, 0);
gtk_widget_show (open_options_genbuttonlabel);
}
open_options_label = gtk_label_new ("");
gtk_box_pack_start (GTK_BOX (vbox), open_options_label, FALSE, FALSE, 0);
gtk_widget_show (open_options_label);
gtk_widget_show (vbox);
gtk_widget_show (frame);
/* pack the containing open_options hbox into the open-dialog */
gtk_box_pack_end (GTK_BOX (GTK_FILE_SELECTION (fileload)->main_vbox),
open_options, FALSE, FALSE, 0);
}
/* pack the containing open_options hbox into the open-dialog */
gtk_box_pack_end (GTK_BOX (GTK_FILE_SELECTION (fileload)->main_vbox),
open_options, FALSE, FALSE, 0);
}
gtk_frame_set_label (GTK_FRAME (open_options_frame), _("Preview"));
gtk_label_set_text (GTK_LABEL (open_options_label), _("No Selection."));
@ -422,8 +412,90 @@ file_open_callback (GtkWidget *widget,
gtk_widget_show (GTK_WIDGET (open_options_genbuttonlabel));
gtk_widget_hide (GTK_WIDGET (open_options_preview));
gtk_widget_set_sensitive (GTK_WIDGET (open_options_frame), FALSE);
}
gtk_widget_show (open_options);
static void
file_save_dialog_create (void)
{
filesave = gtk_file_selection_new (_("Save Image"));
gtk_window_set_wmclass (GTK_WINDOW (filesave), "save_image", "Gimp");
gtk_window_set_position (GTK_WINDOW (filesave), GTK_WIN_POS_MOUSE);
gtk_container_set_border_width (GTK_CONTAINER (filesave), 2);
gtk_container_set_border_width
(GTK_CONTAINER (GTK_FILE_SELECTION (filesave)->button_area), 2);
gtk_signal_connect_object
(GTK_OBJECT (GTK_FILE_SELECTION (filesave)->cancel_button), "clicked",
GTK_SIGNAL_FUNC (file_dialog_hide),
GTK_OBJECT (filesave));
gtk_signal_connect (GTK_OBJECT (filesave), "delete_event",
GTK_SIGNAL_FUNC (file_dialog_hide),
NULL);
gtk_signal_connect
(GTK_OBJECT (GTK_FILE_SELECTION (filesave)->ok_button), "clicked",
GTK_SIGNAL_FUNC (file_save_ok_callback),
filesave);
gtk_quit_add_destroy (1, GTK_OBJECT (filesave));
/* Connect the "F1" help key */
gimp_help_connect_help_accel (filesave,
gimp_standard_help_func,
"save/dialogs/file_save.html");
{
GtkWidget *frame;
GtkWidget *hbox;
GtkWidget *label;
GtkWidget *option_menu;
GtkWidget *save_menu;
save_options = gtk_hbox_new (TRUE, 1);
frame = gtk_frame_new (_("Save Options"));
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
gtk_box_pack_start (GTK_BOX (save_options), frame, TRUE, TRUE, 4);
hbox = gtk_hbox_new (FALSE, 4);
gtk_container_set_border_width (GTK_CONTAINER (hbox), 4);
gtk_container_add (GTK_CONTAINER (frame), hbox);
gtk_widget_show (hbox);
label = gtk_label_new (_("Determine File Type:"));
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
gtk_widget_show (label);
option_menu = gtk_option_menu_new ();
gtk_box_pack_start (GTK_BOX (hbox), option_menu, TRUE, TRUE, 0);
gtk_widget_show (option_menu);
menus_get_save_menu (&save_menu, NULL);
gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu), save_menu);
gtk_widget_show (frame);
/* pack the containing save_options hbox into the save-dialog */
gtk_box_pack_end (GTK_BOX (GTK_FILE_SELECTION (filesave)->main_vbox),
save_options, FALSE, FALSE, 0);
}
gtk_widget_show (save_options);
}
void
file_open_callback (GtkWidget *widget,
gpointer data)
{
if (!fileload)
file_open_dialog_create ();
gtk_widget_set_sensitive (GTK_WIDGET (fileload), TRUE);
if (GTK_WIDGET_VISIBLE (fileload))
return;
gtk_file_selection_set_filename (GTK_FILE_SELECTION (fileload),
"." G_DIR_SEPARATOR_S);
gtk_window_set_title (GTK_WINDOW (fileload), _("Load Image"));
file_dialog_show (fileload);
}
@ -460,7 +532,8 @@ file_save_callback (GtkWidget *widget,
status = file_save (gdisplay->gimage,
filename,
raw_filename,
RUN_WITH_LAST_VALS);
RUN_WITH_LAST_VALS,
TRUE);
if (status != PDB_SUCCESS &&
status != PDB_CANCEL)
@ -488,83 +561,21 @@ file_save_as_callback (GtkWidget *widget,
the_gimage = gdisplay->gimage;
set_filename = TRUE;
if (!filesave)
{
filesave = gtk_file_selection_new (_("Save Image"));
gtk_window_set_wmclass (GTK_WINDOW (filesave), "save_image", "Gimp");
gtk_window_set_position (GTK_WINDOW (filesave), GTK_WIN_POS_MOUSE);
file_save_dialog_create ();
gtk_container_set_border_width (GTK_CONTAINER (filesave), 2);
gtk_container_set_border_width
(GTK_CONTAINER (GTK_FILE_SELECTION (filesave)->button_area), 2);
gtk_widget_set_sensitive (GTK_WIDGET (filesave), TRUE);
if (GTK_WIDGET_VISIBLE (filesave))
return;
gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (filesave)->cancel_button),
"clicked",
GTK_SIGNAL_FUNC (file_dialog_hide),
GTK_OBJECT (filesave));
gtk_signal_connect (GTK_OBJECT (filesave), "delete_event",
GTK_SIGNAL_FUNC (file_dialog_hide),
NULL);
gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filesave)->ok_button),
"clicked",
GTK_SIGNAL_FUNC (file_save_ok_callback),
filesave);
gtk_quit_add_destroy (1, GTK_OBJECT (filesave));
gtk_window_set_title (GTK_WINDOW (filesave), _("Save Image"));
/* Connect the "F1" help key */
gimp_help_connect_help_accel (filesave,
gimp_standard_help_func,
"save/dialogs/file_save.html");
}
else
{
gtk_widget_set_sensitive (GTK_WIDGET (filesave), TRUE);
if (GTK_WIDGET_VISIBLE (filesave))
return;
gtk_window_set_title (GTK_WINDOW (filesave), _("Save Image"));
}
gtk_file_selection_set_filename (GTK_FILE_SELECTION(filesave),
gdisplay->gimage->has_filename
? gimp_image_filename (gdisplay->gimage)
: "." G_DIR_SEPARATOR_S);
if (!save_options)
{
GtkWidget *frame;
GtkWidget *hbox;
GtkWidget *label;
GtkWidget *option_menu;
GtkWidget *save_menu;
save_options = gtk_hbox_new (TRUE, 1);
frame = gtk_frame_new (_("Save Options"));
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
gtk_box_pack_start (GTK_BOX (save_options), frame, TRUE, TRUE, 4);
hbox = gtk_hbox_new (FALSE, 4);
gtk_container_set_border_width (GTK_CONTAINER (hbox), 4);
gtk_container_add (GTK_CONTAINER (frame), hbox);
gtk_widget_show (hbox);
label = gtk_label_new (_("Determine File Type:"));
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
gtk_widget_show (label);
option_menu = gtk_option_menu_new ();
gtk_box_pack_start (GTK_BOX (hbox), option_menu, TRUE, TRUE, 0);
gtk_widget_show (option_menu);
menus_get_save_menu (&save_menu, NULL);
gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu), save_menu);
gtk_widget_show (frame);
/* pack the containing save_options hbox into the save-dialog */
gtk_box_pack_end (GTK_BOX (GTK_FILE_SELECTION (filesave)->main_vbox),
save_options, FALSE, FALSE, 0);
}
gtk_file_selection_set_filename (GTK_FILE_SELECTION (filesave),
gdisplay->gimage->has_filename ?
gimp_image_filename (gdisplay->gimage) :
"." G_DIR_SEPARATOR_S);
switch (gimp_drawable_type (gimp_image_active_drawable (gdisplay->gimage)))
{
@ -588,7 +599,63 @@ file_save_as_callback (GtkWidget *widget,
break;
}
gtk_widget_show (save_options);
file_dialog_show (filesave);
}
void
file_save_a_copy_as_callback (GtkWidget *widget,
gpointer data)
{
GDisplay *gdisplay;
gdisplay = gdisplay_active ();
if (! gdisplay)
return;
if (! gimp_image_active_drawable (gdisplay->gimage))
return;
g_print ("Save a Copy\n");
the_gimage = gdisplay->gimage;
set_filename = FALSE;
if (!filesave)
file_save_dialog_create ();
gtk_widget_set_sensitive (GTK_WIDGET (filesave), TRUE);
if (GTK_WIDGET_VISIBLE (filesave))
return;
gtk_window_set_title (GTK_WINDOW (filesave), _("Save a Copy of the Image"));
gtk_file_selection_set_filename (GTK_FILE_SELECTION (filesave),
gdisplay->gimage->has_filename ?
gimp_image_filename (gdisplay->gimage) :
"." G_DIR_SEPARATOR_S);
switch (gimp_drawable_type (gimp_image_active_drawable (gdisplay->gimage)))
{
case RGB_GIMAGE:
file_update_menus (save_procs, PLUG_IN_RGB_IMAGE);
break;
case RGBA_GIMAGE:
file_update_menus (save_procs, PLUG_IN_RGBA_IMAGE);
break;
case GRAY_GIMAGE:
file_update_menus (save_procs, PLUG_IN_GRAY_IMAGE);
break;
case GRAYA_GIMAGE:
file_update_menus (save_procs, PLUG_IN_GRAYA_IMAGE);
break;
case INDEXED_GIMAGE:
file_update_menus (save_procs, PLUG_IN_INDEXED_IMAGE);
break;
case INDEXEDA_GIMAGE:
file_update_menus (save_procs, PLUG_IN_INDEXEDA_IMAGE);
break;
}
file_dialog_show (filesave);
}
@ -1122,15 +1189,16 @@ static gint
file_save (GimpImage *gimage,
gchar *filename,
gchar *raw_filename,
RunModeType run_mode)
RunModeType run_mode,
gboolean set_filename)
{
PlugInProcDef *file_proc;
ProcRecord *proc;
Argument *args;
Argument *return_vals;
gint status;
gint i;
struct stat statbuf;
ProcRecord *proc;
Argument *args;
Argument *return_vals;
gint status;
gint i;
struct stat statbuf;
if (gimp_image_active_drawable (gimage) == NULL)
return PDB_EXECUTION_ERROR;
@ -1232,9 +1300,12 @@ file_save (GimpImage *gimage,
}
}
/* set the image title */
gimp_image_set_filename (gimage, filename);
/* note: 'filename' may have been free'd by above call! */
if (set_filename)
{
/* set the image title */
gimp_image_set_filename (gimage, filename);
/* note: 'filename' may have been free'd by above call! */
}
}
g_free (return_vals);
@ -1740,10 +1811,11 @@ clist_to_slist (GtkCList *file_list)
* error happened and leave the dialog up. Make sure it's sensitive.
*/
static void
file_save_with_proc (GImage *gimage,
gchar *full_filename,
gchar *raw_filename,
PlugInProcDef *save_proc)
file_save_with_proc (GImage *gimage,
gchar *full_filename,
gchar *raw_filename,
PlugInProcDef *save_proc,
gboolean set_filename)
{
gint status = PDB_EXECUTION_ERROR;
@ -1753,7 +1825,8 @@ file_save_with_proc (GImage *gimage,
status = file_save (gimage,
full_filename,
raw_filename,
RUN_INTERACTIVE);
RUN_INTERACTIVE,
set_filename);
/* hide the file save dialog on success */
if (status == PDB_SUCCESS)
@ -1775,12 +1848,12 @@ file_save_ok_callback (GtkWidget *widget,
gpointer data)
{
GtkFileSelection *fs;
gchar *filename;
gchar *raw_filename;
gchar *dot;
gint x;
struct stat buf;
gint err;
gchar *filename;
gchar *raw_filename;
gchar *dot;
gint x;
struct stat buf;
gint err;
fs = GTK_FILE_SELECTION (data);
filename = gtk_file_selection_get_filename (fs);
@ -1849,7 +1922,8 @@ file_save_ok_callback (GtkWidget *widget,
{
gtk_widget_set_sensitive (GTK_WIDGET (fs), FALSE);
file_save_with_proc (the_gimage, filename, raw_filename, save_file_proc);
file_save_with_proc (the_gimage, filename, raw_filename, save_file_proc,
set_filename);
gtk_widget_set_sensitive (GTK_WIDGET (fs), TRUE);
}
@ -1861,7 +1935,8 @@ file_dialog_show (GtkWidget *filesel)
menus_set_sensitive ("<Toolbox>/File/Open...", FALSE);
menus_set_sensitive ("<Image>/File/Open...", FALSE);
menus_set_sensitive ("<Image>/File/Save", FALSE);
menus_set_sensitive ("<Image>/File/Save As...", FALSE);
menus_set_sensitive ("<Image>/File/Save as...", FALSE);
menus_set_sensitive ("<Image>/File/Save a Copy as...", FALSE);
gtk_widget_grab_focus (GTK_FILE_SELECTION (filesel)->selection_entry);
gtk_widget_show (filesel);
@ -1878,7 +1953,8 @@ file_dialog_hide (GtkWidget *filesel)
if (gdisplay_active ())
{
menus_set_sensitive ("<Image>/File/Save", TRUE);
menus_set_sensitive ("<Image>/File/Save As...", TRUE);
menus_set_sensitive ("<Image>/File/Save as...", TRUE);
menus_set_sensitive ("<Image>/File/Save a Copy as...", TRUE);
}
return TRUE;
@ -1927,7 +2003,8 @@ file_overwrite_callback (GtkWidget *widget,
file_save_with_proc (the_gimage,
overwrite_data->full_filename,
overwrite_data->raw_filename,
save_file_proc);
save_file_proc,
set_filename);
}
/* always make file save dialog sensitive */

View file

@ -34,6 +34,8 @@ void file_save_callback (GtkWidget *widget,
gpointer data);
void file_save_as_callback (GtkWidget *widget,
gpointer data);
void file_save_a_copy_as_callback (GtkWidget *widget,
gpointer data);
void file_revert_callback (GtkWidget *widget,
gpointer data);

View file

@ -1777,7 +1777,8 @@ gdisplay_set_menu_sensitivity (GDisplay *gdisp)
menus_set_state ("<Image>/" menu, (condition) != 0)
SET_SENSITIVE ("File/Save", gdisp && drawable);
SET_SENSITIVE ("File/Save As...", gdisp && drawable);
SET_SENSITIVE ("File/Save as...", gdisp && drawable);
SET_SENSITIVE ("File/Save a Copy as...", gdisp && drawable);
SET_SENSITIVE ("File/Revert...", gdisp && gdisp->gimage->filename);
SET_SENSITIVE ("File/Close", gdisp);

View file

@ -59,6 +59,7 @@
#include "invert.h"
#include "lc_dialog.h"
#include "layer_select.h"
#include "layers_dialogP.h"
#include "module_db.h"
#include "palette.h"
#include "pattern_select.h"
@ -84,20 +85,29 @@
gdisp = gdisplay_active (); \
if (!gdisp) return
/* external functions */
extern void layers_dialog_layer_merge_query (GImage *, gboolean);
/* local functions */
static void image_resize_callback (GtkWidget *, gpointer);
static void image_scale_callback (GtkWidget *, gpointer);
static void gimage_mask_feather_callback (GtkWidget *, gdouble, GimpUnit,
gpointer);
static void gimage_mask_border_callback (GtkWidget *, gdouble, GimpUnit,
gpointer);
static void gimage_mask_grow_callback (GtkWidget *, gdouble, GimpUnit,
gpointer);
static void gimage_mask_shrink_callback (GtkWidget *, gdouble, GimpUnit,
gpointer);
static void image_resize_callback (GtkWidget *,
gpointer );
static void image_scale_callback (GtkWidget *,
gpointer );
static void gimage_mask_feather_callback (GtkWidget *,
gdouble ,
GimpUnit ,
gpointer );
static void gimage_mask_border_callback (GtkWidget *,
gdouble ,
GimpUnit ,
gpointer );
static void gimage_mask_grow_callback (GtkWidget *,
gdouble ,
GimpUnit ,
gpointer );
static void gimage_mask_shrink_callback (GtkWidget *,
gdouble ,
GimpUnit ,
gpointer );
/* local variables */
static gdouble selection_feather_radius = 5.0;
@ -130,6 +140,13 @@ file_save_as_cmd_callback (GtkWidget *widget,
file_save_as_callback (widget, client_data);
}
void
file_save_a_copy_as_cmd_callback (GtkWidget *widget,
gpointer client_data)
{
file_save_a_copy_as_callback (widget, client_data);
}
void
file_revert_cmd_callback (GtkWidget *widget,
gpointer client_data)

View file

@ -20,14 +20,15 @@
#define __COMMANDS_H__
void file_new_cmd_callback (GtkWidget *, gpointer, guint);
void file_open_cmd_callback (GtkWidget *, gpointer);
void file_save_cmd_callback (GtkWidget *, gpointer);
void file_save_as_cmd_callback (GtkWidget *, gpointer);
void file_revert_cmd_callback (GtkWidget *, gpointer);
void file_pref_cmd_callback (GtkWidget *, gpointer);
void file_close_cmd_callback (GtkWidget *, gpointer);
void file_quit_cmd_callback (GtkWidget *, gpointer);
void file_new_cmd_callback (GtkWidget *, gpointer, guint);
void file_open_cmd_callback (GtkWidget *, gpointer);
void file_save_cmd_callback (GtkWidget *, gpointer);
void file_save_as_cmd_callback (GtkWidget *, gpointer);
void file_save_a_copy_as_cmd_callback (GtkWidget *, gpointer);
void file_revert_cmd_callback (GtkWidget *, gpointer);
void file_pref_cmd_callback (GtkWidget *, gpointer);
void file_close_cmd_callback (GtkWidget *, gpointer);
void file_quit_cmd_callback (GtkWidget *, gpointer);
void edit_undo_cmd_callback (GtkWidget *, gpointer);
void edit_redo_cmd_callback (GtkWidget *, gpointer);

View file

@ -59,6 +59,7 @@
#include "invert.h"
#include "lc_dialog.h"
#include "layer_select.h"
#include "layers_dialogP.h"
#include "module_db.h"
#include "palette.h"
#include "pattern_select.h"
@ -84,20 +85,29 @@
gdisp = gdisplay_active (); \
if (!gdisp) return
/* external functions */
extern void layers_dialog_layer_merge_query (GImage *, gboolean);
/* local functions */
static void image_resize_callback (GtkWidget *, gpointer);
static void image_scale_callback (GtkWidget *, gpointer);
static void gimage_mask_feather_callback (GtkWidget *, gdouble, GimpUnit,
gpointer);
static void gimage_mask_border_callback (GtkWidget *, gdouble, GimpUnit,
gpointer);
static void gimage_mask_grow_callback (GtkWidget *, gdouble, GimpUnit,
gpointer);
static void gimage_mask_shrink_callback (GtkWidget *, gdouble, GimpUnit,
gpointer);
static void image_resize_callback (GtkWidget *,
gpointer );
static void image_scale_callback (GtkWidget *,
gpointer );
static void gimage_mask_feather_callback (GtkWidget *,
gdouble ,
GimpUnit ,
gpointer );
static void gimage_mask_border_callback (GtkWidget *,
gdouble ,
GimpUnit ,
gpointer );
static void gimage_mask_grow_callback (GtkWidget *,
gdouble ,
GimpUnit ,
gpointer );
static void gimage_mask_shrink_callback (GtkWidget *,
gdouble ,
GimpUnit ,
gpointer );
/* local variables */
static gdouble selection_feather_radius = 5.0;
@ -130,6 +140,13 @@ file_save_as_cmd_callback (GtkWidget *widget,
file_save_as_callback (widget, client_data);
}
void
file_save_a_copy_as_cmd_callback (GtkWidget *widget,
gpointer client_data)
{
file_save_a_copy_as_callback (widget, client_data);
}
void
file_revert_cmd_callback (GtkWidget *widget,
gpointer client_data)

View file

@ -20,14 +20,15 @@
#define __COMMANDS_H__
void file_new_cmd_callback (GtkWidget *, gpointer, guint);
void file_open_cmd_callback (GtkWidget *, gpointer);
void file_save_cmd_callback (GtkWidget *, gpointer);
void file_save_as_cmd_callback (GtkWidget *, gpointer);
void file_revert_cmd_callback (GtkWidget *, gpointer);
void file_pref_cmd_callback (GtkWidget *, gpointer);
void file_close_cmd_callback (GtkWidget *, gpointer);
void file_quit_cmd_callback (GtkWidget *, gpointer);
void file_new_cmd_callback (GtkWidget *, gpointer, guint);
void file_open_cmd_callback (GtkWidget *, gpointer);
void file_save_cmd_callback (GtkWidget *, gpointer);
void file_save_as_cmd_callback (GtkWidget *, gpointer);
void file_save_a_copy_as_cmd_callback (GtkWidget *, gpointer);
void file_revert_cmd_callback (GtkWidget *, gpointer);
void file_pref_cmd_callback (GtkWidget *, gpointer);
void file_close_cmd_callback (GtkWidget *, gpointer);
void file_quit_cmd_callback (GtkWidget *, gpointer);
void edit_undo_cmd_callback (GtkWidget *, gpointer);
void edit_redo_cmd_callback (GtkWidget *, gpointer);

View file

@ -215,7 +215,9 @@ static GimpItemFactoryEntry image_entries[] =
"file/dialogs/file_open.html", NULL },
{ { N_("/File/Save"), "<control>S", file_save_cmd_callback, 0 },
"file/dialogs/file_save.html", NULL },
{ { N_("/File/Save As..."), NULL, file_save_as_cmd_callback, 0 },
{ { N_("/File/Save as..."), NULL, file_save_as_cmd_callback, 0 },
"file/dialogs/file_save.html", NULL },
{ { N_("/File/Save a Copy as..."), NULL, file_save_a_copy_as_cmd_callback, 0 },
"file/dialogs/file_save.html", NULL },
{ { N_("/File/Revert..."), NULL, file_revert_cmd_callback, 0 },
"file/revert.html", NULL },

View file

@ -15,11 +15,21 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __LAYERS_DIALOG_P_H__
#define __LAYERS_DIALOG_P_H__
void render_fs_preview (GtkWidget *, GdkPixmap *);
void render_preview (TempBuf *, GtkWidget *, int, int, int);
void layers_dialog_invalidate_previews (GimpImage *gimage);
void render_fs_preview (GtkWidget *widget,
GdkPixmap *pixmap);
void render_preview (TempBuf *preview_buf,
GtkWidget *preview_widget,
gint width,
gint height,
gint channel);
void layers_dialog_invalidate_previews (GimpImage *gimage);
void layers_dialog_layer_merge_query (GImage *gimage,
gboolean merge_visible);
#endif /* __LAYERS_DIALOG_P_H__ */

View file

@ -215,7 +215,9 @@ static GimpItemFactoryEntry image_entries[] =
"file/dialogs/file_open.html", NULL },
{ { N_("/File/Save"), "<control>S", file_save_cmd_callback, 0 },
"file/dialogs/file_save.html", NULL },
{ { N_("/File/Save As..."), NULL, file_save_as_cmd_callback, 0 },
{ { N_("/File/Save as..."), NULL, file_save_as_cmd_callback, 0 },
"file/dialogs/file_save.html", NULL },
{ { N_("/File/Save a Copy as..."), NULL, file_save_a_copy_as_cmd_callback, 0 },
"file/dialogs/file_save.html", NULL },
{ { N_("/File/Revert..."), NULL, file_revert_cmd_callback, 0 },
"file/revert.html", NULL },

View file

@ -215,7 +215,9 @@ static GimpItemFactoryEntry image_entries[] =
"file/dialogs/file_open.html", NULL },
{ { N_("/File/Save"), "<control>S", file_save_cmd_callback, 0 },
"file/dialogs/file_save.html", NULL },
{ { N_("/File/Save As..."), NULL, file_save_as_cmd_callback, 0 },
{ { N_("/File/Save as..."), NULL, file_save_as_cmd_callback, 0 },
"file/dialogs/file_save.html", NULL },
{ { N_("/File/Save a Copy as..."), NULL, file_save_a_copy_as_cmd_callback, 0 },
"file/dialogs/file_save.html", NULL },
{ { N_("/File/Revert..."), NULL, file_revert_cmd_callback, 0 },
"file/revert.html", NULL },

View file

@ -215,7 +215,9 @@ static GimpItemFactoryEntry image_entries[] =
"file/dialogs/file_open.html", NULL },
{ { N_("/File/Save"), "<control>S", file_save_cmd_callback, 0 },
"file/dialogs/file_save.html", NULL },
{ { N_("/File/Save As..."), NULL, file_save_as_cmd_callback, 0 },
{ { N_("/File/Save as..."), NULL, file_save_as_cmd_callback, 0 },
"file/dialogs/file_save.html", NULL },
{ { N_("/File/Save a Copy as..."), NULL, file_save_a_copy_as_cmd_callback, 0 },
"file/dialogs/file_save.html", NULL },
{ { N_("/File/Revert..."), NULL, file_revert_cmd_callback, 0 },
"file/revert.html", NULL },