[gimp] Use Glade + GtkBuilder for file-png.c save_dialog()
- From: Martin Nordholts <martinn src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gimp] Use Glade + GtkBuilder for file-png.c save_dialog()
- Date: Fri, 8 Jan 2010 20:36:09 +0000 (UTC)
commit 0abf5cc4f077384c13131fe840e42a7833401390
Author: Martin Nordholts <martinn src gnome org>
Date: Fri Jan 8 00:05:20 2010 +0100
Use Glade + GtkBuilder for file-png.c save_dialog()
To give us experience with Glade + GtkBuilder, use it for the save
dialog in the PNG plug-in. The layout is as good as
identical. Mnemonics still works and strings are still translated.
configure.ac | 1 +
plug-ins/Makefile.am | 1 +
plug-ins/common/file-png.c | 202 +++++++++++++++------------------------
plug-ins/ui/.gitignore | 2 +
plug-ins/ui/Makefile.am | 6 +
plug-ins/ui/file-png.ui | 226 ++++++++++++++++++++++++++++++++++++++++++++
po-plug-ins/POTFILES.in | 1 +
7 files changed, 313 insertions(+), 126 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 8802b28..35d449a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2013,6 +2013,7 @@ plug-ins/fractal-explorer/examples/Makefile
plug-ins/gfig/Makefile
plug-ins/gfig/gfig-examples/Makefile
plug-ins/gfig/images/Makefile
+plug-ins/ui/Makefile
plug-ins/gimpressionist/Brushes/Makefile
plug-ins/gimpressionist/Makefile
plug-ins/gimpressionist/Paper/Makefile
diff --git a/plug-ins/Makefile.am b/plug-ins/Makefile.am
index fd62823..6fa923a 100644
--- a/plug-ins/Makefile.am
+++ b/plug-ins/Makefile.am
@@ -69,6 +69,7 @@ SUBDIRS = \
flame \
fractal-explorer \
gfig \
+ ui \
gimpressionist \
gradient-flare \
help \
diff --git a/plug-ins/common/file-png.c b/plug-ins/common/file-png.c
index 7f7c86f..2213ef2 100644
--- a/plug-ins/common/file-png.c
+++ b/plug-ins/common/file-png.c
@@ -1768,21 +1768,35 @@ respin_cmap (png_structp pp,
}
+static GtkWidget *
+toggle_button_init (GtkBuilder *builder,
+ const gchar *name,
+ gboolean initial_value,
+ gboolean *value_pointer)
+{
+ GtkWidget *toggle = NULL;
+
+ toggle = GTK_WIDGET (gtk_builder_get_object (builder, name));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), initial_value);
+ g_signal_connect (toggle, "toggled",
+ G_CALLBACK (gimp_toggle_button_update),
+ value_pointer);
+
+ return toggle;
+}
+
static gboolean
save_dialog (gint32 image_ID,
gboolean alpha)
{
PngSaveGui pg;
GtkWidget *dialog;
- GtkWidget *table;
- GtkWidget *toggle;
- GtkObject *scale;
- GtkWidget *hbox;
- GtkWidget *button;
+ GtkBuilder *builder;
+ gchar *ui_file;
GimpParasite *parasite;
+ /* Dialog init */
dialog = gimp_export_dialog_new (_("PNG"), PLUG_IN_BINARY, SAVE_PROC);
-
g_signal_connect (dialog, "response",
G_CALLBACK (save_dialog_response),
&pg);
@@ -1790,142 +1804,78 @@ save_dialog (gint32 image_ID,
G_CALLBACK (gtk_main_quit),
NULL);
- table = gtk_table_new (10, 3, FALSE);
- gtk_table_set_col_spacings (GTK_TABLE (table), 6);
- gtk_table_set_row_spacings (GTK_TABLE (table), 6);
- gtk_container_set_border_width (GTK_CONTAINER (table), 12);
- gtk_box_pack_start (GTK_BOX (gimp_export_dialog_get_content_area (dialog)),
- table, TRUE, TRUE, 0);
- gtk_widget_show (table);
-
- pg.interlaced = toggle =
- gtk_check_button_new_with_mnemonic (_("_Interlacing (Adam7)"));
- gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 0, 1, GTK_FILL, 0, 0, 0);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle),
- pngvals.interlaced);
- gtk_widget_show (toggle);
-
- g_signal_connect (toggle, "toggled",
- G_CALLBACK (gimp_toggle_button_update),
- &pngvals.interlaced);
-
- pg.bkgd = toggle =
- gtk_check_button_new_with_mnemonic (_("Save _background color"));
- gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 1, 2, GTK_FILL, 0, 0, 0);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), pngvals.bkgd);
- gtk_widget_show (toggle);
-
- g_signal_connect (toggle, "toggled",
- G_CALLBACK (gimp_toggle_button_update), &pngvals.bkgd);
-
- pg.gama = toggle = gtk_check_button_new_with_mnemonic (_("Save _gamma"));
- gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 2, 3, GTK_FILL, 0, 0, 0);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), pngvals.gama);
- gtk_widget_show (toggle);
-
- g_signal_connect (toggle, "toggled",
- G_CALLBACK (gimp_toggle_button_update),
- &pngvals.gama);
-
- pg.offs = toggle =
- gtk_check_button_new_with_mnemonic (_("Save layer o_ffset"));
- gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 3, 4, GTK_FILL, 0, 0, 0);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), pngvals.offs);
- gtk_widget_show (toggle);
-
- g_signal_connect (toggle, "toggled",
- G_CALLBACK (gimp_toggle_button_update),
- &pngvals.offs);
-
- pg.phys = toggle = gtk_check_button_new_with_mnemonic (_("Save _resolution"));
- gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 4, 5, GTK_FILL, 0, 0, 0);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), pngvals.phys);
- gtk_widget_show (toggle);
-
- g_signal_connect (toggle, "toggled",
- G_CALLBACK (gimp_toggle_button_update),
- &pngvals.phys);
-
- pg.time = toggle =
- gtk_check_button_new_with_mnemonic (_("Save creation _time"));
- gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 5, 6, GTK_FILL, 0, 0, 0);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), pngvals.time);
- gtk_widget_show (toggle);
-
- g_signal_connect (toggle, "toggled",
- G_CALLBACK (gimp_toggle_button_update),
- &pngvals.time);
-
- pg.comment = toggle = gtk_check_button_new_with_mnemonic (_("Save comme_nt"));
- gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 6, 7, GTK_FILL, 0, 0, 0);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), pngvals.comment);
- gtk_widget_show (toggle);
+ /* GtkBuilder init */
+ builder = gtk_builder_new ();
+ ui_file = g_build_filename (gimp_data_directory (),
+ "ui/file-png.ui",
+ NULL);
+ gtk_builder_add_from_file (builder, ui_file, NULL /*error*/);
+ g_free (ui_file);
+ /* Table */
+ gtk_box_pack_start (GTK_BOX (gimp_export_dialog_get_content_area (dialog)),
+ GTK_WIDGET (gtk_builder_get_object (builder, "table")),
+ TRUE, TRUE, 0);
+
+ /* Toggles */
+ pg.interlaced = toggle_button_init (builder, "interlace",
+ pngvals.interlaced,
+ &pngvals.interlaced);
+ pg.bkgd = toggle_button_init (builder, "save-background-color",
+ pngvals.bkgd,
+ &pngvals.bkgd);
+ pg.gama = toggle_button_init (builder, "save-gamma",
+ pngvals.gama,
+ &pngvals.gama);
+ pg.offs = toggle_button_init (builder, "save-layer-offset",
+ pngvals.offs,
+ &pngvals.offs);
+ pg.phys = toggle_button_init (builder, "save-resolution",
+ pngvals.phys,
+ &pngvals.phys);
+ pg.time = toggle_button_init (builder, "save-creation-time",
+ pngvals.time,
+ &pngvals.time);
+
+ /* Comment toggle */
parasite = gimp_image_parasite_find (image_ID, "gimp-comment");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle),
- pngvals.comment && parasite != NULL);
- gtk_widget_set_sensitive (toggle, parasite != NULL);
+ pg.comment =
+ toggle_button_init (builder, "save-comment",
+ pngvals.comment && parasite != NULL,
+ &pngvals.comment);
+ gtk_widget_set_sensitive (pg.comment, parasite != NULL);
gimp_parasite_free (parasite);
- g_signal_connect (toggle, "toggled",
- G_CALLBACK (gimp_toggle_button_update),
- &pngvals.comment);
-
- pg.save_transp_pixels = toggle =
- gtk_check_button_new_with_mnemonic (_("Save color _values from "
- "transparent pixels"));
- gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 7, 8, GTK_FILL, 0, 0, 0);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle),
- alpha && pngvals.save_transp_pixels);
- gtk_widget_set_sensitive (toggle, alpha);
- gtk_widget_show (toggle);
-
- g_signal_connect (toggle, "toggled",
- G_CALLBACK (gimp_toggle_button_update),
- &pngvals.save_transp_pixels);
-
- pg.compression_level = scale =
- gimp_scale_entry_new (GTK_TABLE (table), 0, 8,
- _("Co_mpression level:"),
- SCALE_WIDTH, 0,
- pngvals.compression_level,
- 0.0, 9.0, 1.0, 1.0, 0, TRUE, 0.0, 0.0,
- _("Choose a high compression level "
- "for small file size"), NULL);
-
- g_signal_connect (scale, "value-changed",
+ /* Transparent pixels toggle */
+ pg.save_transp_pixels =
+ toggle_button_init (builder,
+ "save-transparent-pixels",
+ alpha && pngvals.save_transp_pixels,
+ &pngvals.save_transp_pixels);
+ gtk_widget_set_sensitive (pg.save_transp_pixels, alpha);
+
+ /* Compression level scale */
+ pg.compression_level =
+ GTK_OBJECT (gtk_builder_get_object (builder, "compression-level"));
+ g_signal_connect (pg.compression_level, "value-changed",
G_CALLBACK (gimp_int_adjustment_update),
&pngvals.compression_level);
- hbox = gtk_hbutton_box_new ();
- gtk_box_set_spacing (GTK_BOX (hbox), 6);
- gtk_button_box_set_layout (GTK_BUTTON_BOX (hbox), GTK_BUTTONBOX_START);
- gtk_table_attach (GTK_TABLE (table), hbox, 0, 3, 9, 10,
- GTK_FILL | GTK_EXPAND, 0, 0, 0);
- gtk_widget_show (hbox);
-
- button = gtk_button_new_with_mnemonic (_("_Load Defaults"));
- gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
- gtk_widget_show (button);
-
- g_signal_connect_swapped (button, "clicked",
+ /* Load/save defaults buttons */
+ g_signal_connect_swapped (gtk_builder_get_object (builder, "load-defaults"),
+ "clicked",
G_CALLBACK (load_gui_defaults),
&pg);
- button = gtk_button_new_with_mnemonic (_("S_ave Defaults"));
- gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
- gtk_widget_show (button);
-
- g_signal_connect_swapped (button, "clicked",
+ g_signal_connect_swapped (gtk_builder_get_object (builder, "save-defaults"),
+ "clicked",
G_CALLBACK (save_defaults),
&pg);
+ /* Show dialog and run */
gtk_widget_show (dialog);
-
pg.run = FALSE;
-
gtk_main ();
-
return pg.run;
}
diff --git a/plug-ins/ui/.gitignore b/plug-ins/ui/.gitignore
new file mode 100644
index 0000000..b336cc7
--- /dev/null
+++ b/plug-ins/ui/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/plug-ins/ui/Makefile.am b/plug-ins/ui/Makefile.am
new file mode 100644
index 0000000..62412f0
--- /dev/null
+++ b/plug-ins/ui/Makefile.am
@@ -0,0 +1,6 @@
+uidatadir = $(gimpdatadir)/ui
+
+uidata_DATA = \
+ file-png.ui
+
+EXTRA_DIST = $(uidata_DATA)
diff --git a/plug-ins/ui/file-png.ui b/plug-ins/ui/file-png.ui
new file mode 100644
index 0000000..0005595
--- /dev/null
+++ b/plug-ins/ui/file-png.ui
@@ -0,0 +1,226 @@
+<?xml version="1.0"?>
+<interface>
+ <!-- interface-requires gtk+ 2.12 -->
+ <!-- interface-naming-policy project-wide -->
+ <object class="GtkAdjustment" id="compression-level">
+ <property name="upper">9</property>
+
+ <!-- NOTE: Set value _after_ upper so the value don't get clamped -->
+ <property name="value">9</property>
+
+ <property name="step_increment">1</property>
+ <property name="page_increment">1</property>
+ </object>
+ <object class="GtkTable" id="table">
+ <property name="visible">True</property>
+ <property name="border_width">12</property>
+ <property name="n_rows">10</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">6</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkCheckButton" id="interlace">
+ <property name="label" translatable="yes">_Interlacing (Adam7)</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="right_attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="save-background-color">
+ <property name="label" translatable="yes">Save _background color</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="save-gamma">
+ <property name="label" translatable="yes">Save gamma</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="save-layer-offset">
+ <property name="label" translatable="yes">Save layer o_ffset</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="right_attach">3</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="save-resolution">
+ <property name="label" translatable="yes">Save _resolution</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="right_attach">3</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="save-creation-time">
+ <property name="label" translatable="yes">Save creation _time</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="right_attach">3</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="save-comment">
+ <property name="label" translatable="yes">Save comme_nt</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="right_attach">3</property>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="save-transparent-pixels">
+ <property name="label" translatable="yes">Save color _values from transparent pixels</property>
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="right_attach">3</property>
+ <property name="top_attach">7</property>
+ <property name="bottom_attach">8</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="compression-level-label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Co_mpression level:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">compression-level-spin</property>
+ </object>
+ <packing>
+ <property name="top_attach">8</property>
+ <property name="bottom_attach">9</property>
+ <property name="x_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHScale" id="compression-level-scale">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">compression-level</property>
+ <property name="draw_value">False</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">8</property>
+ <property name="bottom_attach">9</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="compression-level-spin">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="has_tooltip">True</property>
+ <property name="tooltip_text" translatable="yes">Choose a high compression level for small file size</property>
+ <property name="invisible_char">●</property>
+ <property name="adjustment">compression-level</property>
+ <property name="numeric">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">8</property>
+ <property name="bottom_attach">9</property>
+ <property name="x_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHButtonBox" id="hbuttonbox">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <property name="layout_style">start</property>
+ <child>
+ <object class="GtkButton" id="load-defaults">
+ <property name="label" translatable="yes">_Load Defaults</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="save-defaults">
+ <property name="label" translatable="yes">S_ave Defaults</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="right_attach">3</property>
+ <property name="top_attach">9</property>
+ <property name="bottom_attach">10</property>
+ </packing>
+ </child>
+ </object>
+</interface>
diff --git a/po-plug-ins/POTFILES.in b/po-plug-ins/POTFILES.in
index 512cf96..22b4ccb 100644
--- a/po-plug-ins/POTFILES.in
+++ b/po-plug-ins/POTFILES.in
@@ -207,6 +207,7 @@ plug-ins/gimpressionist/repaint.c
plug-ins/gimpressionist/size.c
plug-ins/gimpressionist/sizemap.c
plug-ins/gimpressionist/utils.c
+plug-ins/ui/file-png.ui
plug-ins/gradient-flare/gradient-flare.c
plug-ins/help-browser/dialog.c
plug-ins/help-browser/help-browser.c
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]