-/*
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/**
* (GLABELS) Label and Business Card Creation program for GNOME
*
* object-editor.c: object properties editor module
*/
#include <config.h>
-#include <gnome.h>
+#include "object-editor.h"
+
+#include <glib/gi18n.h>
#include <glade/glade-xml.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtknotebook.h>
+#include <gtk/gtkcombobox.h>
+#include <gtk/gtktogglebutton.h>
+
#include <math.h>
-#include "object-editor.h"
#include "prefs.h"
-#include "mygal/widget-color-combo.h"
+#include "color-combo.h"
#include "color.h"
#include "wdgt-chain-button.h"
+#include "wdgt-merge-menu.h"
#include "marshal.h"
+#include "util.h"
#include "object-editor-private.h"
gint gl_object_editor_signals[LAST_SIGNAL] = { 0 };
-static GtkVBoxClass *parent_class = NULL;
-
/*===========================================*/
/* Local function prototypes */
/*===========================================*/
-static void gl_object_editor_class_init (glObjectEditorClass *klass);
-static void gl_object_editor_init (glObjectEditor *editor);
static void gl_object_editor_finalize (GObject *object);
static void gl_object_notebook_construct_valist (glObjectEditor *editor,
+ glLabel *label,
glObjectEditorOption first_option,
va_list args);
static void prefs_changed_cb (glObjectEditor *editor);
+static void label_changed_cb (glLabel *label,
+ glObjectEditor *editor);
+
\f
/*****************************************************************************/
/* Boilerplate object stuff. */
/*****************************************************************************/
-GType
-gl_object_editor_get_type (void)
-{
- static GType type = 0;
-
- if (!type)
- {
- static const GTypeInfo info =
- {
- sizeof (glObjectEditorClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) gl_object_editor_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (glObjectEditor),
- 0, /* n_preallocs */
- (GInstanceInitFunc) gl_object_editor_init,
- NULL
- };
-
- type = g_type_register_static (GTK_TYPE_VBOX,
- "glObjectEditor", &info, 0);
- }
-
- return type;
-}
+G_DEFINE_TYPE (glObjectEditor, gl_object_editor, GTK_TYPE_VBOX);
static void
-gl_object_editor_class_init (glObjectEditorClass *klass)
+gl_object_editor_class_init (glObjectEditorClass *class)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
gl_debug (DEBUG_EDITOR, "START");
- parent_class = g_type_class_peek_parent (klass);
+ gl_object_editor_parent_class = g_type_class_peek_parent (class);
object_class->finalize = gl_object_editor_finalize;
NULL);
if (!editor->priv->gui) {
- g_warning ("Could not open object-editor.glade, reinstall glabels!");
+ g_critical ("Could not open object-editor.glade. gLabels may not be installed correctly!");
return;
}
/* Hide all notebook pages to start with. */
gtk_widget_hide_all (editor->priv->notebook);
+ gtk_widget_set_no_show_all (editor->priv->notebook, TRUE);
gl_debug (DEBUG_EDITOR, "END");
}
static void
gl_object_editor_finalize (GObject *object)
{
- glObjectEditor* editor;
+ glObjectEditor* editor = GL_OBJECT_EDITOR (object);;
gl_debug (DEBUG_EDITOR, "START");
g_return_if_fail (object != NULL);
-
- editor = GL_OBJECT_EDITOR (object);
-
g_return_if_fail (GL_IS_OBJECT_EDITOR (editor));
g_return_if_fail (editor->priv != NULL);
- g_free (editor->priv);
-
g_signal_handlers_disconnect_by_func (G_OBJECT(gl_prefs),
prefs_changed_cb, editor);
+ g_signal_handlers_disconnect_by_func (G_OBJECT(editor->priv->label),
+ label_changed_cb, editor);
- G_OBJECT_CLASS (parent_class)->finalize (object);
+ g_object_unref (editor->priv->gui);
+ g_free (editor->priv);
+
+ G_OBJECT_CLASS (gl_object_editor_parent_class)->finalize (object);
gl_debug (DEBUG_EDITOR, "END");
}
/*****************************************************************************/
GtkWidget*
gl_object_editor_new (gchar *image,
- gchar *label,
+ gchar *title,
+ glLabel *label,
glObjectEditorOption first_option, ...)
{
glObjectEditor *editor;
GTK_ICON_SIZE_LARGE_TOOLBAR);
}
- if (label) {
+ if (title) {
gchar *s;
s = g_strdup_printf ("<span weight=\"bold\">%s</span>",
- label);
+ title);
gtk_label_set_text (GTK_LABEL(editor->priv->title_label), s);
g_free (s);
gtk_notebook_set_homogeneous_tabs (GTK_NOTEBOOK(editor->priv->notebook), TRUE);
va_start (args, first_option);
- gl_object_notebook_construct_valist (editor, first_option, args);
+ gl_object_notebook_construct_valist (editor, label, first_option, args);
va_end (args);
gl_debug (DEBUG_EDITOR, "END");
/*--------------------------------------------------------------------------*/
static void
gl_object_notebook_construct_valist (glObjectEditor *editor,
+ glLabel *label,
glObjectEditorOption first_option,
va_list args)
{
gl_debug (DEBUG_EDITOR, "START");
+ editor->priv->label = label;
+
option = first_option;
for ( option=first_option; option; option=va_arg (args, glObjectEditorOption) ) {
pages++;
break;
+ case GL_OBJECT_EDITOR_SHADOW_PAGE:
+ gl_object_editor_prepare_shadow_page (editor);
+ pages++;
+ break;
+
default:
- g_warning ("option = %d", option);
+ g_message ("option = %d", option);
g_assert_not_reached ();
}
g_signal_connect_swapped (G_OBJECT (gl_prefs), "changed",
G_CALLBACK (prefs_changed_cb),
editor);
+ if (label)
+ {
+ label_changed_cb (label, editor);
+ g_signal_connect (G_OBJECT (label), "size_changed",
+ G_CALLBACK (label_changed_cb),
+ editor);
+ g_signal_connect (G_OBJECT (label), "merge_changed",
+ G_CALLBACK (label_changed_cb),
+ editor);
+ }
gl_debug (DEBUG_EDITOR, "END");
}
void
gl_object_editor_changed_cb (glObjectEditor *editor)
{
+ if (editor->priv->stop_signals) return;
+
gl_debug (DEBUG_EDITOR, "START");
/* Emit our "changed" signal */
void
gl_object_editor_size_changed_cb (glObjectEditor *editor)
{
+ if (editor->priv->stop_signals) return;
+
gl_debug (DEBUG_EDITOR, "START");
/* Emit our "size_changed" signal */
{
GList *keys;
GtkWidget *combo;
+ GtkWidget *menu;
gboolean fixed_flag;
+ gboolean state;
gl_debug (DEBUG_EDITOR, "START");
- if (editor->priv->edit_key_label) {
- gtk_widget_set_sensitive (editor->priv->edit_key_label, merge != NULL);
- }
-
- if (editor->priv->edit_key_combo) {
- gtk_widget_set_sensitive (editor->priv->edit_key_combo, merge != NULL);
- }
-
if (editor->priv->text_auto_shrink_check) {
gtk_widget_set_sensitive (editor->priv->text_auto_shrink_check,
merge != NULL);
}
+ if (editor->priv->text_page_vbox) {
+ gtk_widget_set_sensitive (editor->priv->text_color_key_radio, merge != NULL);
+ if (merge == NULL) {
+ gtk_toggle_button_set_active (
+ GTK_TOGGLE_BUTTON(editor->priv->text_color_radio), TRUE);
+ gtk_widget_set_sensitive (editor->priv->text_color_combo, TRUE);
+ gtk_widget_set_sensitive (editor->priv->text_color_key_combo, FALSE);
+ } else {
+ state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(editor->priv->text_color_key_radio));
+ gtk_widget_set_sensitive (editor->priv->text_color_combo, !state);
+ gtk_widget_set_sensitive (editor->priv->text_color_key_combo, state);
+
+ }
+ }
+
if (editor->priv->edit_insert_field_button) {
gtk_widget_set_sensitive (editor->priv->edit_insert_field_button,
merge != NULL);
GTK_TOGGLE_BUTTON(editor->priv->data_literal_radio), TRUE);
}
}
-
+
fixed_flag = editor->priv->data_format_fixed_flag;
if (editor->priv->data_format_label) {
gtk_widget_set_sensitive (editor->priv->data_format_label,
gtk_widget_set_sensitive (editor->priv->data_digits_spin,
(merge != NULL) && !fixed_flag);
}
-
- keys = gl_merge_get_key_list (merge);
- if ( keys != NULL ) {
- combo = editor->priv->img_key_combo;
- if (combo) {
- gtk_combo_set_popdown_strings (GTK_COMBO (combo), keys);
+ if (editor->priv->fill_page_vbox) {
+ gtk_widget_set_sensitive (editor->priv->fill_key_radio, merge != NULL);
+ if (merge == NULL) {
+ gtk_toggle_button_set_active (
+ GTK_TOGGLE_BUTTON(editor->priv->fill_color_radio), TRUE);
+ gtk_widget_set_sensitive (editor->priv->fill_color_combo, TRUE);
+ gtk_widget_set_sensitive (editor->priv->fill_key_combo, FALSE);
+ } else {
+ state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(editor->priv->fill_key_radio));
+ gtk_widget_set_sensitive (editor->priv->fill_color_combo, !state);
+ gtk_widget_set_sensitive (editor->priv->fill_key_combo, state);
+
+ }
+ }
+
+ if (editor->priv->line_page_vbox) {
+ gtk_widget_set_sensitive (editor->priv->line_key_radio, merge != NULL);
+ if (merge == NULL) {
+ gtk_toggle_button_set_active (
+ GTK_TOGGLE_BUTTON(editor->priv->line_color_radio), TRUE);
+ gtk_widget_set_sensitive (editor->priv->line_color_combo, TRUE);
+ gtk_widget_set_sensitive (editor->priv->line_key_combo, FALSE);
+ } else {
+ state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(editor->priv->line_key_radio));
+ gtk_widget_set_sensitive (editor->priv->line_color_combo, !state);
+ gtk_widget_set_sensitive (editor->priv->line_key_combo, state);
+
}
+ }
- combo = editor->priv->edit_key_combo;
- if (combo) {
- gtk_combo_set_popdown_strings (GTK_COMBO (combo), keys);
+ if (editor->priv->bc_page_vbox) {
+ gtk_widget_set_sensitive (editor->priv->bc_key_radio, merge != NULL);
+ if (merge == NULL) {
+ gtk_toggle_button_set_active (
+ GTK_TOGGLE_BUTTON(editor->priv->bc_color_radio), TRUE);
+ gtk_widget_set_sensitive (editor->priv->bc_color_combo, TRUE);
+ gtk_widget_set_sensitive (editor->priv->bc_key_combo, FALSE);
+ } else {
+ state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(editor->priv->bc_key_radio));
+ gtk_widget_set_sensitive (editor->priv->bc_color_combo, !state);
+ gtk_widget_set_sensitive (editor->priv->bc_key_combo, state);
+
}
+ }
- combo = editor->priv->data_key_combo;
- if (combo) {
- gtk_combo_set_popdown_strings (GTK_COMBO (combo), keys);
+ if (editor->priv->shadow_page_vbox) {
+ gtk_widget_set_sensitive (editor->priv->shadow_key_radio, merge != NULL);
+ if (merge == NULL) {
+ gtk_toggle_button_set_active (
+ GTK_TOGGLE_BUTTON(editor->priv->shadow_color_radio), TRUE);
+ gtk_widget_set_sensitive (editor->priv->shadow_color_combo, TRUE);
+ gtk_widget_set_sensitive (editor->priv->shadow_key_combo, FALSE);
+ } else {
+ state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(editor->priv->shadow_key_radio));
+ gtk_widget_set_sensitive (editor->priv->shadow_color_combo, !state);
+ gtk_widget_set_sensitive (editor->priv->shadow_key_combo, state);
+
}
+ }
- gl_merge_free_key_list (&keys);
- } else {
+ keys = gl_merge_get_key_list (merge);
+ if ( keys == NULL ) {
+ keys = g_list_append (keys, g_strdup (""));
+ }
- keys = g_list_append (keys, "");
+ combo = editor->priv->img_key_combo;
+ if (combo) {
+ gl_util_combo_box_set_strings (GTK_COMBO_BOX (combo), keys);
+ }
- combo = editor->priv->img_key_combo;
- if (combo) {
- gtk_combo_set_popdown_strings (GTK_COMBO (combo), keys);
- }
+ menu = editor->priv->edit_insert_field_menu;
+ if (menu) {
+ gl_wdgt_merge_menu_set_fields (GL_WDGT_MERGE_MENU(menu), keys);
+ }
- combo = editor->priv->edit_key_combo;
- if (combo) {
- gtk_combo_set_popdown_strings (GTK_COMBO (combo), keys);
- }
+ combo = editor->priv->data_key_combo;
+ if (combo) {
+ gl_util_combo_box_set_strings (GTK_COMBO_BOX (combo), keys);
+ }
+
+ combo = editor->priv->fill_key_combo;
+ if (combo) {
+ gl_util_combo_box_set_strings (GTK_COMBO_BOX (combo), keys);
+ }
- combo = editor->priv->data_key_combo;
- if (combo) {
- gtk_combo_set_popdown_strings (GTK_COMBO (combo), keys);
- }
+ combo = editor->priv->text_color_key_combo;
+ if (combo) {
+ gl_util_combo_box_set_strings (GTK_COMBO_BOX (combo), keys);
+ }
- g_list_free (keys);
- }
+ combo = editor->priv->line_key_combo;
+ if (combo) {
+ gl_util_combo_box_set_strings (GTK_COMBO_BOX (combo), keys);
+ }
+
+ combo = editor->priv->bc_key_combo;
+ if (combo) {
+ gl_util_combo_box_set_strings (GTK_COMBO_BOX (combo), keys);
+ }
+
+ combo = editor->priv->shadow_key_combo;
+ if (combo) {
+ gl_util_combo_box_set_strings (GTK_COMBO_BOX (combo), keys);
+ }
+
+ gl_merge_free_key_list (&keys);
gl_debug (DEBUG_EDITOR, "END");
}
gint int2)
{
GtkWidget *color_combo;
- ColorGroup *cg;
- gchar *cg_name;
guint color;
- GdkColor *gdk_color;
gchar *no_color;
switch (int1) {
+ case 3:
+ color = GL_COLOR_SHADOW_DEFAULT;
+ no_color = _("Default");
+ break;
+
case 2:
- cg_name = "text_color_group";
color = gl_prefs->default_text_color;
no_color = _("Default");
break;
case 1:
- cg_name = "line_color_group";
color = gl_prefs->default_line_color;
no_color = _("No line");
break;
case 0:
default:
- cg_name = "fill_color_group";
color = gl_prefs->default_fill_color;
no_color = _("No fill");
break;
}
- cg = color_group_fetch (cg_name, NULL);
- gdk_color = gl_color_to_gdk_color (color);
- color_combo = color_combo_new (NULL, no_color, gdk_color, cg);
- g_free (gdk_color);
+ color_combo = gl_color_combo_new (NULL, no_color, color, color);
- color_combo_box_set_preview_relief (COLOR_COMBO(color_combo), GTK_RELIEF_NORMAL);
+ gl_color_combo_set_relief (GL_COLOR_COMBO(color_combo), GTK_RELIEF_NORMAL);
return color_combo;
}
position_prefs_changed_cb (editor);
}
+ if (editor->priv->shadow_x_spin) {
+ shadow_prefs_changed_cb (editor);
+ }
+
+ gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE. label "changed" callback. */
+/*---------------------------------------------------------------------------*/
+static void
+label_changed_cb (glLabel *label,
+ glObjectEditor *editor)
+{
+ gdouble label_width, label_height;
+ glMerge *merge;
+
+ gl_debug (DEBUG_EDITOR, "START");
+
+ gl_label_get_size (label, &label_width, &label_height);
+ gl_object_editor_set_max_position (GL_OBJECT_EDITOR (editor),
+ label_width, label_height);
+ gl_object_editor_set_max_size (GL_OBJECT_EDITOR (editor),
+ label_width, label_height);
+ gl_object_editor_set_max_lsize (GL_OBJECT_EDITOR (editor),
+ label_width, label_height);
+ gl_object_editor_set_max_shadow_offset (GL_OBJECT_EDITOR (editor),
+ label_width, label_height);
+
+ merge = gl_label_get_merge (label);
+ gl_object_editor_set_key_names (editor, merge);
+
gl_debug (DEBUG_EDITOR, "END");
}