]> git.sur5r.net Git - glabels/blob - src/object-editor-bc-page.c
Imported Upstream version 3.0.0
[glabels] / src / object-editor-bc-page.c
1 /*
2  *  object-editor-bc-page.c
3  *  Copyright (C) 2003-2009  Jim Evins <evins@snaught.com>.
4  *
5  *  This file is part of gLabels.
6  *
7  *  gLabels is free software: you can redistribute it and/or modify
8  *  it under the terms of the GNU General Public License as published by
9  *  the Free Software Foundation, either version 3 of the License, or
10  *  (at your option) any later version.
11  *
12  *  gLabels is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  *  GNU General Public License for more details.
16  *
17  *  You should have received a copy of the GNU General Public License
18  *  along with gLabels.  If not, see <http://www.gnu.org/licenses/>.
19  */
20
21 #include <config.h>
22
23 #include "object-editor.h"
24
25 #include <glib/gi18n.h>
26 #include <gtk/gtk.h>
27 #include <math.h>
28
29 #include "prefs.h"
30 #include "color-combo.h"
31 #include "color.h"
32 #include "field-button.h"
33 #include "combo-util.h"
34 #include "builder-util.h"
35 #include "bc-backends.h"
36
37 #include "object-editor-private.h"
38
39 #include "debug.h"
40
41
42 /*===========================================*/
43 /* Private macros                            */
44 /*===========================================*/
45
46
47 /*===========================================*/
48 /* Private data types                        */
49 /*===========================================*/
50
51
52 /*===========================================*/
53 /* Private globals                           */
54 /*===========================================*/
55
56
57 /*===========================================*/
58 /* Local function prototypes                 */
59 /*===========================================*/
60
61 static void backend_changed_cb          (glObjectEditor       *editor);
62 static void style_changed_cb            (glObjectEditor       *editor);
63 static void bc_radio_toggled_cb         (glObjectEditor       *editor);
64 static void data_digits_spin_changed_cb (glObjectEditor       *editor);
65
66
67 /*--------------------------------------------------------------------------*/
68 /* PRIVATE.  Prepare size page.                                             */
69 /*--------------------------------------------------------------------------*/
70 void
71 gl_object_editor_prepare_bc_page (glObjectEditor       *editor)
72 {
73         GList        *backends = NULL;
74         GList        *p;
75
76         gl_debug (DEBUG_EDITOR, "START");
77
78         /* Extract widgets from XML tree. */
79         gl_builder_util_get_widgets (editor->priv->builder,
80                                      "bc_page_vbox",          &editor->priv->bc_page_vbox,
81                                      "bc_backend_combo_hbox", &editor->priv->bc_backend_combo_hbox,
82                                      "bc_style_combo_hbox",   &editor->priv->bc_style_combo_hbox,
83                                      "bc_text_check",         &editor->priv->bc_text_check,
84                                      "bc_cs_check",           &editor->priv->bc_cs_check,
85                                      "bc_color_hbox",         &editor->priv->bc_color_hbox,
86                                      "bc_key_hbox",           &editor->priv->bc_key_hbox,
87                                      "bc_key_radio",          &editor->priv->bc_key_radio,
88                                      "bc_color_radio",        &editor->priv->bc_color_radio,
89                                      "data_format_label",     &editor->priv->data_format_label,
90                                      "data_ex_label",         &editor->priv->data_ex_label,
91                                      "data_digits_label",     &editor->priv->data_digits_label,
92                                      "data_digits_spin",      &editor->priv->data_digits_spin,
93                                      NULL);
94
95         editor->priv->data_format_fixed_flag = FALSE;
96
97         editor->priv->bc_color_combo = gl_color_combo_new (_("Default"),
98                                                            GL_COLOR_BC_DEFAULT,
99                                                            gl_prefs_model_get_default_line_color (gl_prefs));
100         gtk_box_pack_start (GTK_BOX (editor->priv->bc_color_hbox),
101                             editor->priv->bc_color_combo,
102                             FALSE, FALSE, 0);
103
104         editor->priv->bc_key_combo = gl_field_button_new (NULL);
105         gtk_box_pack_start (GTK_BOX (editor->priv->bc_key_hbox),
106                             editor->priv->bc_key_combo,
107                             TRUE, TRUE, 0);
108
109         editor->priv->bc_backend_combo = gtk_combo_box_text_new ();
110         gtk_box_pack_start (GTK_BOX (editor->priv->bc_backend_combo_hbox),
111                             editor->priv->bc_backend_combo,
112                             TRUE, TRUE, 0);
113
114         editor->priv->bc_style_combo   = gtk_combo_box_text_new ();
115         gtk_box_pack_start (GTK_BOX (editor->priv->bc_style_combo_hbox),
116                             editor->priv->bc_style_combo,
117                             TRUE, TRUE, 0);
118
119         /* Load barcode backends */
120         backends = gl_barcode_backends_get_backend_list ();
121         gl_combo_util_set_strings (GTK_COMBO_BOX_TEXT(editor->priv->bc_backend_combo),
122                                    backends);
123
124         /* Kludge: Load styles for each backend once, so that when they are loaded for real the size of
125          * of the widget has already been established and does't cause the sidebar to change size. */
126         for ( p = backends; p != NULL; p=p->next )
127         {
128                 gl_object_editor_load_bc_styles (editor, gl_barcode_backends_backend_name_to_id ((gchar *)p->data));
129         }
130
131         gl_barcode_backends_free_backend_list (backends);
132
133         /* Modify widgets */
134         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->priv->bc_color_radio), TRUE);
135         gtk_widget_set_sensitive (editor->priv->bc_color_combo, TRUE);
136         gtk_widget_set_sensitive (editor->priv->bc_key_combo, FALSE);
137         
138         /* Un-hide */
139         gtk_widget_show_all (editor->priv->bc_page_vbox);
140
141         /* Connect signals */
142         g_signal_connect_swapped (G_OBJECT (editor->priv->bc_backend_combo),
143                                   "changed",
144                                   G_CALLBACK (backend_changed_cb),
145                                   G_OBJECT (editor));
146         g_signal_connect_swapped (G_OBJECT (editor->priv->bc_style_combo),
147                                   "changed",
148                                   G_CALLBACK (style_changed_cb),
149                                   G_OBJECT (editor));
150         g_signal_connect_swapped (G_OBJECT (editor->priv->bc_text_check),
151                                   "toggled",
152                                   G_CALLBACK (gl_object_editor_changed_cb),
153                                   G_OBJECT (editor));
154         g_signal_connect_swapped (G_OBJECT (editor->priv->bc_cs_check),
155                                   "toggled",
156                                   G_CALLBACK (gl_object_editor_changed_cb),
157                                   G_OBJECT (editor));
158         g_signal_connect_swapped (G_OBJECT (editor->priv->bc_color_combo),
159                                   "color_changed",
160                                   G_CALLBACK (gl_object_editor_changed_cb),
161                                   G_OBJECT (editor));
162         g_signal_connect_swapped (G_OBJECT (editor->priv->bc_key_combo),
163                                   "changed",
164                                   G_CALLBACK (gl_object_editor_changed_cb),
165                                   G_OBJECT (editor));
166         g_signal_connect_swapped (G_OBJECT (editor->priv->bc_color_radio),
167                                   "toggled",
168                                   G_CALLBACK (bc_radio_toggled_cb),
169                                   G_OBJECT (editor));                             
170         g_signal_connect_swapped (G_OBJECT (editor->priv->bc_key_radio),
171                                   "toggled",
172                                   G_CALLBACK (bc_radio_toggled_cb),
173                                   G_OBJECT (editor));
174         g_signal_connect_swapped (G_OBJECT (editor->priv->data_digits_spin),
175                                   "value-changed",
176                                   G_CALLBACK (data_digits_spin_changed_cb),
177                                   G_OBJECT (editor));
178
179         gl_debug (DEBUG_EDITOR, "END");
180 }
181
182
183 /*--------------------------------------------------------------------------*/
184 /* PRIVATE.  Callback for when backend has changed.                         */
185 /*--------------------------------------------------------------------------*/
186 static void
187 backend_changed_cb (glObjectEditor       *editor)
188 {
189         gchar          *backend_name = NULL;
190         const gchar    *backend_id;
191         const gchar    *style_name;
192
193         backend_name =
194                 gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (editor->priv->bc_backend_combo));
195
196         backend_id = gl_barcode_backends_backend_name_to_id (backend_name);
197
198         gl_object_editor_load_bc_styles (editor, backend_id);
199
200         style_name = gl_barcode_backends_style_id_to_name (backend_id, NULL);
201         gl_combo_util_set_active_text (GTK_COMBO_BOX (editor->priv->bc_style_combo),
202                                        style_name);
203
204         g_free (backend_name);
205 }
206
207
208 /*--------------------------------------------------------------------------*/
209 /* PRIVATE.  Callback for when style has changed.                           */
210 /*--------------------------------------------------------------------------*/
211 static void
212 style_changed_cb (glObjectEditor       *editor)
213 {
214         gchar          *backend_name = NULL;
215         const gchar    *backend_id;
216         gchar          *style_string = NULL;
217         const gchar    *id;
218         gchar          *ex_string = NULL;
219         guint           digits;
220
221         backend_name =
222                 gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (editor->priv->bc_backend_combo));
223
224         backend_id = gl_barcode_backends_backend_name_to_id (backend_name);
225
226         style_string =
227                 gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (editor->priv->bc_style_combo));
228
229         /* Don't emit if entry is empty. */
230         if ( style_string && *style_string != 0 ) {
231                 id = gl_barcode_backends_style_name_to_id (backend_id, style_string);
232                                                                                 
233                 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(editor->priv->bc_text_check),
234                                               gl_barcode_backends_style_can_text (backend_id, id));
235                 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(editor->priv->bc_cs_check),
236                                               gl_barcode_backends_style_can_csum (backend_id, id));
237                                                                                 
238                 gtk_widget_set_sensitive (editor->priv->bc_text_check,
239                                           gl_barcode_backends_style_text_optional (backend_id, id));
240                 gtk_widget_set_sensitive (editor->priv->bc_cs_check,
241                                           gl_barcode_backends_style_csum_optional (backend_id, id));
242                                                                                 
243                 editor->priv->data_format_fixed_flag = !gl_barcode_backends_style_can_freeform (backend_id, id);
244                 digits = gl_barcode_backends_style_get_prefered_n(backend_id, id);
245                 gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->data_digits_spin), digits);
246                                                                                 
247                 ex_string = gl_barcode_backends_style_default_digits (backend_id, id, digits);
248                 gtk_label_set_text (GTK_LABEL(editor->priv->data_ex_label), ex_string);
249
250                 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->data_literal_radio))) {
251                         gtk_widget_set_sensitive (editor->priv->data_format_label, FALSE);
252                         gtk_widget_set_sensitive (editor->priv->data_ex_label, FALSE);
253                         gtk_widget_set_sensitive (editor->priv->data_digits_label, FALSE);
254                         gtk_widget_set_sensitive (editor->priv->data_digits_spin, FALSE);
255                 } else {
256                         gtk_widget_set_sensitive (editor->priv->data_format_label, TRUE);
257                         gtk_widget_set_sensitive (editor->priv->data_ex_label, TRUE);
258                         gtk_widget_set_sensitive (editor->priv->data_digits_label,
259                                                   !editor->priv->data_format_fixed_flag);
260                         gtk_widget_set_sensitive (editor->priv->data_digits_spin,
261                                                   !editor->priv->data_format_fixed_flag);
262                 }
263  
264                 gl_object_editor_changed_cb (editor);
265         }
266                                                                                 
267         g_free (style_string);
268         g_free (ex_string);
269 }
270                                                                                 
271
272 /*****************************************************************************/
273 /* Load barcode styles based on backend_id.                                  */
274 /*****************************************************************************/
275 void
276 gl_object_editor_load_bc_styles (glObjectEditor      *editor,
277                                  const gchar         *backend_id)
278 {
279         GList       *styles;
280  
281         gl_debug (DEBUG_EDITOR, "START");
282
283         if ( !editor->priv->current_backend_id ||
284              strcmp(editor->priv->current_backend_id, backend_id) != 0 )
285         {
286                 g_signal_handlers_block_by_func (G_OBJECT (editor->priv->bc_style_combo),
287                                                  style_changed_cb, editor);
288
289                 styles = gl_barcode_backends_get_styles_list (backend_id);
290                 gl_combo_util_set_strings (GTK_COMBO_BOX_TEXT(editor->priv->bc_style_combo), styles);
291                 gl_barcode_backends_free_styles_list (styles);
292
293                 g_free (editor->priv->current_backend_id);
294                 editor->priv->current_backend_id = g_strdup (backend_id);
295
296                 g_signal_handlers_unblock_by_func (G_OBJECT (editor->priv->bc_style_combo),
297                                                    style_changed_cb, editor);
298         }
299
300         gl_debug (DEBUG_EDITOR, "END");
301 }
302
303
304 /*****************************************************************************/
305 /* Set barcode style.                                                        */
306 /*****************************************************************************/
307 void
308 gl_object_editor_set_bc_style (glObjectEditor            *editor,
309                                const glLabelBarcodeStyle *bc_style)
310 {
311         const gchar *backend_name;
312         const gchar *style_name;
313         gchar       *ex_string;
314         gint         format_digits;
315  
316         gl_debug (DEBUG_EDITOR, "START");
317
318         gl_object_editor_load_bc_styles (editor, bc_style->backend_id);
319
320
321         g_signal_handlers_block_by_func (G_OBJECT (editor->priv->bc_backend_combo),
322                                          backend_changed_cb, editor);
323         g_signal_handlers_block_by_func (G_OBJECT (editor->priv->bc_style_combo),
324                                          style_changed_cb, editor);
325         g_signal_handlers_block_by_func (G_OBJECT (editor->priv->bc_text_check),
326                                          gl_object_editor_changed_cb, editor);
327         g_signal_handlers_block_by_func (G_OBJECT (editor->priv->bc_cs_check),
328                                          gl_object_editor_changed_cb, editor);
329         g_signal_handlers_block_by_func (G_OBJECT (editor->priv->data_digits_spin),
330                                          data_digits_spin_changed_cb, editor);
331
332
333         backend_name = gl_barcode_backends_backend_id_to_name (bc_style->backend_id);
334         style_name   = gl_barcode_backends_style_id_to_name (bc_style->backend_id, bc_style->id);
335
336         gl_combo_util_set_active_text (GTK_COMBO_BOX (editor->priv->bc_backend_combo),
337                                        backend_name);
338         gl_combo_util_set_active_text (GTK_COMBO_BOX (editor->priv->bc_style_combo),
339                                        style_name);
340  
341         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->priv->bc_text_check),
342                                       bc_style->text_flag);
343  
344         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->priv->bc_cs_check),
345                                       bc_style->checksum_flag);
346
347         gtk_widget_set_sensitive (editor->priv->bc_text_check,
348                                   gl_barcode_backends_style_text_optional (bc_style->backend_id, bc_style->id));
349         gtk_widget_set_sensitive (editor->priv->bc_cs_check,
350                                   gl_barcode_backends_style_csum_optional (bc_style->backend_id, bc_style->id));
351
352         editor->priv->data_format_fixed_flag = !gl_barcode_backends_style_can_freeform (bc_style->backend_id, bc_style->id);
353
354         format_digits = bc_style->format_digits;
355         if (editor->priv->data_format_fixed_flag) {
356                 format_digits = gl_barcode_backends_style_get_prefered_n (bc_style->backend_id, bc_style->id);
357         }
358
359         ex_string = gl_barcode_backends_style_default_digits (bc_style->backend_id, bc_style->id, format_digits);
360         gtk_label_set_text (GTK_LABEL(editor->priv->data_ex_label), ex_string);
361         g_free (ex_string);
362
363         gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->data_digits_spin), format_digits);
364
365         if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->data_literal_radio))) {
366                 gtk_widget_set_sensitive (editor->priv->data_format_label, FALSE);
367                 gtk_widget_set_sensitive (editor->priv->data_ex_label, FALSE);
368                 gtk_widget_set_sensitive (editor->priv->data_digits_label, FALSE);
369                 gtk_widget_set_sensitive (editor->priv->data_digits_spin, FALSE);
370         } else {
371                 gtk_widget_set_sensitive (editor->priv->data_format_label, TRUE);
372                 gtk_widget_set_sensitive (editor->priv->data_ex_label, TRUE);
373                 gtk_widget_set_sensitive (editor->priv->data_digits_label,
374                                           !editor->priv->data_format_fixed_flag);
375                 gtk_widget_set_sensitive (editor->priv->data_digits_spin,
376                                           !editor->priv->data_format_fixed_flag);
377         }
378
379
380         g_signal_handlers_unblock_by_func (G_OBJECT (editor->priv->bc_backend_combo),
381                                            backend_changed_cb, editor);
382         g_signal_handlers_unblock_by_func (G_OBJECT (editor->priv->bc_style_combo),
383                                            style_changed_cb, editor);
384         g_signal_handlers_unblock_by_func (G_OBJECT (editor->priv->bc_text_check),
385                                            gl_object_editor_changed_cb, editor);
386         g_signal_handlers_unblock_by_func (G_OBJECT (editor->priv->bc_cs_check),
387                                            gl_object_editor_changed_cb, editor);
388         g_signal_handlers_unblock_by_func (G_OBJECT (editor->priv->data_digits_spin),
389                                            data_digits_spin_changed_cb, editor);
390
391
392         gl_debug (DEBUG_EDITOR, "END");
393 }
394
395
396 /*****************************************************************************/
397 /* Query barcode style.                                                      */
398 /*****************************************************************************/
399 glLabelBarcodeStyle *
400 gl_object_editor_get_bc_style (glObjectEditor      *editor)
401 {
402         gchar       *backend_name;
403         const gchar *backend_id;
404         gchar       *style_name;
405         const gchar *id;
406
407         glLabelBarcodeStyle *bc_style;
408
409         gl_debug (DEBUG_EDITOR, "START");
410                                                                                 
411         backend_name = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (editor->priv->bc_backend_combo));
412         backend_id = gl_barcode_backends_backend_name_to_id (backend_name);
413
414         style_name = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (editor->priv->bc_style_combo));
415         id = gl_barcode_backends_style_name_to_id (backend_id, style_name);
416
417         bc_style = gl_label_barcode_style_new ();
418
419         gl_label_barcode_style_set_backend_id (bc_style, backend_id);
420         gl_label_barcode_style_set_style_id (bc_style, id);
421
422         bc_style->text_flag     = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->bc_text_check));
423         bc_style->checksum_flag = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->bc_cs_check));
424         bc_style->format_digits = gtk_spin_button_get_value (GTK_SPIN_BUTTON(editor->priv->data_digits_spin));
425
426         g_free (backend_name);
427         g_free (style_name);
428
429         gl_debug (DEBUG_EDITOR, "END");
430
431         return bc_style;
432 }
433
434
435 /*****************************************************************************/
436 /* Set bc color.                                                             */
437 /*****************************************************************************/
438 void
439 gl_object_editor_set_bc_color (glObjectEditor      *editor,
440                                gboolean             merge_flag,
441                                glColorNode         *color_node)
442 {
443         gl_debug (DEBUG_EDITOR, "START");
444
445
446         g_signal_handlers_block_by_func (G_OBJECT (editor->priv->bc_color_combo),
447                                          gl_object_editor_changed_cb, editor);
448         g_signal_handlers_block_by_func (G_OBJECT (editor->priv->bc_color_radio),
449                                          bc_radio_toggled_cb, editor);
450         g_signal_handlers_block_by_func (G_OBJECT (editor->priv->bc_key_radio),
451                                          bc_radio_toggled_cb, editor);
452         g_signal_handlers_block_by_func (G_OBJECT (editor->priv->bc_key_combo),
453                                          gl_object_editor_changed_cb, editor);
454
455
456         gtk_widget_set_sensitive (editor->priv->bc_key_radio, merge_flag);
457
458         if ( color_node->color == GL_COLOR_NONE )
459         {
460                 gl_color_combo_set_to_default (GL_COLOR_COMBO(editor->priv->bc_color_combo));
461         }
462         else
463         {
464                 gl_color_combo_set_color (GL_COLOR_COMBO(editor->priv->bc_color_combo),
465                                           color_node->color);
466         }
467         
468         if (!color_node->field_flag || !merge_flag) {
469                 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
470                                                   (editor->priv->bc_color_radio), TRUE); 
471                 gtk_widget_set_sensitive (editor->priv->bc_color_combo, TRUE);
472                 gtk_widget_set_sensitive (editor->priv->bc_key_combo, FALSE);
473                 
474         } else {
475                 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
476                                                   (editor->priv->bc_key_radio), TRUE); 
477                 gtk_widget_set_sensitive (editor->priv->bc_color_combo, FALSE);
478                 gtk_widget_set_sensitive (editor->priv->bc_key_combo, TRUE);
479                 
480                 gl_field_button_set_key (GL_FIELD_BUTTON (editor->priv->bc_key_combo),
481                                            color_node->key);
482         }       
483         
484
485         g_signal_handlers_unblock_by_func (G_OBJECT (editor->priv->bc_color_combo),
486                                            gl_object_editor_changed_cb, editor);
487         g_signal_handlers_unblock_by_func (G_OBJECT (editor->priv->bc_color_radio),
488                                            bc_radio_toggled_cb, editor);
489         g_signal_handlers_unblock_by_func (G_OBJECT (editor->priv->bc_key_radio),
490                                            bc_radio_toggled_cb, editor);
491         g_signal_handlers_unblock_by_func (G_OBJECT (editor->priv->bc_key_combo),
492                                            gl_object_editor_changed_cb, editor);
493
494         
495         gl_debug (DEBUG_EDITOR, "END");
496 }
497
498
499 /*****************************************************************************/
500 /* Query bc color.                                                           */
501 /*****************************************************************************/
502 glColorNode*
503 gl_object_editor_get_bc_color (glObjectEditor      *editor)
504 {
505         guint         color;
506         glColorNode  *color_node;
507         gboolean      is_default;
508
509         gl_debug (DEBUG_EDITOR, "START");
510
511         color_node = gl_color_node_new_default ();
512         
513         if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->bc_key_radio))) {
514                 color_node->field_flag = TRUE;
515                 color_node->color = gl_prefs_model_get_default_line_color (gl_prefs);
516                 color_node->key = 
517                         gl_field_button_get_key (GL_FIELD_BUTTON (editor->priv->bc_key_combo));
518         } else {
519                 color_node->field_flag = FALSE;
520                 color_node->key = NULL;
521                 color = gl_color_combo_get_color (GL_COLOR_COMBO(editor->priv->bc_color_combo),
522                                                   &is_default);
523
524                 if (is_default) {
525                         color_node->color = gl_prefs_model_get_default_line_color (gl_prefs);
526                 } else {
527                         color_node->color = color;
528                 }
529         }
530         
531         gl_debug (DEBUG_EDITOR, "END");
532
533         return color_node;
534 }
535
536
537 /*--------------------------------------------------------------------------*/
538 /* PRIVATE.  barcode color radio callback.                                  */
539 /*--------------------------------------------------------------------------*/
540 static void
541 bc_radio_toggled_cb (glObjectEditor *editor)
542 {
543         gl_debug (DEBUG_EDITOR, "START");
544         
545         if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->bc_color_radio))) {
546                 gtk_widget_set_sensitive (editor->priv->bc_color_combo, TRUE);
547                 gtk_widget_set_sensitive (editor->priv->bc_key_combo, FALSE);
548         } else {
549                 gtk_widget_set_sensitive (editor->priv->bc_color_combo, FALSE);
550                 gtk_widget_set_sensitive (editor->priv->bc_key_combo, TRUE);
551                 
552         }
553  
554         gl_object_editor_changed_cb (editor);
555 }
556
557
558 /*--------------------------------------------------------------------------*/
559 /* PRIVATE.  digits spin changed callback.                                  */
560 /*--------------------------------------------------------------------------*/
561 static void
562 data_digits_spin_changed_cb (glObjectEditor *editor)
563 {
564         gchar          *backend_name;
565         const gchar    *backend_id;
566         gchar          *style_name;
567         const gchar    *id;
568         guint           digits;
569         gchar          *ex_string;
570
571         backend_name = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (editor->priv->bc_backend_combo));
572         backend_id = gl_barcode_backends_backend_name_to_id (backend_name);
573
574         style_name = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (editor->priv->bc_style_combo));
575         if ( style_name && *style_name != '\0' ) {
576                 id = gl_barcode_backends_style_name_to_id (backend_id, style_name);
577
578                 digits = gtk_spin_button_get_value (GTK_SPIN_BUTTON (editor->priv->data_digits_spin));
579                 ex_string = gl_barcode_backends_style_default_digits (backend_id, id, digits);
580                 gtk_label_set_text (GTK_LABEL(editor->priv->data_ex_label), ex_string);
581                 g_free (ex_string);
582         }
583
584         g_free (backend_name);
585         g_free (style_name);
586
587         gl_object_editor_changed_cb (editor);
588 }
589
590
591
592 /*
593  * Local Variables:       -- emacs
594  * mode: C                -- emacs
595  * c-basic-offset: 8      -- emacs
596  * tab-width: 8           -- emacs
597  * indent-tabs-mode: nil  -- emacs
598  * End:                   -- emacs
599  */