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 gint labels_per_sheet;
79 /*===========================================*/
81 /*===========================================*/
84 /*===========================================*/
85 /* Local function prototypes */
86 /*===========================================*/
88 static void gl_print_op_dialog_finalize (GObject *object);
90 static void gl_print_op_dialog_construct (glPrintOpDialog *op,
93 static GObject *create_custom_widget_cb (GtkPrintOperation *operation,
96 static void custom_widget_apply_cb (GtkPrintOperation *operation,
100 static void simple_sheets_radio_cb (GtkToggleButton *togglebutton,
101 glPrintOpDialog *op);
103 static void simple_first_spin_cb (GtkSpinButton *spinbutton,
104 glPrintOpDialog *op);
106 static void simple_last_spin_cb (GtkSpinButton *spinbutton,
107 glPrintOpDialog *op);
109 static void preview_pressed_cb (glMiniPreview *preview,
112 glPrintOpDialog *op);
114 static void preview_released_cb (glMiniPreview *preview,
117 glPrintOpDialog *op);
119 static void merge_spin_cb (GtkSpinButton *spinbutton,
120 glPrintOpDialog *op);
122 static void merge_collate_check_cb (GtkToggleButton *togglebutton,
123 glPrintOpDialog *op);
125 static void preview_clicked_cb (glMiniPreview *preview,
127 glPrintOpDialog *op);
129 static void option_toggled_cb (GtkToggleButton *togglebutton,
130 glPrintOpDialog *op);
133 /*****************************************************************************/
134 /* Boilerplate object stuff. */
135 /*****************************************************************************/
136 G_DEFINE_TYPE (glPrintOpDialog, gl_print_op_dialog, GL_TYPE_PRINT_OP)
140 gl_print_op_dialog_class_init (glPrintOpDialogClass *class)
142 GObjectClass *object_class = G_OBJECT_CLASS (class);
144 gl_debug (DEBUG_PRINT, "");
146 gl_print_op_dialog_parent_class = g_type_class_peek_parent (class);
148 object_class->finalize = gl_print_op_dialog_finalize;
153 gl_print_op_dialog_init (glPrintOpDialog *op)
155 gl_debug (DEBUG_PRINT, "");
157 gtk_print_operation_set_use_full_page (GTK_PRINT_OPERATION (op), TRUE);
159 gtk_print_operation_set_unit (GTK_PRINT_OPERATION (op), GTK_UNIT_POINTS);
161 op->priv = g_new0 (glPrintOpDialogPrivate, 1);
167 gl_print_op_dialog_finalize (GObject *object)
169 glPrintOpDialog *op = GL_PRINT_OP_DIALOG (object);
171 gl_debug (DEBUG_PRINT, "");
173 g_return_if_fail (object != NULL);
174 g_return_if_fail (GL_IS_PRINT_OP (op));
175 g_return_if_fail (op->priv != NULL);
177 g_object_unref (G_OBJECT(op->priv->builder));
180 G_OBJECT_CLASS (gl_print_op_dialog_parent_class)->finalize (object);
186 /*****************************************************************************/
188 /*****************************************************************************/
190 gl_print_op_dialog_new (glLabel *label)
194 gl_debug (DEBUG_PRINT, "");
196 op = GL_PRINT_OP_DIALOG (g_object_new (GL_TYPE_PRINT_OP_DIALOG, NULL));
198 gl_print_op_dialog_construct (GL_PRINT_OP_DIALOG(op), label);
204 /*--------------------------------------------------------------------------*/
205 /* PRIVATE. Construct op. */
206 /*--------------------------------------------------------------------------*/
208 gl_print_op_dialog_construct (glPrintOpDialog *op,
212 gl_print_op_construct(GL_PRINT_OP (op), label);
214 gtk_print_operation_set_custom_tab_label ( GTK_PRINT_OPERATION (op),
217 g_signal_connect (G_OBJECT (op), "create-custom-widget",
218 G_CALLBACK (create_custom_widget_cb), label);
220 g_signal_connect (G_OBJECT (op), "custom-widget-apply",
221 G_CALLBACK (custom_widget_apply_cb), label);
226 /*--------------------------------------------------------------------------*/
227 /* PRIVATE. "Create custom widget" callback */
228 /*--------------------------------------------------------------------------*/
230 create_custom_widget_cb (GtkPrintOperation *operation,
233 gchar *builder_filename;
235 static gchar *object_ids[] = { "print_custom_widget_hbox",
236 "adjustment1", "adjustment2",
237 "adjustment3", "adjustment4",
240 GError *error = NULL;
241 glPrintOpDialog *op = GL_PRINT_OP_DIALOG (operation);
242 const lglTemplate *template;
243 const lglTemplateFrame *frame;
245 glMerge *merge = NULL;
249 template = gl_label_get_template (label);
250 frame = (lglTemplateFrame *)template->frames->data;
251 op->priv->labels_per_sheet = lgl_template_frame_get_n_labels (frame);
253 builder = gtk_builder_new ();
254 builder_filename = g_build_filename (GLABELS_DATA_DIR, "ui", "print-op-dialog-custom-widget.ui", NULL);
255 gtk_builder_add_objects_from_file (builder, builder_filename, object_ids, &error);
256 g_free (builder_filename);
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), 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 (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 (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);
486 gl_print_op_set_n_sheets (GL_PRINT_OP (op), n_sheets);
488 g_object_unref (G_OBJECT(merge));
496 /*--------------------------------------------------------------------------*/
497 /* PRIVATE. Simple sheets radio "toggled" callback */
498 /*--------------------------------------------------------------------------*/
500 simple_sheets_radio_cb (GtkToggleButton *togglebutton,
505 if (gtk_toggle_button_get_active (togglebutton)) {
507 gtk_widget_set_sensitive (op->priv->simple_sheets_spin, TRUE);
508 gtk_widget_set_sensitive (op->priv->simple_first_spin, FALSE);
509 gtk_widget_set_sensitive (op->priv->simple_last_spin, FALSE);
511 gtk_spin_button_set_range (GTK_SPIN_BUTTON (op->priv->simple_first_spin),
512 1, op->priv->labels_per_sheet);
513 gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->priv->simple_first_spin),
516 gtk_spin_button_set_range (GTK_SPIN_BUTTON (op->priv->simple_last_spin),
517 1, op->priv->labels_per_sheet);
518 gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->priv->simple_last_spin),
519 op->priv->labels_per_sheet);
521 gl_mini_preview_set_n_sheets (GL_MINI_PREVIEW (op->priv->preview),
522 gl_print_op_get_n_sheets (GL_PRINT_OP(op)));
523 gl_mini_preview_set_first (GL_MINI_PREVIEW (op->priv->preview), 1);
524 gl_mini_preview_set_last (GL_MINI_PREVIEW (op->priv->preview),
525 op->priv->labels_per_sheet);
529 gtk_widget_set_sensitive (op->priv->simple_sheets_spin, FALSE);
530 gtk_widget_set_sensitive (op->priv->simple_first_spin, TRUE);
531 gtk_widget_set_sensitive (op->priv->simple_last_spin, TRUE);
533 gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->priv->simple_sheets_spin), 1);
535 first = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->simple_first_spin));
536 last = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->simple_last_spin));
538 gl_mini_preview_set_n_sheets (GL_MINI_PREVIEW (op->priv->preview), 1);
539 gl_mini_preview_set_first (GL_MINI_PREVIEW (op->priv->preview), first);
540 gl_mini_preview_set_last (GL_MINI_PREVIEW (op->priv->preview), last);
546 /*--------------------------------------------------------------------------*/
547 /* PRIVATE. Simple first label spinbutton "changed" callback */
548 /*--------------------------------------------------------------------------*/
550 simple_first_spin_cb (GtkSpinButton *spinbutton,
555 first = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->simple_first_spin));
556 last = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->simple_last_spin));
558 /* Adjust range of last spin button. */
559 gtk_spin_button_set_range (GTK_SPIN_BUTTON (op->priv->simple_last_spin),
560 first, op->priv->labels_per_sheet);
562 /* Update preview. */
563 gl_mini_preview_set_first (GL_MINI_PREVIEW (op->priv->preview), first);
564 gl_mini_preview_set_last (GL_MINI_PREVIEW (op->priv->preview), last);
569 /*--------------------------------------------------------------------------*/
570 /* PRIVATE. Simple last label spinbutton "changed" callback */
571 /*--------------------------------------------------------------------------*/
573 simple_last_spin_cb (GtkSpinButton *spinbutton,
578 first = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->simple_first_spin));
579 last = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->simple_last_spin));
581 /* Adjust range of first spin button. */
582 gtk_spin_button_set_range (GTK_SPIN_BUTTON (op->priv->simple_first_spin),
585 /* Update preview. */
586 gl_mini_preview_set_first (GL_MINI_PREVIEW (op->priv->preview), first);
587 gl_mini_preview_set_last (GL_MINI_PREVIEW (op->priv->preview), last);
592 /*--------------------------------------------------------------------------*/
593 /* PRIVATE. Preview "pressed" callback */
594 /*--------------------------------------------------------------------------*/
596 preview_pressed_cb (glMiniPreview *preview,
603 if ( !op->priv->merge_flag )
606 /* Update controls. */
607 old_first = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->simple_first_spin));
608 if ( first > old_first )
610 gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->priv->simple_last_spin), last);
611 gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->priv->simple_first_spin), first);
615 gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->priv->simple_first_spin), first);
616 gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->priv->simple_last_spin), last);
618 if ( (first == 1) && (last == op->priv->labels_per_sheet) )
620 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (op->priv->simple_sheets_radio), TRUE);
621 gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->priv->simple_sheets_spin), 1);
625 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (op->priv->simple_labels_radio), TRUE);
630 gl_mini_preview_highlight_range (GL_MINI_PREVIEW (op->priv->preview), first, last);
635 /*--------------------------------------------------------------------------*/
636 /* PRIVATE. Preview "pressed" callback */
637 /*--------------------------------------------------------------------------*/
639 preview_released_cb (glMiniPreview *preview,
645 gl_mini_preview_highlight_range (GL_MINI_PREVIEW (op->priv->preview), 0, 0);
650 /*--------------------------------------------------------------------------*/
651 /* PRIVATE. "changed" callback for merge first and copies spin buttons. */
652 /*--------------------------------------------------------------------------*/
654 merge_spin_cb (GtkSpinButton *spinbutton,
657 gint first, n_copies;
659 first = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->merge_first_spin));
661 n_copies = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->merge_copies_spin));
663 gl_mini_preview_set_first (GL_MINI_PREVIEW(op->priv->preview), first);
664 gl_mini_preview_set_n_copies (GL_MINI_PREVIEW(op->priv->preview), n_copies);
666 gtk_widget_set_sensitive (op->priv->merge_collate_check, (n_copies > 1));
667 gtk_widget_set_sensitive (op->priv->merge_collate_image, (n_copies > 1));
671 /*--------------------------------------------------------------------------*/
672 /* PRIVATE. Merge first collate check "toggled" callback */
673 /*--------------------------------------------------------------------------*/
675 merge_collate_check_cb (GtkToggleButton *togglebutton,
680 if ( gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (op->priv->merge_collate_check)) )
682 pixbuf = gdk_pixbuf_new_from_xpm_data ( (const char **)nocollate_xpm);
683 gl_mini_preview_set_collate_flag (GL_MINI_PREVIEW (op->priv->preview), TRUE);
687 pixbuf = gdk_pixbuf_new_from_xpm_data ( (const char **)collate_xpm);
688 gl_mini_preview_set_collate_flag (GL_MINI_PREVIEW (op->priv->preview), FALSE);
691 gtk_image_set_from_pixbuf (GTK_IMAGE (op->priv->merge_collate_image), pixbuf);
695 /*--------------------------------------------------------------------------*/
696 /* PRIVATE. Preview "clicked" callback */
697 /*--------------------------------------------------------------------------*/
699 preview_clicked_cb (glMiniPreview *preview,
705 if ( op->priv->merge_flag )
708 /* Update controls. */
709 gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->priv->merge_first_spin), first);
711 n_copies = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (op->priv->merge_copies_spin));
712 gtk_widget_set_sensitive (op->priv->merge_collate_check, (n_copies > 1));
713 gtk_widget_set_sensitive (op->priv->merge_collate_image, (n_copies > 1));
719 /*--------------------------------------------------------------------------*/
720 /* PRIVATE. Option checkbox "toggled" callback */
721 /*--------------------------------------------------------------------------*/
723 option_toggled_cb (GtkToggleButton *togglebutton,
728 flag = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (op->priv->outline_check));
729 gl_mini_preview_set_outline_flag (GL_MINI_PREVIEW (op->priv->preview), flag);
731 flag = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (op->priv->reverse_check));
732 gl_mini_preview_set_reverse_flag (GL_MINI_PREVIEW (op->priv->preview), flag);
734 flag = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (op->priv->crop_marks_check));
735 gl_mini_preview_set_crop_marks_flag (GL_MINI_PREVIEW (op->priv->preview), flag);
742 * Local Variables: -- emacs
744 * c-basic-offset: 8 -- emacs
745 * tab-width: 8 -- emacs
746 * indent-tabs-mode: nil -- emacs