/*--------------------------------------------------------------------------*/
static void
data_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->data_literal_radio))) {
                gtk_widget_set_sensitive (editor->priv->data_text_entry, TRUE);
                gtk_widget_set_sensitive (editor->priv->data_key_combo, FALSE);
		gtk_widget_set_sensitive (editor->priv->data_format_label, FALSE);
		gtk_widget_set_sensitive (editor->priv->data_ex_label, FALSE);
		gtk_widget_set_sensitive (editor->priv->data_digits_label, FALSE);
		gtk_widget_set_sensitive (editor->priv->data_digits_spin, FALSE);
        } else {
                gtk_widget_set_sensitive (editor->priv->data_text_entry, FALSE);
                gtk_widget_set_sensitive (editor->priv->data_key_combo, TRUE);
		gtk_widget_set_sensitive (editor->priv->data_format_label, TRUE);
		gtk_widget_set_sensitive (editor->priv->data_ex_label, TRUE);
		gtk_widget_set_sensitive (editor->priv->data_digits_label,
					  !editor->priv->data_format_fixed_flag);
		gtk_widget_set_sensitive (editor->priv->data_digits_spin,
					  !editor->priv->data_format_fixed_flag);
	}
 
        gl_object_editor_changed_cb (editor);
 
        gl_debug (DEBUG_WDGT, "END");
}
/*--------------------------------------------------------------------------*/
static void
data_digits_spin_changed_cb (glObjectEditor *editor)
{
        gchar          *backend_name;
        const gchar    *backend_id;
        gchar          *style_name;
        const gchar    *id;
        guint           digits;
        gchar          *ex_string;

        backend_name = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (editor->priv->bc_backend_combo));
        backend_id = gl_barcode_backends_backend_name_to_id (backend_name);

        style_name = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (editor->priv->bc_style_combo));
        if ( style_name && *style_name != '\0' ) {
                id = gl_barcode_backends_style_name_to_id (backend_id, style_name);

                digits = gtk_spin_button_get_value (GTK_SPIN_BUTTON (editor->priv->data_digits_spin));
                ex_string = gl_barcode_backends_style_default_digits (backend_id, id, digits);
                gtk_label_set_text (GTK_LABEL(editor->priv->data_ex_label), ex_string);
                g_free (ex_string);
        }

        g_free (backend_name);
        g_free (style_name);

        gl_object_editor_changed_cb (editor);
}
/*--------------------------------------------------------------------------*/
static void
valign_toggle_cb (GtkToggleButton *toggle,
		 glObjectEditor  *editor)
{
        if (gtk_toggle_button_get_active (toggle)) {

                if (GTK_WIDGET (toggle) == GTK_WIDGET (editor->priv->text_top_toggle)) {
                        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
                                                      (editor->priv->text_vcenter_toggle),
                                                      FALSE);
                        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
                                                      (editor->priv->text_bottom_toggle),
                                                      FALSE);
                } else if (GTK_WIDGET (toggle) ==
                           GTK_WIDGET (editor->priv->text_vcenter_toggle)) {
                        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
                                                      (editor->priv->text_top_toggle),
                                                      FALSE);
                        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
                                                      (editor->priv->text_bottom_toggle),
                                                      FALSE);
                } else if (GTK_WIDGET (toggle) ==
                           GTK_WIDGET (editor->priv->text_bottom_toggle)) {
                        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
                                                      (editor->priv->text_top_toggle),
                                                      FALSE);
                        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
                                                      (editor->priv->text_vcenter_toggle),
                                                      FALSE);
                }

                gl_object_editor_changed_cb (editor);
        }

}
/*--------------------------------------------------------------------------*/
static void
style_changed_cb (glObjectEditor       *editor)
{
        gchar          *backend_name = NULL;
	const gchar    *backend_id;
        gchar          *style_string = NULL;
	const gchar    *id;
	gchar          *ex_string = NULL;
	guint           digits;

        backend_name =
		gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (editor->priv->bc_backend_combo));

        backend_id = gl_barcode_backends_backend_name_to_id (backend_name);

        style_string =
		gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (editor->priv->bc_style_combo));

        /* Don't emit if entry is empty. */
        if ( style_string && *style_string != 0 ) {
                id = gl_barcode_backends_style_name_to_id (backend_id, style_string);
                                                                                
                gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(editor->priv->bc_text_check),
					      gl_barcode_backends_style_can_text (backend_id, id));
                gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(editor->priv->bc_cs_check),
					      gl_barcode_backends_style_can_csum (backend_id, id));
                                                                                
                gtk_widget_set_sensitive (editor->priv->bc_text_check,
                                          gl_barcode_backends_style_text_optional (backend_id, id));
                gtk_widget_set_sensitive (editor->priv->bc_cs_check,
                                          gl_barcode_backends_style_csum_optional (backend_id, id));
                                                                                
		editor->priv->data_format_fixed_flag = !gl_barcode_backends_style_can_freeform (backend_id, id);
                digits = gl_barcode_backends_style_get_prefered_n(backend_id, id);
                gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->data_digits_spin), digits);
                                                                                
		ex_string = gl_barcode_backends_style_default_digits (backend_id, id, digits);
		gtk_label_set_text (GTK_LABEL(editor->priv->data_ex_label), ex_string);

		if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->data_literal_radio))) {
			gtk_widget_set_sensitive (editor->priv->data_format_label, FALSE);
			gtk_widget_set_sensitive (editor->priv->data_ex_label, FALSE);
			gtk_widget_set_sensitive (editor->priv->data_digits_label, FALSE);
			gtk_widget_set_sensitive (editor->priv->data_digits_spin, FALSE);
		} else {
			gtk_widget_set_sensitive (editor->priv->data_format_label, TRUE);
			gtk_widget_set_sensitive (editor->priv->data_ex_label, TRUE);
			gtk_widget_set_sensitive (editor->priv->data_digits_label,
						  !editor->priv->data_format_fixed_flag);
			gtk_widget_set_sensitive (editor->priv->data_digits_spin,
						  !editor->priv->data_format_fixed_flag);
		}
 
                gl_object_editor_changed_cb (editor);
        }
                                                                                
        g_free (style_string);
        g_free (ex_string);
}
/*--------------------------------------------------------------------------*/
static void
bc_radio_toggled_cb (glObjectEditor *editor)
{
        gl_debug (DEBUG_EDITOR, "START");
	
	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->bc_color_radio))) {
                gtk_widget_set_sensitive (editor->priv->bc_color_combo, TRUE);
                gtk_widget_set_sensitive (editor->priv->bc_key_combo, FALSE);
        } else {
                gtk_widget_set_sensitive (editor->priv->bc_color_combo, FALSE);
                gtk_widget_set_sensitive (editor->priv->bc_key_combo, TRUE);
		
	}
 
        gl_object_editor_changed_cb (editor);
}