[gthumb/ext] make the type list in the "save image" dialog dynamic
- From: Paolo Bacchilega <paobac src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gthumb/ext] make the type list in the "save image" dialog dynamic
- Date: Sun, 11 Oct 2009 20:59:27 +0000 (UTC)
commit ad4ebcea06d56a8440d45f56f4fae5c8ee8bdaf6
Author: Paolo Bacchilega <paobac src gnome org>
Date: Sun Oct 11 22:57:51 2009 +0200
make the type list in the "save image" dialog dynamic
extensions/image_viewer/gth-image-viewer-page.c | 80 ++++++++++++++--------
extensions/pixbuf_savers/gth-jpeg-saver.c | 2 +
extensions/pixbuf_savers/gth-png-saver.c | 2 +
extensions/pixbuf_savers/gth-tga-saver.c | 8 +-
extensions/pixbuf_savers/gth-tiff-saver.c | 2 +
gthumb/gth-pixbuf-saver.c | 14 ++++
gthumb/gth-pixbuf-saver.h | 4 +
7 files changed, 79 insertions(+), 33 deletions(-)
---
diff --git a/extensions/image_viewer/gth-image-viewer-page.c b/extensions/image_viewer/gth-image-viewer-page.c
index 06f5f98..d94f4e3 100644
--- a/extensions/image_viewer/gth-image-viewer-page.c
+++ b/extensions/image_viewer/gth-image-viewer-page.c
@@ -792,17 +792,14 @@ typedef struct {
} SaveAsData;
-static struct {
+typedef struct {
const char *type;
const char *extensions;
const char *default_ext;
-}
-supported_formats[] = {
- { "image/jpeg", "jpeg jpg jpe", "jpeg" },
- { "image/png", "png", "png" },
- { "image/tiff", "tiff tif", "tiff" },
- { NULL, NULL }
-};
+} Format;
+
+
+static GList *supported_formats = NULL;
static void
@@ -819,9 +816,10 @@ save_as_response_cb (GtkDialog *file_sel,
int response,
SaveAsData *data)
{
- char *filename;
- int format;
- GFile *file;
+ char *filename;
+ int n_format;
+ Format *format;
+ GFile *file;
if (response != GTK_RESPONSE_ACCEPT) {
if (data->func != NULL) {
@@ -835,17 +833,18 @@ save_as_response_cb (GtkDialog *file_sel,
}
filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (file_sel));
- format = egg_file_format_chooser_get_format (EGG_FILE_FORMAT_CHOOSER (data->format_chooser), filename);
+ n_format = egg_file_format_chooser_get_format (EGG_FILE_FORMAT_CHOOSER (data->format_chooser), filename);
g_free (filename);
- if ((format < 1) || (format > G_N_ELEMENTS (supported_formats)))
+ if ((n_format < 1) || (n_format > g_list_length (supported_formats)))
return;
+ format = g_list_nth_data (supported_formats, n_format - 1);
file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (file_sel));
gth_file_data_set_file (data->file_data, file);
_gth_image_viewer_page_real_save ((GthViewerPage *) data->self,
file,
- supported_formats[format - 1].type,
+ format->type,
data->func,
data->user_data);
gtk_widget_destroy (GTK_WIDGET (data->file_sel));
@@ -858,23 +857,25 @@ static void
format_chooser_selection_changed_cb (EggFileFormatChooser *self,
SaveAsData *data)
{
- char *filename;
- int format;
- char *basename;
- char *basename_noext;
- char *new_basename;
+ char *filename;
+ int n_format;
+ Format *format;
+ char *basename;
+ char *basename_noext;
+ char *new_basename;
filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (data->file_sel));
- format = egg_file_format_chooser_get_format (EGG_FILE_FORMAT_CHOOSER (data->format_chooser), filename);
+ n_format = egg_file_format_chooser_get_format (EGG_FILE_FORMAT_CHOOSER (data->format_chooser), filename);
- if ((format < 1) || (format > G_N_ELEMENTS (supported_formats))) {
+ if ((n_format < 1) || (n_format > g_list_length (supported_formats))) {
g_free (filename);
return;
}
+ format = g_list_nth_data (supported_formats, n_format - 1);
basename = g_path_get_basename (filename);
basename_noext = _g_uri_remove_extension (basename);
- new_basename = g_strconcat (basename_noext, ".", supported_formats[format - 1].default_ext, NULL);
+ new_basename = g_strconcat (basename_noext, ".", format->default_ext, NULL);
gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (data->file_sel), new_basename);
g_free (new_basename);
@@ -917,7 +918,7 @@ gth_image_viewer_page_real_save_as (GthViewerPage *base,
char *uri;
EggFileFormatChooser *format_chooser;
SaveAsData *data;
- int i;
+ GList *scan;
self = GTH_IMAGE_VIEWER_PAGE (base);
file_sel = gtk_file_chooser_dialog_new (_("Save Image"),
@@ -934,16 +935,37 @@ gth_image_viewer_page_real_save_as (GthViewerPage *base,
/**/
+ if (supported_formats == NULL) {
+ GArray *savers;
+ int i;
+
+ savers = gth_main_get_type_set ("pixbuf-saver");
+ for (i = 0; (savers != NULL) && (i < savers->len); i++) {
+ GthPixbufSaver *pixbuf_saver;
+ Format *format;
+
+ pixbuf_saver = g_object_new (g_array_index (savers, GType, i), NULL);
+ format = g_new (Format, 1);
+ format->type = g_strdup (gth_pixbuf_saver_get_mime_type (pixbuf_saver));
+ format->extensions = g_strdup (gth_pixbuf_saver_get_default_ext (pixbuf_saver));
+ format->default_ext = g_strdup (gth_pixbuf_saver_get_default_ext (pixbuf_saver));
+ supported_formats = g_list_prepend (supported_formats, format);
+
+ g_object_unref (pixbuf_saver);
+ }
+ }
+
format_chooser = (EggFileFormatChooser *) egg_file_format_chooser_new ();
- for (i = 0; supported_formats[i].type != NULL; i++) {
- char *icon_name;
- char **extensions;
+ for (scan = supported_formats; scan != NULL; scan = scan->next) {
+ Format *format = scan->data;
+ char *icon_name;
+ char **extensions;
- icon_name = get_icon_name_for_type (supported_formats[i].type);
- extensions = g_strsplit (supported_formats[i].extensions, " ", -1);
+ icon_name = get_icon_name_for_type (format->type);
+ extensions = g_strsplit (format->extensions, " ", -1);
egg_file_format_chooser_add_format (format_chooser,
0,
- g_content_type_get_description (supported_formats[i].type),
+ g_content_type_get_description (format->type),
icon_name,
extensions[0],
extensions[1],
diff --git a/extensions/pixbuf_savers/gth-jpeg-saver.c b/extensions/pixbuf_savers/gth-jpeg-saver.c
index 3ccef70..3f48358 100644
--- a/extensions/pixbuf_savers/gth-jpeg-saver.c
+++ b/extensions/pixbuf_savers/gth-jpeg-saver.c
@@ -477,6 +477,8 @@ gth_jpeg_saver_class_init (GthJpegSaverClass *klass)
pixbuf_saver_class = GTH_PIXBUF_SAVER_CLASS (klass);
pixbuf_saver_class->id = "jpeg";
pixbuf_saver_class->display_name = _("JPEG");
+ pixbuf_saver_class->mime_type = "image/jpeg";
+ pixbuf_saver_class->default_ext = "jpeg";
pixbuf_saver_class->get_control = gth_jpeg_saver_get_control;
pixbuf_saver_class->save_options = gth_jpeg_saver_save_options;
pixbuf_saver_class->can_save = gth_jpeg_saver_can_save;
diff --git a/extensions/pixbuf_savers/gth-png-saver.c b/extensions/pixbuf_savers/gth-png-saver.c
index ce6996c..13094f4 100644
--- a/extensions/pixbuf_savers/gth-png-saver.c
+++ b/extensions/pixbuf_savers/gth-png-saver.c
@@ -144,6 +144,8 @@ gth_png_saver_class_init (GthPngSaverClass *klass)
pixbuf_saver_class = GTH_PIXBUF_SAVER_CLASS (klass);
pixbuf_saver_class->id = "png";
pixbuf_saver_class->display_name = _("PNG");
+ pixbuf_saver_class->mime_type = "image/png";
+ pixbuf_saver_class->default_ext = "png";
pixbuf_saver_class->get_control = gth_png_saver_get_control;
pixbuf_saver_class->save_options = gth_png_saver_save_options;
pixbuf_saver_class->can_save = gth_png_saver_can_save;
diff --git a/extensions/pixbuf_savers/gth-tga-saver.c b/extensions/pixbuf_savers/gth-tga-saver.c
index 7fdc941..7d6d6e7 100644
--- a/extensions/pixbuf_savers/gth-tga-saver.c
+++ b/extensions/pixbuf_savers/gth-tga-saver.c
@@ -332,7 +332,6 @@ gth_tga_saver_save_pixbuf (GthPixbufSaver *self,
char **option_keys;
char **option_values;
int i = -1;
- int i_value;
gboolean result;
pixbuf_type = get_pixbuf_type_from_mime_type (mime_type);
@@ -341,9 +340,8 @@ gth_tga_saver_save_pixbuf (GthPixbufSaver *self,
option_values = g_malloc (sizeof (char *) * 2);
i++;
- i_value = eel_gconf_get_integer (PREF_PNG_COMPRESSION_LEVEL, 6);
- option_keys[i] = g_strdup ("compression");;
- option_values[i] = g_strdup_printf ("%d", i_value);
+ option_keys[i] = g_strdup ("compression");
+ option_values[i] = g_strdup (eel_gconf_get_boolean (PREF_TGA_RLE_COMPRESSION, TRUE) ? "rle" : "none");
i++;
option_keys[i] = NULL;
@@ -379,6 +377,8 @@ gth_tga_saver_class_init (GthTgaSaverClass *klass)
pixbuf_saver_class = GTH_PIXBUF_SAVER_CLASS (klass);
pixbuf_saver_class->id = "tga";
pixbuf_saver_class->display_name = _("TGA");
+ pixbuf_saver_class->mime_type = "image/x-tga";
+ pixbuf_saver_class->default_ext = "tga";
pixbuf_saver_class->get_control = gth_tga_saver_get_control;
pixbuf_saver_class->save_options = gth_tga_saver_save_options;
pixbuf_saver_class->can_save = gth_tga_saver_can_save;
diff --git a/extensions/pixbuf_savers/gth-tiff-saver.c b/extensions/pixbuf_savers/gth-tiff-saver.c
index 933c96c..f6266fd 100644
--- a/extensions/pixbuf_savers/gth-tiff-saver.c
+++ b/extensions/pixbuf_savers/gth-tiff-saver.c
@@ -520,6 +520,8 @@ gth_tiff_saver_class_init (GthTiffSaverClass *klass)
pixbuf_saver_class = GTH_PIXBUF_SAVER_CLASS (klass);
pixbuf_saver_class->id = "tiff";
pixbuf_saver_class->display_name = _("TIFF");
+ pixbuf_saver_class->mime_type = "image/tiff";
+ pixbuf_saver_class->default_ext = "tiff";
pixbuf_saver_class->get_control = gth_tiff_saver_get_control;
pixbuf_saver_class->save_options = gth_tiff_saver_save_options;
pixbuf_saver_class->can_save = gth_tiff_saver_can_save;
diff --git a/gthumb/gth-pixbuf-saver.c b/gthumb/gth-pixbuf-saver.c
index deac3ab..b2ac165 100644
--- a/gthumb/gth-pixbuf-saver.c
+++ b/gthumb/gth-pixbuf-saver.c
@@ -119,6 +119,20 @@ gth_pixbuf_saver_get_display_name (GthPixbufSaver *self)
}
+const char *
+gth_pixbuf_saver_get_mime_type (GthPixbufSaver *self)
+{
+ return GTH_PIXBUF_SAVER_GET_CLASS (self)->mime_type;
+}
+
+
+const char *
+gth_pixbuf_saver_get_default_ext (GthPixbufSaver *self)
+{
+ return GTH_PIXBUF_SAVER_GET_CLASS (self)->default_ext;
+}
+
+
GtkWidget *
gth_pixbuf_saver_get_control (GthPixbufSaver *self)
{
diff --git a/gthumb/gth-pixbuf-saver.h b/gthumb/gth-pixbuf-saver.h
index d64c569..23d32b1 100644
--- a/gthumb/gth-pixbuf-saver.h
+++ b/gthumb/gth-pixbuf-saver.h
@@ -52,6 +52,8 @@ struct _GthPixbufSaverClass
const char *id;
const char *display_name;
+ const char *mime_type;
+ const char *default_ext;
/*< virtual functions >*/
@@ -70,6 +72,8 @@ struct _GthPixbufSaverClass
GType gth_pixbuf_saver_get_type (void);
const char * gth_pixbuf_saver_get_id (GthPixbufSaver *self);
const char * gth_pixbuf_saver_get_display_name (GthPixbufSaver *self);
+const char * gth_pixbuf_saver_get_mime_type (GthPixbufSaver *self);
+const char * gth_pixbuf_saver_get_default_ext (GthPixbufSaver *self);
GtkWidget * gth_pixbuf_saver_get_control (GthPixbufSaver *self);
void gth_pixbuf_saver_save_options (GthPixbufSaver *self);
gboolean gth_pixbuf_saver_can_save (GthPixbufSaver *self,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]