glColorNode*
gl_object_editor_get_bc_color (glObjectEditor      *editor)
{
	guint         color;
	glColorNode  *color_node;
	gboolean      is_default;

	gl_debug (DEBUG_EDITOR, "START");

	color_node = gl_color_node_new_default ();
	
	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->bc_key_radio))) {
		color_node->field_flag = TRUE;
		color_node->color = gl_prefs_model_get_default_line_color (gl_prefs);
		color_node->key = 
			gl_field_button_get_key (GL_FIELD_BUTTON (editor->priv->bc_key_combo));
	} else {
		color_node->field_flag = FALSE;
		color_node->key = NULL;
		color = gl_color_combo_get_color (GL_COLOR_COMBO(editor->priv->bc_color_combo),
                                                  &is_default);

		if (is_default) {
			color_node->color = gl_prefs_model_get_default_line_color (gl_prefs);
		} else {
			color_node->color = color;
		}
	}
	
	gl_debug (DEBUG_EDITOR, "END");

	return color_node;
}
/*--------------------------------------------------------------------------*/
void
gl_object_editor_prepare_line_page (glObjectEditor *editor)
{
	gl_debug (DEBUG_EDITOR, "START");

	/* Extract widgets from XML tree. */
        gl_builder_util_get_widgets (editor->priv->builder,
                                     "line_page_vbox",   &editor->priv->line_page_vbox,
                                     "line_width_spin",  &editor->priv->line_width_spin,
                                     "line_color_hbox",  &editor->priv->line_color_hbox,
                                     "line_key_hbox",    &editor->priv->line_key_hbox,
                                     "line_key_radio",   &editor->priv->line_key_radio,
                                     "line_color_radio", &editor->priv->line_color_radio,
                                     NULL);

	editor->priv->line_color_combo = gl_color_combo_new (_("No Line"),
                                                             GL_COLOR_NO_LINE,
                                                             gl_prefs_model_get_default_line_color (gl_prefs));
        gtk_box_pack_start (GTK_BOX (editor->priv->line_color_hbox),
                            editor->priv->line_color_combo,
                            FALSE, FALSE, 0);

        editor->priv->line_key_combo = gl_field_button_new (NULL);
        gtk_box_pack_start (GTK_BOX (editor->priv->line_key_hbox),
                            editor->priv->line_key_combo,
                            TRUE, TRUE, 0);

	/* Modify widgets based on configuration */
	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);	
	gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->line_width_spin),
				   gl_prefs_model_get_default_line_width (gl_prefs));
	gl_color_combo_set_color (GL_COLOR_COMBO(editor->priv->line_color_combo),
                                  gl_prefs_model_get_default_line_color (gl_prefs));

	/* Un-hide */
	gtk_widget_show_all (editor->priv->line_page_vbox);

	/* Connect signals */
	g_signal_connect_swapped (G_OBJECT (editor->priv->line_width_spin),
				  "changed",
				  G_CALLBACK (gl_object_editor_changed_cb),
				  G_OBJECT (editor));
	g_signal_connect_swapped (G_OBJECT (editor->priv->line_color_combo),
				  "color_changed",
				  G_CALLBACK (gl_object_editor_changed_cb),
				  G_OBJECT (editor));
	g_signal_connect_swapped (G_OBJECT (editor->priv->line_key_combo),
				  "changed",
				  G_CALLBACK (gl_object_editor_changed_cb),
				  G_OBJECT (editor));
	g_signal_connect_swapped (G_OBJECT (editor->priv->line_color_radio),
				  "toggled",
				  G_CALLBACK (line_radio_toggled_cb),
				  G_OBJECT (editor));				  
	g_signal_connect_swapped (G_OBJECT (editor->priv->line_key_radio),
				  "toggled",
				  G_CALLBACK (line_radio_toggled_cb),
				  G_OBJECT (editor));

	gl_debug (DEBUG_EDITOR, "END");
}
/*--------------------------------------------------------------------------*/
void
gl_object_editor_prepare_bc_page (glObjectEditor       *editor)
{
	GList        *backends = NULL;
        GList        *p;

	gl_debug (DEBUG_EDITOR, "START");

	/* Extract widgets from XML tree. */
        gl_builder_util_get_widgets (editor->priv->builder,
                                     "bc_page_vbox",          &editor->priv->bc_page_vbox,
                                     "bc_backend_combo_hbox", &editor->priv->bc_backend_combo_hbox,
                                     "bc_style_combo_hbox",   &editor->priv->bc_style_combo_hbox,
                                     "bc_text_check",         &editor->priv->bc_text_check,
                                     "bc_cs_check",           &editor->priv->bc_cs_check,
                                     "bc_color_hbox",         &editor->priv->bc_color_hbox,
                                     "bc_key_hbox",           &editor->priv->bc_key_hbox,
                                     "bc_key_radio",          &editor->priv->bc_key_radio,
                                     "bc_color_radio",        &editor->priv->bc_color_radio,
                                     "data_format_label",     &editor->priv->data_format_label,
                                     "data_ex_label",         &editor->priv->data_ex_label,
                                     "data_digits_label",     &editor->priv->data_digits_label,
                                     "data_digits_spin",      &editor->priv->data_digits_spin,
                                     NULL);

	editor->priv->data_format_fixed_flag = FALSE;

	editor->priv->bc_color_combo = gl_color_combo_new (_("Default"),
                                                           GL_COLOR_BC_DEFAULT,
                                                           gl_prefs_model_get_default_line_color (gl_prefs));
        gtk_box_pack_start (GTK_BOX (editor->priv->bc_color_hbox),
                            editor->priv->bc_color_combo,
                            FALSE, FALSE, 0);

        editor->priv->bc_key_combo = gl_field_button_new (NULL);
        gtk_box_pack_start (GTK_BOX (editor->priv->bc_key_hbox),
                            editor->priv->bc_key_combo,
                            TRUE, TRUE, 0);

        editor->priv->bc_backend_combo = gtk_combo_box_text_new ();
        gtk_box_pack_start (GTK_BOX (editor->priv->bc_backend_combo_hbox),
                            editor->priv->bc_backend_combo,
                            TRUE, TRUE, 0);

        editor->priv->bc_style_combo   = gtk_combo_box_text_new ();
        gtk_box_pack_start (GTK_BOX (editor->priv->bc_style_combo_hbox),
                            editor->priv->bc_style_combo,
                            TRUE, TRUE, 0);

	/* Load barcode backends */
	backends = gl_barcode_backends_get_backend_list ();
	gl_combo_util_set_strings (GTK_COMBO_BOX_TEXT(editor->priv->bc_backend_combo),
                                   backends);

        /* Kludge: Load styles for each backend once, so that when they are loaded for real the size of
         * of the widget has already been established and does't cause the sidebar to change size. */
        for ( p = backends; p != NULL; p=p->next )
        {
                gl_object_editor_load_bc_styles (editor, gl_barcode_backends_backend_name_to_id ((gchar *)p->data));
        }

	gl_barcode_backends_free_backend_list (backends);

	/* Modify widgets */
	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);
	
	/* Un-hide */
	gtk_widget_show_all (editor->priv->bc_page_vbox);

	/* Connect signals */
	g_signal_connect_swapped (G_OBJECT (editor->priv->bc_backend_combo),
				  "changed",
				  G_CALLBACK (backend_changed_cb),
				  G_OBJECT (editor));
	g_signal_connect_swapped (G_OBJECT (editor->priv->bc_style_combo),
				  "changed",
				  G_CALLBACK (style_changed_cb),
				  G_OBJECT (editor));
	g_signal_connect_swapped (G_OBJECT (editor->priv->bc_text_check),
				  "toggled",
				  G_CALLBACK (gl_object_editor_changed_cb),
				  G_OBJECT (editor));
	g_signal_connect_swapped (G_OBJECT (editor->priv->bc_cs_check),
				  "toggled",
				  G_CALLBACK (gl_object_editor_changed_cb),
				  G_OBJECT (editor));
	g_signal_connect_swapped (G_OBJECT (editor->priv->bc_color_combo),
				  "color_changed",
				  G_CALLBACK (gl_object_editor_changed_cb),
				  G_OBJECT (editor));
	g_signal_connect_swapped (G_OBJECT (editor->priv->bc_key_combo),
				  "changed",
				  G_CALLBACK (gl_object_editor_changed_cb),
				  G_OBJECT (editor));
	g_signal_connect_swapped (G_OBJECT (editor->priv->bc_color_radio),
				  "toggled",
				  G_CALLBACK (bc_radio_toggled_cb),
				  G_OBJECT (editor));				  
	g_signal_connect_swapped (G_OBJECT (editor->priv->bc_key_radio),
				  "toggled",
				  G_CALLBACK (bc_radio_toggled_cb),
				  G_OBJECT (editor));
	g_signal_connect_swapped (G_OBJECT (editor->priv->data_digits_spin),
				  "value-changed",
				  G_CALLBACK (data_digits_spin_changed_cb),
				  G_OBJECT (editor));

	gl_debug (DEBUG_EDITOR, "END");
}