2 * (GLABELS) Label and Business Card Creation program for GNOME
4 * wdgt_bc_style.c: barcode style selection widget module
6 * Copyright (C) 2001-2002 Jim Evins <evins@snaught.com>.
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 #include "wdgt-bc-style.h"
30 /*===========================================*/
32 /*===========================================*/
39 typedef void (*glWdgtBCStyleSignal) (GObject * object, gpointer data);
41 /*===========================================*/
43 /*===========================================*/
45 static GtkContainerClass *parent_class;
47 static gint wdgt_bc_style_signals[LAST_SIGNAL] = { 0 };
49 /*===========================================*/
50 /* Local function prototypes */
51 /*===========================================*/
53 static void gl_wdgt_bc_style_class_init (glWdgtBCStyleClass * class);
54 static void gl_wdgt_bc_style_instance_init (glWdgtBCStyle * prop_style);
55 static void gl_wdgt_bc_style_finalize (GObject * object);
56 static void gl_wdgt_bc_style_construct (glWdgtBCStyle * prop_style,
58 static void changed_cb (glWdgtBCStyle * prop_style);
60 /*================================================================*/
61 /* Boilerplate Object stuff. */
62 /*================================================================*/
64 gl_wdgt_bc_style_get_type (void)
66 static guint wdgt_bc_style_type = 0;
68 if (!wdgt_bc_style_type) {
69 GTypeInfo wdgt_bc_style_info = {
70 sizeof (glWdgtBCStyleClass),
73 (GClassInitFunc) gl_wdgt_bc_style_class_init,
76 sizeof (glWdgtBCStyle),
78 (GInstanceInitFunc) gl_wdgt_bc_style_instance_init,
82 g_type_register_static (gtk_vbox_get_type (),
84 &wdgt_bc_style_info, 0);
87 return wdgt_bc_style_type;
91 gl_wdgt_bc_style_class_init (glWdgtBCStyleClass * class)
93 GObjectClass *object_class;
95 object_class = (GObjectClass *) class;
97 parent_class = gtk_type_class (gtk_vbox_get_type ());
99 object_class->finalize = gl_wdgt_bc_style_finalize;
101 wdgt_bc_style_signals[CHANGED] =
102 g_signal_new ("changed",
103 G_OBJECT_CLASS_TYPE(object_class),
105 G_STRUCT_OFFSET (glWdgtBCStyleClass, changed),
107 gl_marshal_VOID__VOID,
113 gl_wdgt_bc_style_instance_init (glWdgtBCStyle * prop_style)
115 prop_style->postnet_radio = NULL;
116 prop_style->ean_radio = NULL;
117 prop_style->upc_radio = NULL;
118 prop_style->isbn_radio = NULL;
119 prop_style->code39_radio = NULL;
120 prop_style->code128_radio = NULL;
121 prop_style->code128c_radio = NULL;
122 prop_style->code128b_radio = NULL;
123 prop_style->i25_radio = NULL;
124 prop_style->cbr_radio = NULL;
125 prop_style->msi_radio = NULL;
126 prop_style->pls_radio = NULL;
130 gl_wdgt_bc_style_finalize (GObject * object)
132 glWdgtBCStyle *prop_style;
133 glWdgtBCStyleClass *class;
135 g_return_if_fail (object != NULL);
136 g_return_if_fail (GL_IS_WDGT_BC_STYLE (object));
138 prop_style = GL_WDGT_BC_STYLE (object);
140 G_OBJECT_CLASS (parent_class)->finalize (object);
144 gl_wdgt_bc_style_new (gchar * label)
146 glWdgtBCStyle *prop_style;
148 prop_style = g_object_new (gl_wdgt_bc_style_get_type (), NULL);
150 gl_wdgt_bc_style_construct (prop_style, label);
152 return GTK_WIDGET (prop_style);
155 /*============================================================*/
156 /* Construct composite widget. */
157 /*============================================================*/
159 gl_wdgt_bc_style_construct (glWdgtBCStyle * prop,
162 GtkWidget *wvbox, *wframe, *wvbox1, *whbox2, *wvbox2;
163 GSList *radio_group = NULL;
165 wvbox = GTK_WIDGET (prop);
167 wframe = gtk_frame_new (label);
168 gtk_box_pack_start (GTK_BOX (wvbox), wframe, FALSE, FALSE, 0);
170 wvbox1 = gtk_vbox_new (FALSE, GNOME_PAD);
171 gtk_container_set_border_width (GTK_CONTAINER (wvbox1), 10);
172 gtk_container_add (GTK_CONTAINER (wframe), wvbox1);
174 whbox2 = gtk_hbox_new (FALSE, GNOME_PAD);
175 gtk_container_add (GTK_CONTAINER (wvbox1), whbox2);
177 /* ... Start column ... */
178 wvbox2 = gtk_vbox_new (FALSE, GNOME_PAD);
179 gtk_container_set_border_width (GTK_CONTAINER (wvbox2), 10);
180 gtk_box_pack_start (GTK_BOX (whbox2), wvbox2, FALSE, FALSE, 0);
183 prop->postnet_radio =
184 gtk_radio_button_new_with_label (radio_group, "POSTNET");
186 gtk_radio_button_get_group (GTK_RADIO_BUTTON (prop->postnet_radio));
187 gtk_box_pack_start (GTK_BOX (wvbox2), prop->postnet_radio,
189 g_signal_connect_swapped (G_OBJECT (prop->postnet_radio), "toggled",
190 G_CALLBACK (changed_cb),
194 prop->ean_radio = gtk_radio_button_new_with_label (radio_group, "EAN");
196 gtk_radio_button_get_group (GTK_RADIO_BUTTON (prop->ean_radio));
197 gtk_box_pack_start (GTK_BOX (wvbox2), prop->ean_radio, FALSE, FALSE, 0);
198 g_signal_connect_swapped (G_OBJECT (prop->ean_radio), "toggled",
199 G_CALLBACK (changed_cb),
203 prop->upc_radio = gtk_radio_button_new_with_label (radio_group, "UPC");
205 gtk_radio_button_get_group (GTK_RADIO_BUTTON (prop->upc_radio));
206 gtk_box_pack_start (GTK_BOX (wvbox2), prop->upc_radio, FALSE, FALSE, 0);
207 g_signal_connect_swapped (G_OBJECT (prop->upc_radio), "toggled",
208 G_CALLBACK (changed_cb),
213 gtk_radio_button_new_with_label (radio_group, "ISBN");
215 gtk_radio_button_get_group (GTK_RADIO_BUTTON (prop->isbn_radio));
216 gtk_box_pack_start (GTK_BOX (wvbox2), prop->isbn_radio,
218 g_signal_connect_swapped (G_OBJECT (prop->isbn_radio), "toggled",
219 G_CALLBACK (changed_cb),
224 gtk_radio_button_new_with_label (radio_group, "Code 39");
226 gtk_radio_button_get_group (GTK_RADIO_BUTTON (prop->code39_radio));
227 gtk_box_pack_start (GTK_BOX (wvbox2), prop->code39_radio,
229 g_signal_connect_swapped (G_OBJECT (prop->code39_radio), "toggled",
230 G_CALLBACK (changed_cb),
234 prop->code128_radio =
235 gtk_radio_button_new_with_label (radio_group, "Code 128");
237 gtk_radio_button_get_group (GTK_RADIO_BUTTON (prop->code128_radio));
238 gtk_box_pack_start (GTK_BOX (wvbox2), prop->code128_radio,
240 g_signal_connect_swapped (G_OBJECT (prop->code128_radio), "toggled",
241 G_CALLBACK (changed_cb),
244 /* ... Start column ... */
245 wvbox2 = gtk_vbox_new (FALSE, GNOME_PAD);
246 gtk_container_set_border_width (GTK_CONTAINER (wvbox2), 10);
247 gtk_box_pack_start (GTK_BOX (whbox2), wvbox2, FALSE, FALSE, 0);
249 /* CODE128B button */
250 prop->code128b_radio =
251 gtk_radio_button_new_with_label (radio_group, "Code 128-B");
253 gtk_radio_button_get_group (GTK_RADIO_BUTTON (prop->code128b_radio));
254 gtk_box_pack_start (GTK_BOX (wvbox2), prop->code128b_radio,
256 g_signal_connect_swapped (G_OBJECT (prop->code128b_radio), "toggled",
257 G_CALLBACK (changed_cb),
260 /* CODE128C button */
261 prop->code128c_radio =
262 gtk_radio_button_new_with_label (radio_group, "Code 128-C");
264 gtk_radio_button_get_group (GTK_RADIO_BUTTON (prop->code128c_radio));
265 gtk_box_pack_start (GTK_BOX (wvbox2), prop->code128c_radio,
267 g_signal_connect_swapped (G_OBJECT (prop->code128c_radio), "toggled",
268 G_CALLBACK (changed_cb),
273 gtk_radio_button_new_with_label (radio_group, "Interleaved 2 of 5");
275 gtk_radio_button_get_group (GTK_RADIO_BUTTON (prop->i25_radio));
276 gtk_box_pack_start (GTK_BOX (wvbox2), prop->i25_radio, FALSE, FALSE, 0);
277 g_signal_connect_swapped (G_OBJECT (prop->i25_radio), "toggled",
278 G_CALLBACK (changed_cb),
283 gtk_radio_button_new_with_label (radio_group, "Codabar");
285 gtk_radio_button_get_group (GTK_RADIO_BUTTON (prop->cbr_radio));
286 gtk_box_pack_start (GTK_BOX (wvbox2), prop->cbr_radio, FALSE, FALSE, 0);
287 g_signal_connect_swapped (G_OBJECT (prop->cbr_radio), "toggled",
288 G_CALLBACK (changed_cb),
292 prop->msi_radio = gtk_radio_button_new_with_label (radio_group, "MSI");
294 gtk_radio_button_get_group (GTK_RADIO_BUTTON (prop->msi_radio));
295 gtk_box_pack_start (GTK_BOX (wvbox2), prop->msi_radio, FALSE, FALSE, 0);
296 g_signal_connect_swapped (G_OBJECT (prop->msi_radio), "toggled",
297 G_CALLBACK (changed_cb),
302 gtk_radio_button_new_with_label (radio_group, "Plessey");
304 gtk_radio_button_get_group (GTK_RADIO_BUTTON (prop->pls_radio));
305 gtk_box_pack_start (GTK_BOX (wvbox2), prop->pls_radio, FALSE, FALSE, 0);
306 g_signal_connect_swapped (G_OBJECT (prop->pls_radio), "toggled",
307 G_CALLBACK (changed_cb),
310 /* ... Separator ... */
311 gtk_box_pack_start (GTK_BOX (wvbox1), gtk_hseparator_new (), FALSE,
314 /* Text checkbox widget */
316 gtk_check_button_new_with_label (_("Show text with barcode"));
317 gtk_box_pack_start (GTK_BOX (wvbox1), prop->text_check,
319 g_signal_connect_swapped (G_OBJECT (prop->text_check), "toggled",
320 G_CALLBACK (changed_cb),
325 /*--------------------------------------------------------------------------*/
326 /* PRIVATE. Callback for when any control in the widget has changed. */
327 /*--------------------------------------------------------------------------*/
329 changed_cb (glWdgtBCStyle * prop_style)
331 /* Emit our "changed" signal */
332 g_signal_emit (G_OBJECT (prop_style),
333 wdgt_bc_style_signals[CHANGED], 0);
336 /*====================================================================*/
337 /* query values from controls. */
338 /*====================================================================*/
340 gl_wdgt_bc_style_get_params (glWdgtBCStyle * prop,
341 glBarcodeStyle * style,
342 gboolean * text_flag)
345 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (prop->text_check));
347 if (gtk_toggle_button_get_active
348 (GTK_TOGGLE_BUTTON (prop->postnet_radio))) {
349 *style = GL_BARCODE_STYLE_POSTNET;
351 if (gtk_toggle_button_get_active
352 (GTK_TOGGLE_BUTTON (prop->ean_radio))) {
353 *style = GL_BARCODE_STYLE_EAN;
355 if (gtk_toggle_button_get_active
356 (GTK_TOGGLE_BUTTON (prop->upc_radio))) {
357 *style = GL_BARCODE_STYLE_UPC;
359 if (gtk_toggle_button_get_active
360 (GTK_TOGGLE_BUTTON (prop->isbn_radio))) {
361 *style = GL_BARCODE_STYLE_ISBN;
363 if (gtk_toggle_button_get_active
364 (GTK_TOGGLE_BUTTON (prop->code39_radio))) {
365 *style = GL_BARCODE_STYLE_39;
367 if (gtk_toggle_button_get_active
368 (GTK_TOGGLE_BUTTON (prop->code128_radio))) {
369 *style = GL_BARCODE_STYLE_128;
371 if (gtk_toggle_button_get_active
372 (GTK_TOGGLE_BUTTON (prop->code128c_radio))) {
373 *style = GL_BARCODE_STYLE_128C;
375 if (gtk_toggle_button_get_active
376 (GTK_TOGGLE_BUTTON (prop->code128b_radio))) {
377 *style = GL_BARCODE_STYLE_128B;
379 if (gtk_toggle_button_get_active
380 (GTK_TOGGLE_BUTTON (prop->i25_radio))) {
381 *style = GL_BARCODE_STYLE_I25;
383 if (gtk_toggle_button_get_active
384 (GTK_TOGGLE_BUTTON (prop->cbr_radio))) {
385 *style = GL_BARCODE_STYLE_CBR;
387 if (gtk_toggle_button_get_active
388 (GTK_TOGGLE_BUTTON (prop->msi_radio))) {
389 *style = GL_BARCODE_STYLE_MSI;
391 if (gtk_toggle_button_get_active
392 (GTK_TOGGLE_BUTTON (prop->pls_radio))) {
393 *style = GL_BARCODE_STYLE_PLS;
398 /*====================================================================*/
399 /* fill in values and ranges for controls. */
400 /*====================================================================*/
402 gl_wdgt_bc_style_set_params (glWdgtBCStyle * prop,
403 glBarcodeStyle style,
406 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (prop->text_check),
410 case GL_BARCODE_STYLE_POSTNET:
411 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
412 (prop->postnet_radio), TRUE);
414 case GL_BARCODE_STYLE_EAN:
415 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
416 (prop->ean_radio), TRUE);
418 case GL_BARCODE_STYLE_UPC:
419 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
420 (prop->upc_radio), TRUE);
422 case GL_BARCODE_STYLE_ISBN:
423 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
424 (prop->isbn_radio), TRUE);
426 case GL_BARCODE_STYLE_39:
427 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
428 (prop->code39_radio), TRUE);
430 case GL_BARCODE_STYLE_128:
431 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
432 (prop->code128_radio), TRUE);
434 case GL_BARCODE_STYLE_128C:
435 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
436 (prop->code128c_radio), TRUE);
438 case GL_BARCODE_STYLE_128B:
439 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
440 (prop->code128b_radio), TRUE);
442 case GL_BARCODE_STYLE_I25:
443 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
444 (prop->i25_radio), TRUE);
446 case GL_BARCODE_STYLE_CBR:
447 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
448 (prop->cbr_radio), TRUE);
450 case GL_BARCODE_STYLE_MSI:
451 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
452 (prop->msi_radio), TRUE);
454 case GL_BARCODE_STYLE_PLS:
455 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
456 (prop->pls_radio), TRUE);
459 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
460 (prop->postnet_radio), TRUE);