3 * Copyright (C) 2001-2009 Jim Evins <evins@snaught.com>.
5 * This file is part of gLabels.
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.
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.
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/>.
23 #include "print-op-dialog.h"
25 #include <glib/gi18n.h>
31 #include "mini-preview.h"
33 #include "builder-util.h"
35 #include "pixmaps/collate.xpm"
36 #include "pixmaps/nocollate.xpm"
41 #define MINI_PREVIEW_MIN_HEIGHT 175
42 #define MINI_PREVIEW_MIN_WIDTH 150
45 /*===========================================*/
46 /* Private data types */
47 /*===========================================*/
49 struct _glPrintOpDialogPrivate {
53 GtkWidget *simple_frame;
54 GtkWidget *simple_sheets_radio;
55 GtkWidget *simple_sheets_spin;
56 GtkWidget *simple_labels_radio;
57 GtkWidget *simple_first_spin;
58 GtkWidget *simple_last_spin;
60 GtkWidget *merge_frame;
61 GtkWidget *merge_first_spin;
62 GtkWidget *merge_copies_spin;
63 GtkWidget *merge_collate_check;
64 GtkWidget *merge_collate_image;
66 GtkWidget *outline_check;
67 GtkWidget *reverse_check;
68 GtkWidget *crop_marks_check;
72 gboolean force_outline_flag;
74 gint labels_per_sheet;
81 /*===========================================*/
83 /*===========================================*/
86 /*===========================================*/
87 /* Local function prototypes */
88 /*===========================================*/
90 static void gl_print_op_dialog_finalize (GObject *object);
92 static void gl_print_op_dialog_construct (glPrintOpDialog *op,
95 static GObject *create_custom_widget_cb (GtkPrintOperation *operation,
98 static void custom_widget_apply_cb (GtkPrintOperation *operation,
102 static void simple_sheets_radio_cb (GtkToggleButton *togglebutton,
103 glPrintOpDialog *op);
105 static void simple_first_spin_cb (GtkSpinButton *spinbutton,
106 glPrintOpDialog *op);
108 static void simple_last_spin_cb (GtkSpinButton *spinbutton,
109 glPrintOpDialog *op);
111 static void preview_pressed_cb (glMiniPreview *preview,
114 glPrintOpDialog *op);
116 static void preview_released_cb (glMiniPreview *preview,
119 glPrintOpDialog *op);
121 static void merge_spin_cb (GtkSpinButton *spinbutton,
122 glPrintOpDialog *op);
124 static void merge_collate_check_cb (GtkToggleButton *togglebutton,
125 glPrintOpDialog *op);
127 static void preview_clicked_cb (glMiniPreview *preview,
129 glPrintOpDialog *op);
131 static void option_toggled_cb (GtkToggleButton *togglebutton,
132 glPrintOpDialog *op);
135 /*****************************************************************************/
136 /* Boilerplate object stuff. */
137 /*****************************************************************************/
138 G_DEFINE_TYPE (glPrintOpDialog, gl_print_op_dialog, GL_TYPE_PRINT_OP);
142 gl_print_op_dialog_class_init (glPrintOpDialogClass *class)
144 GObjectClass *object_class = G_OBJECT_CLASS (class);
146 gl_debug (DEBUG_PRINT, "");
148 gl_print_op_dialog_parent_class = g_type_class_peek_parent (class);
150 object_class->finalize = gl_print_op_dialog_finalize;
155 gl_print_op_dialog_init (glPrintOpDialog *op)
157 gl_debug (DEBUG_PRINT, "");
159 gtk_print_operation_set_use_full_page (GTK_PRINT_OPERATION (op), TRUE);
161 gtk_print_operation_set_unit (GTK_PRINT_OPERATION (op), GTK_UNIT_POINTS);
163 op->priv = g_new0 (glPrintOpDialogPrivate, 1);
169 gl_print_op_dialog_finalize (GObject *object)
171 glPrintOpDialog *op = GL_PRINT_OP_DIALOG (object);
173 gl_debug (DEBUG_PRINT, "");
175 g_return_if_fail (object != NULL);
176 g_return_if_fail (GL_IS_PRINT_OP (op));
177 g_return_if_fail (op->priv != NULL);
179 g_object_unref (G_OBJECT(op->priv->builder));
182 G_OBJECT_CLASS (gl_print_op_dialog_parent_class)->finalize (object);
188 /*****************************************************************************/
190 /*****************************************************************************/
192 gl_print_op_dialog_new (glLabel *label)
196 gl_debug (DEBUG_PRINT, "");
198 op = GL_PRINT_OP_DIALOG (g_object_new (GL_TYPE_PRINT_OP_DIALOG, NULL));
200 gl_print_op_dialog_construct (GL_PRINT_OP_DIALOG(op), label);
206 /*--------------------------------------------------------------------------*/
207 /* PRIVATE. Construct op. */
208 /*--------------------------------------------------------------------------*/
210 gl_print_op_dialog_construct (glPrintOpDialog *op,
214 gl_print_op_construct(GL_PRINT_OP (op), label);
216 gtk_print_operation_set_custom_tab_label ( GTK_PRINT_OPERATION (op),
219 g_signal_connect (G_OBJECT (op), "create-custom-widget",
220 G_CALLBACK (create_custom_widget_cb), label);
222 g_signal_connect (G_OBJECT (op), "custom-widget-apply",
223 G_CALLBACK (custom_widget_apply_cb), label);
228 /*--------------------------------------------------------------------------*/
229 /* PRIVATE. "Create custom widget" callback */
230 /*--------------------------------------------------------------------------*/
232 create_custom_widget_cb (GtkPrintOperation *operation,
236 static gchar *object_ids[] = { "print_custom_widget_hbox",
237 "adjustment1", "adjustment2",
238 "adjustment3", "adjustment4",
241 GError *error = NULL;
242 glPrintOpDialog *op = GL_PRINT_OP_DIALOG (operation);
243 const lglTemplateFrame *frame;
245 glMerge *merge = NULL;
249 frame = (lglTemplateFrame *)label->template->frames->data;
250 op->priv->labels_per_sheet = lgl_template_frame_get_n_labels (frame);
252 builder = gtk_builder_new ();
253 gtk_builder_add_objects_from_file (builder,
254 GLABELS_BUILDER_DIR "print-op-dialog-custom-widget.builder",
258 g_critical ("%s\n\ngLabels may not be installed correctly!", error->message);
259 g_error_free (error);
263 gl_builder_util_get_widgets (builder,
264 "print_custom_widget_hbox", &hbox,
265 "simple_frame", &op->priv->simple_frame,
266 "simple_sheets_radio", &op->priv->simple_sheets_radio,
267 "simple_sheets_spin", &op->priv->simple_sheets_spin,
268 "simple_labels_radio", &op->priv->simple_labels_radio,
269 "simple_first_spin", &op->priv->simple_first_spin,
270 "simple_last_spin", &op->priv->simple_last_spin,
271 "merge_frame", &op->priv->merge_frame,
272 "merge_first_spin", &op->priv->merge_first_spin,
273 "merge_copies_spin", &op->priv->merge_copies_spin,
274 "merge_collate_check", &op->priv->merge_collate_check,
275 "merge_collate_image", &op->priv->merge_collate_image,
276 "outline_check", &op->priv->outline_check,
277 "reverse_check", &op->priv->reverse_check,
278 "crop_marks_check", &op->priv->crop_marks_check,
281 op->priv->builder = builder;
283 /* ---- Install preview. ---- */
284 op->priv->preview = gl_mini_preview_new (MINI_PREVIEW_MIN_HEIGHT, MINI_PREVIEW_MIN_WIDTH);
285 gl_mini_preview_set_template (GL_MINI_PREVIEW(op->priv->preview), label->template);
286 gl_mini_preview_set_label (GL_MINI_PREVIEW(op->priv->preview), label);
287 gtk_box_pack_start (GTK_BOX(hbox), op->priv->preview, TRUE, TRUE, 0);
288 gtk_widget_show_all (op->priv->preview);
291 /* ---- Activate either simple or merge print control widgets. ---- */
292 merge = gl_label_get_merge (label);
293 op->priv->merge_flag = (merge != NULL);
294 if (!op->priv->merge_flag) {
296 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (op->priv->simple_sheets_radio),
298 gtk_widget_set_sensitive (op->priv->simple_first_spin, FALSE);
299 gtk_widget_set_sensitive (op->priv->simple_last_spin, FALSE);
301 gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->priv->simple_sheets_spin),
302 gl_print_op_get_n_sheets (GL_PRINT_OP(op)));
304 gtk_spin_button_set_range (GTK_SPIN_BUTTON (op->priv->simple_first_spin),
305 1, op->priv->labels_per_sheet);
306 gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->priv->simple_first_spin),
309 gtk_spin_button_set_range (GTK_SPIN_BUTTON (op->priv->simple_last_spin),
310 1, op->priv->labels_per_sheet);
311 gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->priv->simple_last_spin),
312 op->priv->labels_per_sheet);
314 /* Update preview. */
315 gl_mini_preview_set_page (GL_MINI_PREVIEW (op->priv->preview), 0);
316 gl_mini_preview_set_n_sheets (GL_MINI_PREVIEW (op->priv->preview),
317 gl_print_op_get_n_sheets (GL_PRINT_OP(op)));
318 gl_mini_preview_set_first (GL_MINI_PREVIEW (op->priv->preview), 1);
319 gl_mini_preview_set_last (GL_MINI_PREVIEW (op->priv->preview),
320 op->priv->labels_per_sheet);
322 gtk_widget_show_all (op->priv->simple_frame);
323 gtk_widget_hide_all (op->priv->merge_frame);
325 g_signal_connect (G_OBJECT (op->priv->simple_sheets_radio), "toggled",
326 G_CALLBACK (simple_sheets_radio_cb), op);
327 g_signal_connect (G_OBJECT (op->priv->simple_first_spin), "changed",
328 G_CALLBACK (simple_first_spin_cb), op);
329 g_signal_connect (G_OBJECT (op->priv->simple_last_spin), "changed",
330 G_CALLBACK (simple_last_spin_cb), op);
331 g_signal_connect (G_OBJECT (op->priv->preview), "pressed",
332 G_CALLBACK (preview_pressed_cb), op);
333 g_signal_connect (G_OBJECT (op->priv->preview), "released",
334 G_CALLBACK (preview_released_cb), op);
338 op->priv->n_records = gl_merge_get_record_count (merge);
340 gtk_spin_button_set_range (GTK_SPIN_BUTTON (op->priv->merge_first_spin),
341 1, op->priv->labels_per_sheet);
342 gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->priv->merge_first_spin),
343 gl_print_op_get_first (GL_PRINT_OP(op)));
345 gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->priv->merge_copies_spin),
346 gl_print_op_get_n_copies (GL_PRINT_OP(op)));
348 gtk_widget_set_sensitive (op->priv->merge_collate_check,
349 (gl_print_op_get_n_copies (GL_PRINT_OP(op)) > 1));
350 gtk_widget_set_sensitive (op->priv->merge_collate_image,
351 (gl_print_op_get_n_copies (GL_PRINT_OP(op)) > 1));
354 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (op->priv->simple_sheets_radio),
355 gl_print_op_get_collate_flag (GL_PRINT_OP(op)));
357 if ( gl_print_op_get_collate_flag (GL_PRINT_OP(op)) )
359 pixbuf = gdk_pixbuf_new_from_xpm_data ( (const char **)nocollate_xpm);
363 pixbuf = gdk_pixbuf_new_from_xpm_data ( (const char **)collate_xpm);
366 gtk_image_set_from_pixbuf (GTK_IMAGE (op->priv->merge_collate_image), pixbuf);
368 /* Update preview. */
369 gl_mini_preview_set_page (GL_MINI_PREVIEW (op->priv->preview), 0);
370 gl_mini_preview_set_first (GL_MINI_PREVIEW (op->priv->preview),
371 gl_print_op_get_first (GL_PRINT_OP(op)));
372 gl_mini_preview_set_n_copies (GL_MINI_PREVIEW (op->priv->preview),
373 gl_print_op_get_n_copies (GL_PRINT_OP(op)));
374 gl_mini_preview_set_collate_flag (GL_MINI_PREVIEW (op->priv->preview),
375 gl_print_op_get_collate_flag (GL_PRINT_OP(op)));
378 gtk_widget_hide_all (op->priv->simple_frame);
379 gtk_widget_show_all (op->priv->merge_frame);
381 g_signal_connect (G_OBJECT (op->priv->merge_first_spin), "changed",
382 G_CALLBACK (merge_spin_cb), op);
383 g_signal_connect (G_OBJECT (op->priv->merge_copies_spin), "changed",
384 G_CALLBACK (merge_spin_cb), op);
385 g_signal_connect (G_OBJECT (op->priv->merge_collate_check), "toggled",
386 G_CALLBACK (merge_collate_check_cb), op);
387 g_signal_connect (G_OBJECT (op->priv->preview), "clicked",
388 G_CALLBACK (preview_clicked_cb), op);
389 g_signal_connect (G_OBJECT (op->priv->preview), "pressed",
390 G_CALLBACK (preview_pressed_cb), op);
391 g_signal_connect (G_OBJECT (op->priv->preview), "released",
392 G_CALLBACK (preview_released_cb), op);
394 g_object_unref (G_OBJECT(merge));
398 /* --- Set options --- */
399 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (op->priv->outline_check),
400 gl_print_op_get_outline_flag (GL_PRINT_OP(op)));
401 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (op->priv->reverse_check),
402 gl_print_op_get_reverse_flag (GL_PRINT_OP(op)));
403 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (op->priv->crop_marks_check),
404 gl_print_op_get_crop_marks_flag (GL_PRINT_OP(op)));
406 /* --- Do we need to force the outline flag --- */
407 if (gl_print_op_is_outline_forced (GL_PRINT_OP (op)))
409 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(op->priv->outline_check),
412 gtk_widget_set_sensitive (op->priv->outline_check, FALSE);
413 gtk_widget_set_sensitive (op->priv->reverse_check, FALSE);
414 gtk_widget_set_sensitive (op->priv->crop_marks_check, FALSE);
417 g_signal_connect (G_OBJECT (op->priv->outline_check), "toggled",
418 G_CALLBACK (option_toggled_cb), op);
419 g_signal_connect (G_OBJECT (op->priv->reverse_check), "toggled",
420 G_CALLBACK (option_toggled_cb), op);
421 g_signal_connect (G_OBJECT (op->priv->crop_marks_check), "toggled",
422 G_CALLBACK (option_toggled_cb), op);
424 return G_OBJECT (hbox);
428 /*--------------------------------------------------------------------------*/
429 /* PRIVATE. "Custom widget apply" callback */
430 /*--------------------------------------------------------------------------*/
432 custom_widget_apply_cb (GtkPrintOperation *operation,
436 glPrintOpDialog *op = GL_PRINT_OP_DIALOG (operation);
437 glMerge *merge = NULL;
439 gint n_sheets, first, last, n_copies;
440 gboolean collate_flag;
442 gl_print_op_set_outline_flag (GL_PRINT_OP (op),
443 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
444 (op->priv->outline_check)));
445 gl_print_op_set_reverse_flag (GL_PRINT_OP (op),
446 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
447 (op->priv->reverse_check)));
448 gl_print_op_set_crop_marks_flag (GL_PRINT_OP (op),
449 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
450 (op->priv->crop_marks_check)));
453 if (!op->priv->merge_flag)
456 n_sheets = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->simple_sheets_spin));
457 gl_print_op_set_n_sheets (GL_PRINT_OP (op), n_sheets);
459 first = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->simple_first_spin));
460 gl_print_op_set_first (GL_PRINT_OP (op), first);
462 last = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->simple_last_spin));
463 gl_print_op_set_last (GL_PRINT_OP (op), last);
469 merge = gl_label_get_merge (label);
471 n_copies = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->merge_copies_spin));
472 gl_print_op_set_n_copies (GL_PRINT_OP (op), n_copies);
474 first = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->merge_first_spin));
475 gl_print_op_set_first (GL_PRINT_OP (op), first);
477 collate_flag = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (op->priv->merge_collate_check));
478 gl_print_op_set_collate_flag (GL_PRINT_OP (op), collate_flag);
480 n_records = gl_merge_get_record_count (merge);
481 n_sheets = ceil (first - 1 + (n_copies * n_records)/(double)op->priv->labels_per_sheet);
482 gl_print_op_set_n_sheets (GL_PRINT_OP (op), n_sheets);
484 g_object_unref (G_OBJECT(merge));
492 /*--------------------------------------------------------------------------*/
493 /* PRIVATE. Simple sheets radio "toggled" callback */
494 /*--------------------------------------------------------------------------*/
496 simple_sheets_radio_cb (GtkToggleButton *togglebutton,
501 if (gtk_toggle_button_get_active (togglebutton)) {
503 gtk_widget_set_sensitive (op->priv->simple_sheets_spin, TRUE);
504 gtk_widget_set_sensitive (op->priv->simple_first_spin, FALSE);
505 gtk_widget_set_sensitive (op->priv->simple_last_spin, FALSE);
507 gtk_spin_button_set_range (GTK_SPIN_BUTTON (op->priv->simple_first_spin),
508 1, op->priv->labels_per_sheet);
509 gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->priv->simple_first_spin),
512 gtk_spin_button_set_range (GTK_SPIN_BUTTON (op->priv->simple_last_spin),
513 1, op->priv->labels_per_sheet);
514 gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->priv->simple_last_spin),
515 op->priv->labels_per_sheet);
517 gl_mini_preview_set_n_sheets (GL_MINI_PREVIEW (op->priv->preview),
518 gl_print_op_get_n_sheets (GL_PRINT_OP(op)));
519 gl_mini_preview_set_first (GL_MINI_PREVIEW (op->priv->preview), 1);
520 gl_mini_preview_set_last (GL_MINI_PREVIEW (op->priv->preview),
521 op->priv->labels_per_sheet);
525 gtk_widget_set_sensitive (op->priv->simple_sheets_spin, FALSE);
526 gtk_widget_set_sensitive (op->priv->simple_first_spin, TRUE);
527 gtk_widget_set_sensitive (op->priv->simple_last_spin, TRUE);
529 gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->priv->simple_sheets_spin), 1);
531 first = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->simple_first_spin));
532 last = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->simple_last_spin));
534 gl_mini_preview_set_n_sheets (GL_MINI_PREVIEW (op->priv->preview), 1);
535 gl_mini_preview_set_first (GL_MINI_PREVIEW (op->priv->preview), first);
536 gl_mini_preview_set_last (GL_MINI_PREVIEW (op->priv->preview), last);
542 /*--------------------------------------------------------------------------*/
543 /* PRIVATE. Simple first label spinbutton "changed" callback */
544 /*--------------------------------------------------------------------------*/
546 simple_first_spin_cb (GtkSpinButton *spinbutton,
551 first = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->simple_first_spin));
552 last = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->simple_last_spin));
554 /* Adjust range of last spin button. */
555 gtk_spin_button_set_range (GTK_SPIN_BUTTON (op->priv->simple_last_spin),
556 first, op->priv->labels_per_sheet);
558 /* Update preview. */
559 gl_mini_preview_set_first (GL_MINI_PREVIEW (op->priv->preview), first);
560 gl_mini_preview_set_last (GL_MINI_PREVIEW (op->priv->preview), last);
565 /*--------------------------------------------------------------------------*/
566 /* PRIVATE. Simple last label spinbutton "changed" callback */
567 /*--------------------------------------------------------------------------*/
569 simple_last_spin_cb (GtkSpinButton *spinbutton,
574 first = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->simple_first_spin));
575 last = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->simple_last_spin));
577 /* Adjust range of first spin button. */
578 gtk_spin_button_set_range (GTK_SPIN_BUTTON (op->priv->simple_first_spin),
581 /* Update preview. */
582 gl_mini_preview_set_first (GL_MINI_PREVIEW (op->priv->preview), first);
583 gl_mini_preview_set_last (GL_MINI_PREVIEW (op->priv->preview), last);
588 /*--------------------------------------------------------------------------*/
589 /* PRIVATE. Preview "pressed" callback */
590 /*--------------------------------------------------------------------------*/
592 preview_pressed_cb (glMiniPreview *preview,
599 if ( !op->priv->merge_flag )
602 /* Update controls. */
603 old_first = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->simple_first_spin));
604 if ( first > old_first )
606 gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->priv->simple_last_spin), last);
607 gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->priv->simple_first_spin), first);
611 gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->priv->simple_first_spin), first);
612 gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->priv->simple_last_spin), last);
614 if ( (first == 1) && (last == op->priv->labels_per_sheet) )
616 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (op->priv->simple_sheets_radio), TRUE);
617 gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->priv->simple_sheets_spin), 1);
621 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (op->priv->simple_labels_radio), TRUE);
626 gl_mini_preview_highlight_range (GL_MINI_PREVIEW (op->priv->preview), first, last);
631 /*--------------------------------------------------------------------------*/
632 /* PRIVATE. Preview "pressed" callback */
633 /*--------------------------------------------------------------------------*/
635 preview_released_cb (glMiniPreview *preview,
641 gl_mini_preview_highlight_range (GL_MINI_PREVIEW (op->priv->preview), 0, 0);
646 /*--------------------------------------------------------------------------*/
647 /* PRIVATE. "changed" callback for merge first and copies spin buttons. */
648 /*--------------------------------------------------------------------------*/
650 merge_spin_cb (GtkSpinButton *spinbutton,
653 gint first, n_copies;
655 first = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->merge_first_spin));
657 n_copies = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->merge_copies_spin));
659 gl_mini_preview_set_first (GL_MINI_PREVIEW(op->priv->preview), first);
660 gl_mini_preview_set_n_copies (GL_MINI_PREVIEW(op->priv->preview), n_copies);
662 gtk_widget_set_sensitive (op->priv->merge_collate_check, (n_copies > 1));
663 gtk_widget_set_sensitive (op->priv->merge_collate_image, (n_copies > 1));
667 /*--------------------------------------------------------------------------*/
668 /* PRIVATE. Merge first collate check "toggled" callback */
669 /*--------------------------------------------------------------------------*/
671 merge_collate_check_cb (GtkToggleButton *togglebutton,
676 if ( gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (op->priv->merge_collate_check)) )
678 pixbuf = gdk_pixbuf_new_from_xpm_data ( (const char **)nocollate_xpm);
679 gl_mini_preview_set_collate_flag (GL_MINI_PREVIEW (op->priv->preview), TRUE);
683 pixbuf = gdk_pixbuf_new_from_xpm_data ( (const char **)collate_xpm);
684 gl_mini_preview_set_collate_flag (GL_MINI_PREVIEW (op->priv->preview), FALSE);
687 gtk_image_set_from_pixbuf (GTK_IMAGE (op->priv->merge_collate_image), pixbuf);
691 /*--------------------------------------------------------------------------*/
692 /* PRIVATE. Preview "clicked" callback */
693 /*--------------------------------------------------------------------------*/
695 preview_clicked_cb (glMiniPreview *preview,
701 if ( op->priv->merge_flag )
704 /* Update controls. */
705 gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->priv->merge_first_spin), first);
707 n_copies = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->merge_copies_spin));
708 gtk_widget_set_sensitive (op->priv->merge_collate_check, (n_copies > 1));
709 gtk_widget_set_sensitive (op->priv->merge_collate_image, (n_copies > 1));
715 /*--------------------------------------------------------------------------*/
716 /* PRIVATE. Option checkbox "toggled" callback */
717 /*--------------------------------------------------------------------------*/
719 option_toggled_cb (GtkToggleButton *togglebutton,
724 flag = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (op->priv->outline_check));
725 gl_mini_preview_set_outline_flag (GL_MINI_PREVIEW (op->priv->preview), flag);
727 flag = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (op->priv->reverse_check));
728 gl_mini_preview_set_reverse_flag (GL_MINI_PREVIEW (op->priv->preview), flag);
730 flag = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (op->priv->crop_marks_check));
731 gl_mini_preview_set_crop_marks_flag (GL_MINI_PREVIEW (op->priv->preview), flag);
738 * Local Variables: -- emacs
740 * c-basic-offset: 8 -- emacs
741 * tab-width: 8 -- emacs
742 * indent-tabs-mode: nil -- emacs