]> git.sur5r.net Git - glabels/blobdiff - glabels2/src/ui-property-bar.c
2009-09-08 Jim Evins <evins@snaught.com>
[glabels] / glabels2 / src / ui-property-bar.c
index 2cfca42fc2b91fc46cfba6e1bdeaa543166c8643..d2bb94c48286fb29f0cb94aea90b1daf1c46d005 100644 (file)
@@ -1,25 +1,21 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
-
-/**
- *  (GLABELS) Label and Business Card Creation program for GNOME
- *
- *  property-bar.c:  gLabels property bar
+/*
+ *  ui-property-bar.c
+ *  Copyright (C) 2003-2009  Jim Evins <evins@snaught.com>.
  *
- *  Copyright (C) 2003-2008  Jim Evins <evins@snaught.com>.
+ *  This file is part of gLabels.
  *
- *  This program is free software; you can redistribute it and/or modify
+ *  gLabels is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
+ *  the Free Software Foundation, either version 3 of the License, or
  *  (at your option) any later version.
  *
- *  This program is distributed in the hope that it will be useful,
+ *  gLabels is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ *  along with gLabels.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <config.h>
 
 #include <glib/gi18n.h>
 #include <gtk/gtkbuilder.h>
-#include <gtk/gtkcombobox.h>
 #include <gtk/gtkspinbutton.h>
 #include <gtk/gtktoolbar.h>
 #include <gtk/gtktoggletoolbutton.h>
-#include <gtk/gtktooltips.h>
 #include <string.h>
 
 #include "util.h"
-#include "color-combo.h"
+#include "font-combo.h"
+#include "color-combo-button.h"
 #include "stock-pixmaps/stockpixbufs.h"
 #include "prefs.h"
 #include "color.h"
@@ -57,11 +52,12 @@ struct _glUIPropertyBarPrivate {
 
        glView     *view;
 
-       GtkBuilder *gui;
+       GtkBuilder *builder;
 
        GtkWidget  *tool_bar;
 
        /* Font selection */
+       GtkWidget  *font_family_eventbox;
        GtkWidget  *font_family_combo;
        GtkWidget  *font_size_spin;
        GtkWidget  *font_bold_toggle;
@@ -74,11 +70,11 @@ struct _glUIPropertyBarPrivate {
 
        /* Color combos */
         GtkWidget  *text_color_eventbox;
-       GtkWidget  *text_color_combo;
-       GtkWidget  *fill_color_combo;
+       GtkWidget  *text_color_button;
         GtkWidget  *fill_color_eventbox;
-       GtkWidget  *line_color_combo;
+       GtkWidget  *fill_color_button;
         GtkWidget  *line_color_eventbox;
+       GtkWidget  *line_color_button;
 
        /* Line width */
        GtkWidget  *line_width_spin;
@@ -109,17 +105,17 @@ static void     font_family_changed_cb           (GtkComboBox          *combo,
 static void     font_size_changed_cb             (GtkSpinButton        *spin,
                                                  glUIPropertyBar      *this);
 
-static void     text_color_changed_cb            (glColorCombo         *cc,
+static void     text_color_changed_cb            (glColorComboButton   *cc,
                                                   guint                 color,
                                                  gboolean              is_default,
                                                  glUIPropertyBar      *this);
 
-static void     fill_color_changed_cb            (glColorCombo         *cc,
+static void     fill_color_changed_cb            (glColorComboButton   *cc,
                                                   guint                 color,
                                                  gboolean              is_default,
                                                  glUIPropertyBar      *this);
 
-static void     line_color_changed_cb            (glColorCombo         *cc,
+static void     line_color_changed_cb            (glColorComboButton   *cc,
                                                   guint                 color,
                                                  gboolean              is_default,
                                                  glUIPropertyBar      *this);
@@ -152,7 +148,6 @@ static void     set_line_width_items_sensitive   (glUIPropertyBar      *this,
                                                  gboolean              state);
 
 
-
 /****************************************************************************/
 /* Boilerplate Object stuff.                                                */
 /****************************************************************************/
@@ -199,9 +194,9 @@ gl_ui_property_bar_finalize (GObject *object)
         {
                g_object_unref (G_OBJECT(this->priv->view));
        }
-        if (this->priv->gui)
+        if (this->priv->builder)
         {
-                g_object_unref (G_OBJECT(this->priv->gui));
+                g_object_unref (G_OBJECT(this->priv->builder));
         }
        g_free (this->priv);
 
@@ -237,29 +232,31 @@ gl_ui_property_bar_new (void)
 static void
 gl_ui_property_bar_construct (glUIPropertyBar   *this)
 {
-       GtkBuilder *gui;
-        GError     *error = NULL;
-       GList      *family_names = NULL;
-       GList      *family_node;
-       GdkPixbuf  *pixbuf = NULL;
+       GtkBuilder    *builder;
+        static gchar  *object_ids[] = { "property_toolbar",
+                                        "adjustment1", "adjustment2",
+                                        NULL };
+        GError        *error = NULL;
+       GdkPixbuf     *pixbuf = NULL;
 
        gl_debug (DEBUG_PROPERTY_BAR, "START");
 
        this->priv->stop_signals = TRUE;
 
-        gui = gtk_builder_new ();
-       gtk_builder_add_from_file (gui,
-                                   GLABELS_BUILDER_DIR "property-bar.builder",
-                                   &error);
+        builder = gtk_builder_new ();
+        gtk_builder_add_objects_from_file (builder,
+                                           GLABELS_BUILDER_DIR "property-bar.builder",
+                                           object_ids,
+                                           &error);
        if (error) {
                g_critical ("%s\n\ngLabels may not be installed correctly!", error->message);
                 g_error_free (error);
                return;
        }
 
-        gl_util_get_builder_widgets (gui,
+        gl_util_get_builder_widgets (builder,
                                      "property_toolbar",        &this->priv->tool_bar,
-                                     "font_family_combo",       &this->priv->font_family_combo,
+                                     "font_family_eventbox",    &this->priv->font_family_eventbox,
                                      "font_size_spin",          &this->priv->font_size_spin,
                                      "font_bold_toggle",        &this->priv->font_bold_toggle,
                                      "font_italic_toggle",      &this->priv->font_italic_toggle,
@@ -274,69 +271,52 @@ gl_ui_property_bar_construct (glUIPropertyBar   *this)
 
        gtk_container_add (GTK_CONTAINER (this), this->priv->tool_bar);
 
+        this->priv->font_family_combo = gl_font_combo_new (gl_prefs->default_font_family);
+        gtk_container_add (GTK_CONTAINER (this->priv->font_family_eventbox),
+                           this->priv->font_family_combo);
+
         pixbuf = gdk_pixbuf_new_from_inline (-1, stock_text_24, FALSE, NULL);
-        this->priv->text_color_combo =
-                gl_color_combo_new (pixbuf,
-                                    _("Default"),
-                                    GL_COLOR_TEXT_DEFAULT,
-                                    gl_prefs->default_text_color);
-       gl_color_combo_set_relief (GL_COLOR_COMBO(this->priv->text_color_combo),
-                                   GTK_RELIEF_NONE);
+        this->priv->text_color_button =
+                gl_color_combo_button_new (pixbuf,
+                                           _("Default"),
+                                           GL_COLOR_TEXT_DEFAULT,
+                                           gl_prefs->default_text_color);
+        gl_color_combo_button_set_relief (GL_COLOR_COMBO_BUTTON(this->priv->text_color_button),
+                                          GTK_RELIEF_NONE);
        g_object_unref (G_OBJECT (pixbuf));
         gtk_container_add (GTK_CONTAINER (this->priv->text_color_eventbox),
-                           this->priv->text_color_combo);
+                           this->priv->text_color_button);
 
         pixbuf = gdk_pixbuf_new_from_inline (-1, stock_bucket_fill_24, FALSE, NULL);
-        this->priv->fill_color_combo =
-                gl_color_combo_new (pixbuf,
-                                    _("No Fill"),
-                                    GL_COLOR_NO_FILL,
-                                    gl_prefs->default_fill_color);
-       gl_color_combo_set_relief (GL_COLOR_COMBO(this->priv->fill_color_combo),
-                                   GTK_RELIEF_NONE);
+        this->priv->fill_color_button =
+                gl_color_combo_button_new (pixbuf,
+                                           _("No Fill"),
+                                           GL_COLOR_NO_FILL,
+                                           gl_prefs->default_fill_color);
+        gl_color_combo_button_set_relief (GL_COLOR_COMBO_BUTTON(this->priv->fill_color_button),
+                                          GTK_RELIEF_NONE);
        g_object_unref (G_OBJECT (pixbuf));
         gtk_container_add (GTK_CONTAINER (this->priv->fill_color_eventbox),
-                           this->priv->fill_color_combo);
+                           this->priv->fill_color_button);
 
         pixbuf = gdk_pixbuf_new_from_inline (-1, stock_pencil_24, FALSE, NULL);
-        this->priv->line_color_combo =
-                gl_color_combo_new (pixbuf,
-                                    _("No Line"),
-                                    GL_COLOR_NO_LINE,
-                                    gl_prefs->default_line_color);
-       gl_color_combo_set_relief (GL_COLOR_COMBO(this->priv->line_color_combo),
-                                   GTK_RELIEF_NONE);
+        this->priv->line_color_button =
+                gl_color_combo_button_new (pixbuf,
+                                           _("No Line"),
+                                           GL_COLOR_NO_LINE,
+                                           gl_prefs->default_line_color);
+       gl_color_combo_button_set_relief (GL_COLOR_COMBO_BUTTON(this->priv->line_color_button),
+                                          GTK_RELIEF_NONE);
        g_object_unref (G_OBJECT (pixbuf));
         gtk_container_add (GTK_CONTAINER (this->priv->line_color_eventbox),
-                           this->priv->line_color_combo);
+                           this->priv->line_color_button);
 
         /* Save reference to gui tree so we don't lose tooltips */
-        this->priv->gui = gui;
+        this->priv->builder = builder;
 
        set_doc_items_sensitive (this, FALSE);
 
        /* Font family entry widget */
-       gl_util_combo_box_add_text_model (GTK_COMBO_BOX (this->priv->font_family_combo));
-       family_names = gl_util_get_font_family_list ();
-       gl_util_combo_box_set_strings (GTK_COMBO_BOX (this->priv->font_family_combo),
-                                      family_names);
-       gtk_widget_set_size_request (this->priv->font_family_combo, 200, -1);
-
-       /* Make sure we have a valid font.  if not provide a good default. */
-       family_node = g_list_find_custom (family_names,
-                                         gl_prefs->default_font_family,
-                                         (GCompareFunc)g_utf8_collate);
-       if (family_node)
-        {
-               gtk_combo_box_set_active (GTK_COMBO_BOX (this->priv->font_family_combo),
-                                         g_list_position (family_names,
-                                                          family_node));
-       }
-        else
-        {
-               gtk_combo_box_set_active (GTK_COMBO_BOX (this->priv->font_family_combo), 0);
-       }
-
        g_signal_connect (G_OBJECT (this->priv->font_family_combo),
                          "changed", G_CALLBACK (font_family_changed_cb), this);
 
@@ -374,20 +354,23 @@ gl_ui_property_bar_construct (glUIPropertyBar   *this)
                          "toggled", G_CALLBACK (text_align_toggled_cb), this);
 
        /* Text color widget */
-       gl_color_combo_set_color (GL_COLOR_COMBO (this->priv->text_color_combo), gl_prefs->default_text_color);
-       g_signal_connect (G_OBJECT (this->priv->text_color_combo),
+       gl_color_combo_button_set_color (GL_COLOR_COMBO_BUTTON (this->priv->text_color_button),
+                                         gl_prefs->default_text_color);
+       g_signal_connect (G_OBJECT (this->priv->text_color_button),
                          "color_changed",
                          G_CALLBACK (text_color_changed_cb), this);
 
        /* Fill color widget */
-       gl_color_combo_set_color (GL_COLOR_COMBO (this->priv->fill_color_combo), gl_prefs->default_fill_color);
-       g_signal_connect (G_OBJECT (this->priv->fill_color_combo),
+       gl_color_combo_button_set_color (GL_COLOR_COMBO_BUTTON (this->priv->fill_color_button),
+                                         gl_prefs->default_fill_color);
+       g_signal_connect (G_OBJECT (this->priv->fill_color_button),
                          "color_changed",
                          G_CALLBACK (fill_color_changed_cb), this);
 
        /* Line color widget */
-       gl_color_combo_set_color (GL_COLOR_COMBO (this->priv->line_color_combo), gl_prefs->default_line_color);
-       g_signal_connect (G_OBJECT (this->priv->line_color_combo),
+       gl_color_combo_button_set_color (GL_COLOR_COMBO_BUTTON (this->priv->line_color_button),
+                                         gl_prefs->default_line_color);
+       g_signal_connect (G_OBJECT (this->priv->line_color_button),
                          "color_changed",
                          G_CALLBACK (line_color_changed_cb), this);
 
@@ -406,34 +389,12 @@ gl_ui_property_bar_construct (glUIPropertyBar   *this)
 /* Fill widgets with default values.                                        */
 /****************************************************************************/
 static void
-reset_to_default_properties (glView *view,
+reset_to_default_properties (glView          *view,
                             glUIPropertyBar *this)
 {
-       GList     *family_names;
-       gchar     *good_font_family;
-
-       /* Make sure we have a valid font.  if not provide a good default. */
-       family_names = gl_util_get_font_family_list ();
-       if (g_list_find_custom (family_names,
-                               view->default_font_family,
-                               (GCompareFunc)g_utf8_collate))
-        {
-               good_font_family = g_strdup (view->default_font_family);
-       }
-        else
-        {
-               if (family_names != NULL)
-                {
-                       good_font_family = g_strdup (family_names->data); /* 1st entry */
-               }
-                else
-                {
-                       good_font_family = NULL;
-               }
-       }
-       gl_util_combo_box_set_active_text (GTK_COMBO_BOX (this->priv->font_family_combo),
-                                          good_font_family);
-       g_free (good_font_family);
+
+       gl_font_combo_set_family (GL_FONT_COMBO (this->priv->font_family_combo),
+                                  view->default_font_family);
 
        gtk_spin_button_set_value (GTK_SPIN_BUTTON(this->priv->font_size_spin),
                                   view->default_font_size);
@@ -450,11 +411,14 @@ reset_to_default_properties (glView *view,
        gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (this->priv->text_align_right_radio),
                                           (view->default_text_alignment == PANGO_ALIGN_RIGHT));
 
-       gl_color_combo_set_color (GL_COLOR_COMBO(this->priv->text_color_combo), view->default_text_color);
+       gl_color_combo_button_set_color (GL_COLOR_COMBO_BUTTON(this->priv->text_color_button),
+                                         view->default_text_color);
 
-       gl_color_combo_set_color (GL_COLOR_COMBO(this->priv->fill_color_combo), view->default_fill_color);
+       gl_color_combo_button_set_color (GL_COLOR_COMBO_BUTTON(this->priv->fill_color_button),
+                                         view->default_fill_color);
 
-       gl_color_combo_set_color (GL_COLOR_COMBO(this->priv->line_color_combo), view->default_line_color);
+       gl_color_combo_button_set_color (GL_COLOR_COMBO_BUTTON(this->priv->line_color_button),
+                                         view->default_line_color);
 
        gtk_spin_button_set_value (GTK_SPIN_BUTTON(this->priv->line_width_spin),
                                   view->default_line_width);
@@ -492,36 +456,6 @@ gl_ui_property_bar_set_view (glUIPropertyBar *this,
 }
 
 
-/****************************************************************************/
-/** Set visiblity of property bar's tooltips.                               */
-/****************************************************************************/
-void
-gl_ui_property_bar_set_tooltips (glUIPropertyBar *this,
-                                gboolean         state)
-{
-       GtkTooltipsData *data;
-
-       gl_debug (DEBUG_PROPERTY_BAR, "START");
-
-       g_return_if_fail (this && GL_IS_UI_PROPERTY_BAR(this));
-
-       /* HACK: peek into one of our widgets to get the tooltips group created by builder. */
-       data = gtk_tooltips_data_get (this->priv->font_size_spin);
-       g_return_if_fail (data);
-
-       if (state)
-        {
-               gtk_tooltips_enable (data->tooltips);
-       }
-        else
-        {
-               gtk_tooltips_disable (data->tooltips);
-       }
-
-       gl_debug (DEBUG_PROPERTY_BAR, "END");
-}
-
-
 /*---------------------------------------------------------------------------*/
 /* PRIVATE.  View "selection state changed" callback.                        */
 /*---------------------------------------------------------------------------*/
@@ -634,8 +568,8 @@ update_text_properties (glView *view,
        if (is_same_font_family && (selection_font_family != NULL)) 
                gl_debug (DEBUG_PROPERTY_BAR, "same font family = %s", 
                          selection_font_family);
-       gl_util_combo_box_set_active_text (GTK_COMBO_BOX (this->priv->font_family_combo),
-                                          is_same_font_family?selection_font_family:"");
+       gl_font_combo_set_family (GL_FONT_COMBO (this->priv->font_family_combo),
+                                  is_same_font_family?selection_font_family:"");
        g_free (selection_font_family);
 
        if (is_same_font_size)
@@ -653,8 +587,8 @@ update_text_properties (glView *view,
        if (is_same_text_color)
         {
                gl_debug (DEBUG_PROPERTY_BAR, "same text color = %08x", selection_text_color);
-               gl_color_combo_set_color (GL_COLOR_COMBO (this->priv->text_color_combo),
-                                          selection_text_color);
+               gl_color_combo_button_set_color (GL_COLOR_COMBO_BUTTON (this->priv->text_color_button),
+                                                 selection_text_color);
        }
 
        if (is_same_is_italic)
@@ -745,8 +679,8 @@ update_fill_color (glView *view,
        if (is_same_fill_color)
         {
                gl_debug (DEBUG_PROPERTY_BAR, "same fill color = %08x", selection_fill_color);
-               gl_color_combo_set_color (GL_COLOR_COMBO (this->priv->fill_color_combo),
-                                          selection_fill_color);
+               gl_color_combo_button_set_color (GL_COLOR_COMBO_BUTTON (this->priv->fill_color_button),
+                                                 selection_fill_color);
        }
 }
 
@@ -809,8 +743,8 @@ update_line_color (glView *view,
        if (is_same_line_color)
         {
                gl_debug (DEBUG_PROPERTY_BAR, "same line color = %08x", selection_line_color);
-               gl_color_combo_set_color (GL_COLOR_COMBO (this->priv->line_color_combo),
-                                          selection_line_color);
+               gl_color_combo_button_set_color (GL_COLOR_COMBO_BUTTON (this->priv->line_color_button),
+                                                 selection_line_color);
        }
 }
 
@@ -918,7 +852,7 @@ font_family_changed_cb (GtkComboBox     *combo,
 
        gl_debug (DEBUG_PROPERTY_BAR, "START");
 
-       font_family = gtk_combo_box_get_active_text (GTK_COMBO_BOX (combo));
+       font_family = gl_font_combo_get_family (GL_FONT_COMBO (combo));
        if ( strlen(font_family) )
         {
                gl_view_set_selection_font_family (this->priv->view,
@@ -965,7 +899,7 @@ font_size_changed_cb (GtkSpinButton        *spin,
 /* PRIVATE.  Text color combo changed.                                      */
 /*--------------------------------------------------------------------------*/
 static void
-text_color_changed_cb (glColorCombo         *cc,
+text_color_changed_cb (glColorComboButton   *cc,
                        guint                 color,
                       gboolean              is_default,
                       glUIPropertyBar      *this)
@@ -1013,7 +947,7 @@ text_color_changed_cb (glColorCombo         *cc,
 /* PRIVATE.  Fill color combo changed.                                      */
 /*--------------------------------------------------------------------------*/
 static void
-fill_color_changed_cb (glColorCombo         *cc,
+fill_color_changed_cb (glColorComboButton   *cc,
                        guint                 color,
                       gboolean              is_default,
                       glUIPropertyBar      *this)
@@ -1062,7 +996,7 @@ fill_color_changed_cb (glColorCombo         *cc,
 /* PRIVATE.  Line color combo changed.                                      */
 /*--------------------------------------------------------------------------*/
 static void
-line_color_changed_cb (glColorCombo         *cc,
+line_color_changed_cb (glColorComboButton   *cc,
                        guint                 color,
                       gboolean              is_default,
                       glUIPropertyBar      *this)
@@ -1245,9 +1179,9 @@ set_doc_items_sensitive (glUIPropertyBar      *this,
        gtk_widget_set_sensitive (this->priv->text_align_left_radio,   state);
        gtk_widget_set_sensitive (this->priv->text_align_center_radio, state);
        gtk_widget_set_sensitive (this->priv->text_align_right_radio,  state);
-       gtk_widget_set_sensitive (this->priv->text_color_combo,        state);
-       gtk_widget_set_sensitive (this->priv->fill_color_combo,        state);
-       gtk_widget_set_sensitive (this->priv->line_color_combo,        state);
+       gtk_widget_set_sensitive (this->priv->text_color_button,       state);
+       gtk_widget_set_sensitive (this->priv->fill_color_button,       state);
+       gtk_widget_set_sensitive (this->priv->line_color_button,       state);
        gtk_widget_set_sensitive (this->priv->line_width_spin,         state);
 }
 
@@ -1266,7 +1200,7 @@ set_text_items_sensitive (glUIPropertyBar      *this,
        gtk_widget_set_sensitive (this->priv->text_align_left_radio,   state);
        gtk_widget_set_sensitive (this->priv->text_align_center_radio, state);
        gtk_widget_set_sensitive (this->priv->text_align_right_radio,  state);
-       gtk_widget_set_sensitive (this->priv->text_color_combo,        state);
+       gtk_widget_set_sensitive (this->priv->text_color_button,       state);
 }
 
 
@@ -1277,7 +1211,7 @@ static void
 set_fill_items_sensitive (glUIPropertyBar      *this,
                          gboolean              state)
 {
-       gtk_widget_set_sensitive (this->priv->fill_color_combo,        state);
+       gtk_widget_set_sensitive (this->priv->fill_color_button,       state);
 }
 
 
@@ -1288,7 +1222,7 @@ static void
 set_line_color_items_sensitive (glUIPropertyBar      *this,
                                gboolean              state)
 {
-       gtk_widget_set_sensitive (this->priv->line_color_combo,        state);
+       gtk_widget_set_sensitive (this->priv->line_color_button,       state);
 }
 
 
@@ -1303,3 +1237,12 @@ set_line_width_items_sensitive (glUIPropertyBar      *this,
 }
 
 
+
+/*
+ * Local Variables:       -- emacs
+ * mode: C                -- emacs
+ * c-basic-offset: 8      -- emacs
+ * tab-width: 8           -- emacs
+ * indent-tabs-mode: nil  -- emacs
+ * End:                   -- emacs
+ */