]> git.sur5r.net Git - glabels/blobdiff - glabels2/src/object-editor-image-page.c
2007-09-14 Jim Evins <evins@snaught.com>
[glabels] / glabels2 / src / object-editor-image-page.c
index 114e29e4264e832589aa85921f934c278247c398..a975ab292a0412cd069d84b22ffe5ea8f64857f6 100644 (file)
@@ -1,3 +1,5 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
 /*
  *  (GLABELS) Label and Business Card Creation program for GNOME
  *
 #include <glib/gi18n.h>
 #include <gtk/gtkimage.h>
 #include <gtk/gtkfilechooserbutton.h>
-#include <gtk/gtkeditable.h>
+#include <gtk/gtkcombobox.h>
 #include <gtk/gtktogglebutton.h>
 #include <math.h>
 
 #include "prefs.h"
+#include "util.h"
 
 #include "object-editor-private.h"
 
@@ -58,6 +61,7 @@ static void update_preview_cb                   (GtkFileChooser *file_chooser,
                                                 gpointer        data);
 static void add_image_filters_to_chooser        (GtkFileChooser *file_chooser);
 
+static void img_selection_changed_cb (glObjectEditor *editor);
 
 \f
 /*--------------------------------------------------------------------------*/
@@ -66,8 +70,6 @@ static void add_image_filters_to_chooser        (GtkFileChooser *file_chooser);
 void
 gl_object_editor_prepare_image_page (glObjectEditor *editor)
 {
-       GdkColor      *gdk_color;
-       GtkFileFilter *filter;
        GtkWidget     *preview;
 
 
@@ -84,8 +86,8 @@ gl_object_editor_prepare_image_page (glObjectEditor *editor)
                                                               "img_file_button");
        editor->priv->img_key_combo    = glade_xml_get_widget (editor->priv->gui,
                                                               "img_key_combo");
-       editor->priv->img_key_entry    = glade_xml_get_widget (editor->priv->gui,
-                                                              "img_key_entry");
+
+       gl_util_combo_box_add_text_model ( GTK_COMBO_BOX(editor->priv->img_key_combo));
 
        /* Modify file button properties. */
        add_image_filters_to_chooser (GTK_FILE_CHOOSER (editor->priv->img_file_button));
@@ -101,9 +103,9 @@ gl_object_editor_prepare_image_page (glObjectEditor *editor)
        /* Connect signals */
        g_signal_connect_swapped (G_OBJECT (editor->priv->img_file_button),
                                  "selection-changed",
-                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_CALLBACK (img_selection_changed_cb),
                                  G_OBJECT (editor));
-       g_signal_connect_swapped (G_OBJECT (editor->priv->img_key_entry),
+       g_signal_connect_swapped (G_OBJECT (editor->priv->img_key_combo),
                                  "changed",
                                  G_CALLBACK (gl_object_editor_changed_cb),
                                  G_OBJECT (editor));
@@ -125,6 +127,8 @@ gl_object_editor_prepare_image_page (glObjectEditor *editor)
 static void
 img_radio_toggled_cb (glObjectEditor *editor)
 {
+        if (editor->priv->stop_signals) return;
+
         gl_debug (DEBUG_WDGT, "START");
  
        if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->img_file_radio))) {
@@ -149,16 +153,9 @@ gl_object_editor_set_image (glObjectEditor      *editor,
                            gboolean             merge_flag,
                            glTextNode          *text_node)
 {
-        gint pos;
         gl_debug (DEBUG_EDITOR, "START");
  
-       g_signal_handlers_block_by_func (G_OBJECT (editor->priv->img_file_button),
-                                        G_CALLBACK (gl_object_editor_changed_cb),
-                                        editor);
-       g_signal_handlers_block_by_func (G_OBJECT (editor->priv->img_key_entry),
-                                        G_CALLBACK (gl_object_editor_changed_cb),
-                                        editor);
+        editor->priv->stop_signals = TRUE;
 
         gtk_widget_set_sensitive (editor->priv->img_key_radio, merge_flag);
  
@@ -183,20 +180,11 @@ gl_object_editor_set_image (glObjectEditor      *editor,
                 gtk_widget_set_sensitive (editor->priv->img_file_button, FALSE);
                 gtk_widget_set_sensitive (editor->priv->img_key_combo, TRUE);
                                                                                 
-                gtk_editable_delete_text (GTK_EDITABLE (editor->priv->img_key_entry), 0, -1);
-                pos = 0;
-                gtk_editable_insert_text (GTK_EDITABLE (editor->priv->img_key_entry),
-                                          text_node->data,
-                                          strlen (text_node->data),
-                                          &pos);
+               gl_util_combo_box_set_active_text (GTK_COMBO_BOX (editor->priv->img_key_combo),
+                                                  text_node->data);
         }
                                                                                 
-       g_signal_handlers_unblock_by_func (G_OBJECT (editor->priv->img_file_button),
-                                          G_CALLBACK (gl_object_editor_changed_cb),
-                                          editor);
-       g_signal_handlers_unblock_by_func (G_OBJECT (editor->priv->img_key_entry),
-                                          G_CALLBACK (gl_object_editor_changed_cb),
-                                          editor);
+        editor->priv->stop_signals = FALSE;
                                                                                 
         gl_debug (DEBUG_EDITOR, "END");
 }
@@ -220,8 +208,7 @@ gl_object_editor_get_image (glObjectEditor      *editor)
         } else {
                 text_node->field_flag = TRUE;
                 text_node->data =
-                    gtk_editable_get_chars (GTK_EDITABLE (editor->priv->img_key_entry),
-                                            0, -1);
+                       gtk_combo_box_get_active_text (GTK_COMBO_BOX (editor->priv->img_key_combo));
         }
  
        gl_debug (DEBUG_EDITOR, "text_node: field_flag=%d, data=%s",
@@ -238,28 +225,28 @@ gl_object_editor_get_image (glObjectEditor      *editor)
 static void
 update_preview_cb (GtkFileChooser *file_chooser, gpointer data)
 {
-  GtkWidget *preview;
-  char *filename;
-  GdkPixbuf *pixbuf;
-  gboolean have_preview;
-
-  preview = GTK_WIDGET (data);
-  filename = gtk_file_chooser_get_preview_filename (file_chooser);
-
-  if (filename) {
-         pixbuf = gdk_pixbuf_new_from_file_at_size (filename, 128, 128, NULL);
-         have_preview = (pixbuf != NULL);
-         g_free (filename);
-
-         gtk_image_set_from_pixbuf (GTK_IMAGE (preview), pixbuf);
-         if (pixbuf)
-                 gdk_pixbuf_unref (pixbuf);
-
-         gtk_file_chooser_set_preview_widget_active (file_chooser,
-                                                     have_preview);
-  } else {
-         gtk_file_chooser_set_preview_widget_active (file_chooser, FALSE);
-  }
+        GtkWidget *preview;
+        char *filename;
+        GdkPixbuf *pixbuf;
+        gboolean have_preview;
+
+        preview = GTK_WIDGET (data);
+        filename = gtk_file_chooser_get_preview_filename (file_chooser);
+
+        if (filename) {
+                pixbuf = gdk_pixbuf_new_from_file_at_size (filename, 128, 128, NULL);
+                have_preview = (pixbuf != NULL);
+                g_free (filename);
+
+                gtk_image_set_from_pixbuf (GTK_IMAGE (preview), pixbuf);
+                if (pixbuf)
+                        gdk_pixbuf_unref (pixbuf);
+
+                gtk_file_chooser_set_preview_widget_active (file_chooser,
+                                                            have_preview);
+        } else {
+                gtk_file_chooser_set_preview_widget_active (file_chooser, FALSE);
+        }
 }
 
 /*--------------------------------------------------------------------------*/
@@ -290,16 +277,19 @@ add_image_filters_to_chooser (GtkFileChooser *chooser)
        /* Individual image filters */
        formats = gdk_pixbuf_get_formats ();
        for (it = formats; it != NULL; it = it->next) {
-               char *filter_name;
+               gchar *filter_name;
                GdkPixbufFormat *format;
                filter = gtk_file_filter_new ();
+               gchar *description, *name;
 
                format = (GdkPixbufFormat*) it->data;
 
                /* Filter name: First description then file extension, eg. "The PNG-Format (*.png)".*/
-               filter_name = g_strdup_printf (_("%s (*.%s)"), 
-                                              gdk_pixbuf_format_get_description (format),
-                                              gdk_pixbuf_format_get_name (format));
+               description = gdk_pixbuf_format_get_description (format);
+               name = gdk_pixbuf_format_get_name (format);
+               filter_name = g_strdup_printf (_("%s (*.%s)"), description, name);
+               g_free (description);
+               g_free (name);
                gtk_file_filter_set_name (filter, filter_name);
                g_free (filter_name);
 
@@ -334,3 +324,27 @@ add_image_filters_to_chooser (GtkFileChooser *chooser)
        }
        g_slist_free (filters);
 }
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE. Selection changed callback.                                     */
+/*--------------------------------------------------------------------------*/
+static void
+img_selection_changed_cb (glObjectEditor *editor)
+{
+        gchar *filename;
+
+        if (editor->priv->stop_signals) return;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+        filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(editor->priv->img_file_button));
+        if (filename != NULL)
+        {
+                /* Emit our "changed" signal */
+                g_signal_emit (G_OBJECT (editor), gl_object_editor_signals[CHANGED], 0);
+        }
+        g_free (filename);
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+