-/* -*- 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"
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;
/* 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;
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);
gboolean state);
-
/****************************************************************************/
/* Boilerplate Object stuff. */
/****************************************************************************/
{
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);
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,
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);
- }
- gl_util_font_family_list_free (family_names);
-
g_signal_connect (G_OBJECT (this->priv->font_family_combo),
"changed", G_CALLBACK (font_family_changed_cb), 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);
/* 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_util_font_family_list_free (family_names);
+
+ 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);
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);
}
-/****************************************************************************/
-/** 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. */
/*---------------------------------------------------------------------------*/
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)
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)
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);
}
}
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);
}
}
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,
/* 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)
/* 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)
/* 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)
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);
}
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);
}
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);
}
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);
}
}
+
+/*
+ * Local Variables: -- emacs
+ * mode: C -- emacs
+ * c-basic-offset: 8 -- emacs
+ * tab-width: 8 -- emacs
+ * indent-tabs-mode: nil -- emacs
+ * End: -- emacs
+ */