2 * (GLABELS) Label and Business Card Creation program for GNOME
4 * prop_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 "prop_bc_style.h"
29 /*===========================================*/
31 /*===========================================*/
38 typedef void (*glPropBCStyleSignal) (GtkObject * object, gpointer data);
40 /*===========================================*/
42 /*===========================================*/
44 static GtkContainerClass *parent_class;
46 static gint prop_bc_style_signals[LAST_SIGNAL] = { 0 };
48 /*===========================================*/
49 /* Local function prototypes */
50 /*===========================================*/
52 static void gl_prop_bc_style_class_init (glPropBCStyleClass * class);
53 static void gl_prop_bc_style_init (glPropBCStyle * prop_style);
54 static void gl_prop_bc_style_destroy (GtkObject * object);
55 static void gl_prop_bc_style_construct (glPropBCStyle * prop_style,
57 static void changed_cb (glPropBCStyle * prop_style);
59 /*================================================================*/
60 /* Boilerplate Object stuff. */
61 /*================================================================*/
63 gl_prop_bc_style_get_type (void)
65 static guint prop_bc_style_type = 0;
67 if (!prop_bc_style_type) {
68 GtkTypeInfo prop_bc_style_info = {
70 sizeof (glPropBCStyle),
71 sizeof (glPropBCStyleClass),
72 (GtkClassInitFunc) gl_prop_bc_style_class_init,
73 (GtkObjectInitFunc) gl_prop_bc_style_init,
78 prop_bc_style_type = gtk_type_unique (gtk_vbox_get_type (),
82 return prop_bc_style_type;
86 gl_prop_bc_style_class_init (glPropBCStyleClass * class)
88 GtkObjectClass *object_class;
89 GtkWidgetClass *widget_class;
91 object_class = (GtkObjectClass *) class;
92 widget_class = (GtkWidgetClass *) class;
94 parent_class = gtk_type_class (gtk_vbox_get_type ());
96 object_class->destroy = gl_prop_bc_style_destroy;
98 prop_bc_style_signals[CHANGED] =
99 gtk_signal_new ("changed", GTK_RUN_LAST, object_class->type,
100 GTK_SIGNAL_OFFSET (glPropBCStyleClass, changed),
101 gtk_signal_default_marshaller, GTK_TYPE_NONE, 0);
102 gtk_object_class_add_signals (object_class, prop_bc_style_signals,
105 class->changed = NULL;
109 gl_prop_bc_style_init (glPropBCStyle * prop_style)
111 prop_style->postnet_radio = NULL;
112 prop_style->ean_radio = NULL;
113 prop_style->upc_radio = NULL;
114 prop_style->isbn_radio = NULL;
115 prop_style->code39_radio = NULL;
116 prop_style->code128_radio = NULL;
117 prop_style->code128c_radio = NULL;
118 prop_style->code128b_radio = NULL;
119 prop_style->i25_radio = NULL;
120 prop_style->cbr_radio = NULL;
121 prop_style->msi_radio = NULL;
122 prop_style->pls_radio = NULL;
126 gl_prop_bc_style_destroy (GtkObject * object)
128 glPropBCStyle *prop_style;
129 glPropBCStyleClass *class;
131 g_return_if_fail (object != NULL);
132 g_return_if_fail (GL_IS_PROP_BC_STYLE (object));
134 prop_style = GL_PROP_BC_STYLE (object);
135 class = GL_PROP_BC_STYLE_CLASS (GTK_OBJECT (prop_style)->klass);
137 GTK_OBJECT_CLASS (parent_class)->destroy (object);
141 gl_prop_bc_style_new (gchar * label)
143 glPropBCStyle *prop_style;
145 prop_style = gtk_type_new (gl_prop_bc_style_get_type ());
147 gl_prop_bc_style_construct (prop_style, label);
149 return GTK_WIDGET (prop_style);
152 /*============================================================*/
153 /* Construct composite widget. */
154 /*============================================================*/
156 gl_prop_bc_style_construct (glPropBCStyle * prop,
159 GtkWidget *wvbox, *wframe, *wvbox1, *whbox2, *wvbox2;
160 GSList *radio_group = NULL;
162 wvbox = GTK_WIDGET (prop);
164 wframe = gtk_frame_new (label);
165 gtk_box_pack_start (GTK_BOX (wvbox), wframe, FALSE, FALSE, 0);
167 wvbox1 = gtk_vbox_new (FALSE, GNOME_PAD);
168 gtk_container_set_border_width (GTK_CONTAINER (wvbox1), 10);
169 gtk_container_add (GTK_CONTAINER (wframe), wvbox1);
171 whbox2 = gtk_hbox_new (FALSE, GNOME_PAD);
172 gtk_container_add (GTK_CONTAINER (wvbox1), whbox2);
174 /* ... Start column ... */
175 wvbox2 = gtk_vbox_new (FALSE, GNOME_PAD);
176 gtk_container_set_border_width (GTK_CONTAINER (wvbox2), 10);
177 gtk_box_pack_start (GTK_BOX (whbox2), wvbox2, FALSE, FALSE, 0);
180 prop->postnet_radio =
181 gtk_radio_button_new_with_label (radio_group, "POSTNET");
183 gtk_radio_button_group (GTK_RADIO_BUTTON (prop->postnet_radio));
184 gtk_box_pack_start (GTK_BOX (wvbox2), prop->postnet_radio,
186 gtk_signal_connect_object (GTK_OBJECT (prop->postnet_radio), "toggled",
187 GTK_SIGNAL_FUNC (changed_cb),
191 prop->ean_radio = gtk_radio_button_new_with_label (radio_group, "EAN");
193 gtk_radio_button_group (GTK_RADIO_BUTTON (prop->ean_radio));
194 gtk_box_pack_start (GTK_BOX (wvbox2), prop->ean_radio, FALSE, FALSE, 0);
195 gtk_signal_connect_object (GTK_OBJECT (prop->ean_radio), "toggled",
196 GTK_SIGNAL_FUNC (changed_cb),
200 prop->upc_radio = gtk_radio_button_new_with_label (radio_group, "UPC");
202 gtk_radio_button_group (GTK_RADIO_BUTTON (prop->upc_radio));
203 gtk_box_pack_start (GTK_BOX (wvbox2), prop->upc_radio, FALSE, FALSE, 0);
204 gtk_signal_connect_object (GTK_OBJECT (prop->upc_radio), "toggled",
205 GTK_SIGNAL_FUNC (changed_cb),
210 gtk_radio_button_new_with_label (radio_group, "ISBN");
212 gtk_radio_button_group (GTK_RADIO_BUTTON (prop->isbn_radio));
213 gtk_box_pack_start (GTK_BOX (wvbox2), prop->isbn_radio,
215 gtk_signal_connect_object (GTK_OBJECT (prop->isbn_radio), "toggled",
216 GTK_SIGNAL_FUNC (changed_cb),
221 gtk_radio_button_new_with_label (radio_group, "Code 39");
223 gtk_radio_button_group (GTK_RADIO_BUTTON (prop->code39_radio));
224 gtk_box_pack_start (GTK_BOX (wvbox2), prop->code39_radio,
226 gtk_signal_connect_object (GTK_OBJECT (prop->code39_radio), "toggled",
227 GTK_SIGNAL_FUNC (changed_cb),
231 prop->code128_radio =
232 gtk_radio_button_new_with_label (radio_group, "Code 128");
234 gtk_radio_button_group (GTK_RADIO_BUTTON (prop->code128_radio));
235 gtk_box_pack_start (GTK_BOX (wvbox2), prop->code128_radio,
237 gtk_signal_connect_object (GTK_OBJECT (prop->code128_radio), "toggled",
238 GTK_SIGNAL_FUNC (changed_cb),
241 /* ... Start column ... */
242 wvbox2 = gtk_vbox_new (FALSE, GNOME_PAD);
243 gtk_container_set_border_width (GTK_CONTAINER (wvbox2), 10);
244 gtk_box_pack_start (GTK_BOX (whbox2), wvbox2, FALSE, FALSE, 0);
246 /* CODE128B button */
247 prop->code128b_radio =
248 gtk_radio_button_new_with_label (radio_group, "Code 128-B");
250 gtk_radio_button_group (GTK_RADIO_BUTTON (prop->code128b_radio));
251 gtk_box_pack_start (GTK_BOX (wvbox2), prop->code128b_radio,
253 gtk_signal_connect_object (GTK_OBJECT (prop->code128b_radio), "toggled",
254 GTK_SIGNAL_FUNC (changed_cb),
257 /* CODE128C button */
258 prop->code128c_radio =
259 gtk_radio_button_new_with_label (radio_group, "Code 128-C");
261 gtk_radio_button_group (GTK_RADIO_BUTTON (prop->code128c_radio));
262 gtk_box_pack_start (GTK_BOX (wvbox2), prop->code128c_radio,
264 gtk_signal_connect_object (GTK_OBJECT (prop->code128c_radio), "toggled",
265 GTK_SIGNAL_FUNC (changed_cb),
270 gtk_radio_button_new_with_label (radio_group, "Interleaved 2 of 5");
272 gtk_radio_button_group (GTK_RADIO_BUTTON (prop->i25_radio));
273 gtk_box_pack_start (GTK_BOX (wvbox2), prop->i25_radio, FALSE, FALSE, 0);
274 gtk_signal_connect_object (GTK_OBJECT (prop->i25_radio), "toggled",
275 GTK_SIGNAL_FUNC (changed_cb),
280 gtk_radio_button_new_with_label (radio_group, "Codabar");
282 gtk_radio_button_group (GTK_RADIO_BUTTON (prop->cbr_radio));
283 gtk_box_pack_start (GTK_BOX (wvbox2), prop->cbr_radio, FALSE, FALSE, 0);
284 gtk_signal_connect_object (GTK_OBJECT (prop->cbr_radio), "toggled",
285 GTK_SIGNAL_FUNC (changed_cb),
289 prop->msi_radio = gtk_radio_button_new_with_label (radio_group, "MSI");
291 gtk_radio_button_group (GTK_RADIO_BUTTON (prop->msi_radio));
292 gtk_box_pack_start (GTK_BOX (wvbox2), prop->msi_radio, FALSE, FALSE, 0);
293 gtk_signal_connect_object (GTK_OBJECT (prop->msi_radio), "toggled",
294 GTK_SIGNAL_FUNC (changed_cb),
299 gtk_radio_button_new_with_label (radio_group, "Plessey");
301 gtk_radio_button_group (GTK_RADIO_BUTTON (prop->pls_radio));
302 gtk_box_pack_start (GTK_BOX (wvbox2), prop->pls_radio, FALSE, FALSE, 0);
303 gtk_signal_connect_object (GTK_OBJECT (prop->pls_radio), "toggled",
304 GTK_SIGNAL_FUNC (changed_cb),
307 /* ... Separator ... */
308 gtk_box_pack_start (GTK_BOX (wvbox1), gtk_hseparator_new (), FALSE,
311 /* Text checkbox widget */
313 gtk_check_button_new_with_label (_("Show text with barcode"));
314 gtk_box_pack_start (GTK_BOX (wvbox1), prop->text_check,
316 gtk_signal_connect_object (GTK_OBJECT (prop->text_check), "toggled",
317 GTK_SIGNAL_FUNC (changed_cb),
322 /*--------------------------------------------------------------------------*/
323 /* PRIVATE. Callback for when any control in the widget has changed. */
324 /*--------------------------------------------------------------------------*/
326 changed_cb (glPropBCStyle * prop_style)
328 /* Emit our "changed" signal */
329 gtk_signal_emit (GTK_OBJECT (prop_style),
330 prop_bc_style_signals[CHANGED]);
333 /*====================================================================*/
334 /* query values from controls. */
335 /*====================================================================*/
337 gl_prop_bc_style_get_params (glPropBCStyle * prop,
338 glBarcodeStyle * style,
339 gboolean * text_flag)
342 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (prop->text_check));
344 if (gtk_toggle_button_get_active
345 (GTK_TOGGLE_BUTTON (prop->postnet_radio))) {
346 *style = GL_BARCODE_STYLE_POSTNET;
348 if (gtk_toggle_button_get_active
349 (GTK_TOGGLE_BUTTON (prop->ean_radio))) {
350 *style = GL_BARCODE_STYLE_EAN;
352 if (gtk_toggle_button_get_active
353 (GTK_TOGGLE_BUTTON (prop->upc_radio))) {
354 *style = GL_BARCODE_STYLE_UPC;
356 if (gtk_toggle_button_get_active
357 (GTK_TOGGLE_BUTTON (prop->isbn_radio))) {
358 *style = GL_BARCODE_STYLE_ISBN;
360 if (gtk_toggle_button_get_active
361 (GTK_TOGGLE_BUTTON (prop->code39_radio))) {
362 *style = GL_BARCODE_STYLE_39;
364 if (gtk_toggle_button_get_active
365 (GTK_TOGGLE_BUTTON (prop->code128_radio))) {
366 *style = GL_BARCODE_STYLE_128;
368 if (gtk_toggle_button_get_active
369 (GTK_TOGGLE_BUTTON (prop->code128c_radio))) {
370 *style = GL_BARCODE_STYLE_128C;
372 if (gtk_toggle_button_get_active
373 (GTK_TOGGLE_BUTTON (prop->code128b_radio))) {
374 *style = GL_BARCODE_STYLE_128B;
376 if (gtk_toggle_button_get_active
377 (GTK_TOGGLE_BUTTON (prop->i25_radio))) {
378 *style = GL_BARCODE_STYLE_I25;
380 if (gtk_toggle_button_get_active
381 (GTK_TOGGLE_BUTTON (prop->cbr_radio))) {
382 *style = GL_BARCODE_STYLE_CBR;
384 if (gtk_toggle_button_get_active
385 (GTK_TOGGLE_BUTTON (prop->msi_radio))) {
386 *style = GL_BARCODE_STYLE_MSI;
388 if (gtk_toggle_button_get_active
389 (GTK_TOGGLE_BUTTON (prop->pls_radio))) {
390 *style = GL_BARCODE_STYLE_PLS;
395 /*====================================================================*/
396 /* fill in values and ranges for controls. */
397 /*====================================================================*/
399 gl_prop_bc_style_set_params (glPropBCStyle * prop,
400 glBarcodeStyle style,
403 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (prop->text_check),
407 case GL_BARCODE_STYLE_POSTNET:
408 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
409 (prop->postnet_radio), TRUE);
411 case GL_BARCODE_STYLE_EAN:
412 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
413 (prop->ean_radio), TRUE);
415 case GL_BARCODE_STYLE_UPC:
416 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
417 (prop->upc_radio), TRUE);
419 case GL_BARCODE_STYLE_ISBN:
420 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
421 (prop->isbn_radio), TRUE);
423 case GL_BARCODE_STYLE_39:
424 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
425 (prop->code39_radio), TRUE);
427 case GL_BARCODE_STYLE_128:
428 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
429 (prop->code128_radio), TRUE);
431 case GL_BARCODE_STYLE_128C:
432 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
433 (prop->code128c_radio), TRUE);
435 case GL_BARCODE_STYLE_128B:
436 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
437 (prop->code128b_radio), TRUE);
439 case GL_BARCODE_STYLE_I25:
440 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
441 (prop->i25_radio), TRUE);
443 case GL_BARCODE_STYLE_CBR:
444 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
445 (prop->cbr_radio), TRUE);
447 case GL_BARCODE_STYLE_MSI:
448 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
449 (prop->msi_radio), TRUE);
451 case GL_BARCODE_STYLE_PLS:
452 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
453 (prop->pls_radio), TRUE);
456 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
457 (prop->postnet_radio), TRUE);