3 * Copyright (C) 2003-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 "template-designer.h"
25 #include <glib/gi18n.h>
26 #include <gtk/gtkbuilder.h>
27 #include <gtk/gtktogglebutton.h>
28 #include <gtk/gtkcombobox.h>
29 #include <gtk/gtkspinbutton.h>
30 #include <gtk/gtklabel.h>
35 #include <libglabels/db.h>
36 #include "wdgt-mini-preview.h"
37 #include "mini-preview-pixbuf-cache.h"
44 /*========================================================*/
45 /* Private macros and constants. */
46 /*========================================================*/
47 #define ICON_PIXMAP (GLABELS_ICON_DIR "glabels.png")
49 #define EX_RECT_IMAGE (GLABELS_PIXMAP_DIR "ex-rect-size.png")
50 #define EX_ROUND_IMAGE (GLABELS_PIXMAP_DIR "ex-round-size.png")
51 #define EX_CD_IMAGE (GLABELS_PIXMAP_DIR "ex-cd-size.png")
52 #define EX_NLAYOUTS_IMAGE1 (GLABELS_PIXMAP_DIR "ex-1layout.png")
53 #define EX_NLAYOUTS_IMAGE2 (GLABELS_PIXMAP_DIR "ex-2layouts.png")
55 #define DEFAULT_MARGIN 9.0
57 #define DEFAULT_RECT_W 252.0
58 #define DEFAULT_RECT_H 144.0
59 #define DEFAULT_RECT_R 0.0
60 #define DEFAULT_RECT_WASTE 0.0 /* Should never exceed 1/2 the distance between items. */
62 #define DEFAULT_ROUND_R 72.0
63 #define DEFAULT_ROUND_WASTE 0.0 /* Should never exceed 1/2 the distance between items. */
65 #define DEFAULT_CD_RADIUS 166.5
66 #define DEFAULT_CD_HOLE 58.5
67 #define DEFAULT_CD_WASTE 9.0 /* Should never exceed 1/2 the distance between items. */
70 #define MAX_PAGE_DIM_POINTS 5000.0
73 /*========================================================*/
75 /*========================================================*/
77 struct _glTemplateDesignerPrivate
82 GtkWidget *start_page;
84 GtkWidget *pg_size_page;
85 GtkWidget *shape_page;
86 GtkWidget *rect_size_page;
87 GtkWidget *round_size_page;
88 GtkWidget *cd_size_page;
89 GtkWidget *nlayouts_page;
90 GtkWidget *layout_page;
91 GtkWidget *finish_page;
93 /* Name page controls */
94 GtkWidget *brand_entry;
95 GtkWidget *part_num_entry;
96 GtkWidget *name_warning_image;
97 GtkWidget *name_warning_label;
98 GtkWidget *description_entry;
100 /* Page size page controls */
101 GtkWidget *pg_size_combo;
102 GtkWidget *pg_w_spin;
103 GtkWidget *pg_h_spin;
104 GtkWidget *pg_w_units_label;
105 GtkWidget *pg_h_units_label;
107 /* Shape page controls */
108 GtkWidget *shape_rect_radio;
109 GtkWidget *shape_round_radio;
110 GtkWidget *shape_cd_radio;
112 /* Label size (rectangular) page controls */
113 GtkWidget *rect_image;
114 GtkWidget *rect_w_spin;
115 GtkWidget *rect_h_spin;
116 GtkWidget *rect_r_spin;
117 GtkWidget *rect_x_waste_spin;
118 GtkWidget *rect_y_waste_spin;
119 GtkWidget *rect_margin_spin;
120 GtkWidget *rect_w_units_label;
121 GtkWidget *rect_h_units_label;
122 GtkWidget *rect_r_units_label;
123 GtkWidget *rect_x_waste_units_label;
124 GtkWidget *rect_y_waste_units_label;
125 GtkWidget *rect_margin_units_label;
127 /* Label size (round) page controls */
128 GtkWidget *round_image;
129 GtkWidget *round_r_spin;
130 GtkWidget *round_waste_spin;
131 GtkWidget *round_margin_spin;
132 GtkWidget *round_r_units_label;
133 GtkWidget *round_waste_units_label;
134 GtkWidget *round_margin_units_label;
136 /* Label size (cd) page controls */
138 GtkWidget *cd_radius_spin;
139 GtkWidget *cd_hole_spin;
140 GtkWidget *cd_w_spin;
141 GtkWidget *cd_h_spin;
142 GtkWidget *cd_waste_spin;
143 GtkWidget *cd_margin_spin;
144 GtkWidget *cd_radius_units_label;
145 GtkWidget *cd_hole_units_label;
146 GtkWidget *cd_w_units_label;
147 GtkWidget *cd_h_units_label;
148 GtkWidget *cd_waste_units_label;
149 GtkWidget *cd_margin_units_label;
151 /* Number of layouts controls */
152 GtkWidget *nlayouts_image1;
153 GtkWidget *nlayouts_image2;
154 GtkWidget *nlayouts_spin;
156 /* Layout page controls */
157 GtkWidget *layout1_head_label;
158 GtkWidget *layout1_nx_spin;
159 GtkWidget *layout1_ny_spin;
160 GtkWidget *layout1_x0_spin;
161 GtkWidget *layout1_y0_spin;
162 GtkWidget *layout1_dx_spin;
163 GtkWidget *layout1_dy_spin;
164 GtkWidget *layout2_head_label;
165 GtkWidget *layout2_nx_spin;
166 GtkWidget *layout2_ny_spin;
167 GtkWidget *layout2_x0_spin;
168 GtkWidget *layout2_y0_spin;
169 GtkWidget *layout2_dx_spin;
170 GtkWidget *layout2_dy_spin;
171 GtkWidget *layout_x0_units_label;
172 GtkWidget *layout_y0_units_label;
173 GtkWidget *layout_dx_units_label;
174 GtkWidget *layout_dy_units_label;
175 GtkWidget *mini_preview_vbox;
176 GtkWidget *layout_mini_preview;
177 GtkWidget *layout_test_button;
179 /* Units related stuff */
180 const gchar *units_string;
181 gdouble units_per_point;
185 /* Prevent recursion */
186 gboolean stop_signals;
189 /* Page numbers for traversing GtkAssistant */
204 /*========================================================*/
205 /* Private globals. */
206 /*========================================================*/
209 /*========================================================*/
210 /* Private function prototypes. */
211 /*========================================================*/
213 static void gl_template_designer_finalize (GObject *object);
214 static void gl_template_designer_construct (glTemplateDesigner *dialog);
216 static void construct_start_page (glTemplateDesigner *dialog,
219 static void construct_name_page (glTemplateDesigner *dialog,
222 static void construct_pg_size_page (glTemplateDesigner *dialog,
225 static void construct_shape_page (glTemplateDesigner *dialog,
228 static void construct_rect_size_page (glTemplateDesigner *dialog,
231 static void construct_round_size_page (glTemplateDesigner *dialog,
234 static void construct_cd_size_page (glTemplateDesigner *dialog,
237 static void construct_nlayouts_page (glTemplateDesigner *dialog,
240 static void construct_layout_page (glTemplateDesigner *dialog,
243 static void construct_finish_page (glTemplateDesigner *dialog,
246 static void cancel_cb (glTemplateDesigner *dialog);
247 static void apply_cb (glTemplateDesigner *dialog);
248 static void close_cb (glTemplateDesigner *dialog);
249 static void prepare_cb (glTemplateDesigner *dialog,
252 static gint forward_page_function (gint current_page,
255 static void name_page_changed_cb (glTemplateDesigner *dialog);
257 static void pg_size_page_changed_cb (glTemplateDesigner *dialog);
259 static void rect_size_page_prepare_cb (glTemplateDesigner *dialog);
261 static void round_size_page_prepare_cb (glTemplateDesigner *dialog);
263 static void cd_size_page_prepare_cb (glTemplateDesigner *dialog);
265 static void layout_page_prepare_cb (glTemplateDesigner *dialog);
267 static void layout_page_changed_cb (glTemplateDesigner *dialog);
269 static void print_test_cb (glTemplateDesigner *dialog);
271 static lglTemplate *build_template (glTemplateDesigner *dialog);
274 /*****************************************************************************/
275 /* Boilerplate object stuff. */
276 /*****************************************************************************/
277 G_DEFINE_TYPE (glTemplateDesigner, gl_template_designer, GTK_TYPE_ASSISTANT);
281 gl_template_designer_class_init (glTemplateDesignerClass *class)
283 GObjectClass *object_class = G_OBJECT_CLASS (class);
285 gl_template_designer_parent_class = g_type_class_peek_parent (class);
287 object_class->finalize = gl_template_designer_finalize;
292 gl_template_designer_init (glTemplateDesigner *dialog)
295 static gchar *object_ids[] = { "start_page",
305 "adjustment1", "adjustment2", "adjustment3",
306 "adjustment4", "adjustment5", "adjustment6",
307 "adjustment7", "adjustment8", "adjustment9",
308 "adjustment10", "adjustment11", "adjustment12",
309 "adjustment13", "adjustment14", "adjustment15",
310 "adjustment16", "adjustment17", "adjustment18",
311 "adjustment19", "adjustment20", "adjustment21",
312 "adjustment22", "adjustment23", "adjustment24",
313 "adjustment25", "adjustment26", "adjustment27",
314 "adjustment28", "adjustment29", "adjustment30",
316 GError *error = NULL;
318 gl_debug (DEBUG_TEMPLATE, "START");
320 dialog->priv = g_new0 (glTemplateDesignerPrivate, 1);
322 dialog->priv->builder = gtk_builder_new ();
323 gtk_builder_add_objects_from_file (dialog->priv->builder,
324 GLABELS_BUILDER_DIR "template-designer.builder",
328 g_critical ("%s\n\ngLabels may not be installed correctly!", error->message);
329 g_error_free (error);
333 gl_debug (DEBUG_TEMPLATE, "END");
340 gl_template_designer_finalize (GObject *object)
342 glTemplateDesigner* dialog = GL_TEMPLATE_DESIGNER (object);
344 gl_debug (DEBUG_TEMPLATE, "START");
346 g_return_if_fail (object != NULL);
347 g_return_if_fail (GL_IS_TEMPLATE_DESIGNER (dialog));
348 g_return_if_fail (dialog->priv != NULL);
350 if (dialog->priv->builder)
352 g_object_unref (dialog->priv->builder);
354 g_free (dialog->priv);
356 G_OBJECT_CLASS (gl_template_designer_parent_class)->finalize (object);
358 gl_debug (DEBUG_TEMPLATE, "END");
362 /*****************************************************************************/
363 /* NEW preferences dialog. */
364 /*****************************************************************************/
366 gl_template_designer_new (GtkWindow *parent)
370 gl_debug (DEBUG_TEMPLATE, "START");
372 dialog = GTK_WIDGET (g_object_new (GL_TYPE_TEMPLATE_DESIGNER, NULL));
375 gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
377 gl_template_designer_construct (GL_TEMPLATE_DESIGNER(dialog));
380 gl_debug (DEBUG_TEMPLATE, "END");
386 /*---------------------------------------------------------------------------*/
387 /* PRIVATE. Construct composite widget. */
388 /*---------------------------------------------------------------------------*/
390 gl_template_designer_construct (glTemplateDesigner *dialog)
394 gl_debug (DEBUG_TEMPLATE, "START");
396 g_return_if_fail (dialog && GL_IS_TEMPLATE_DESIGNER (dialog));
397 g_return_if_fail (dialog->priv != NULL);
399 /* Initialize units stuff from prefs */
400 dialog->priv->units_string = gl_prefs_get_units_string ();
401 dialog->priv->units_per_point = gl_prefs_get_units_per_point ();
402 dialog->priv->climb_rate = gl_prefs_get_units_step_size ();
403 dialog->priv->digits = gl_prefs_get_units_precision ();
405 gtk_window_set_title (GTK_WINDOW(dialog), _("gLabels Template Designer"));
407 logo = gdk_pixbuf_new_from_file (ICON_PIXMAP, NULL);
409 /* Costruct and append pages (must be same order as PAGE_NUM enums. */
410 construct_start_page (dialog, logo);
411 construct_name_page (dialog, logo);
412 construct_pg_size_page (dialog, logo);
413 construct_shape_page (dialog, logo);
414 construct_rect_size_page (dialog, logo);
415 construct_round_size_page (dialog, logo);
416 construct_cd_size_page (dialog, logo);
417 construct_nlayouts_page (dialog, logo);
418 construct_layout_page (dialog, logo);
419 construct_finish_page (dialog, logo);
421 gtk_assistant_set_forward_page_func (GTK_ASSISTANT (dialog),
422 forward_page_function,
427 g_signal_connect_swapped (G_OBJECT(dialog), "cancel",
428 G_CALLBACK(cancel_cb), dialog);
429 g_signal_connect_swapped (G_OBJECT(dialog), "apply",
430 G_CALLBACK(apply_cb), dialog);
431 g_signal_connect_swapped (G_OBJECT(dialog), "close",
432 G_CALLBACK(close_cb), dialog);
433 g_signal_connect (G_OBJECT(dialog), "prepare",
434 G_CALLBACK(prepare_cb), NULL);
436 gtk_widget_show_all (GTK_WIDGET(dialog));
438 gl_debug (DEBUG_TEMPLATE, "END");
442 /*--------------------------------------------------------------------------*/
443 /* PRIVATE. Construct start page. */
444 /*--------------------------------------------------------------------------*/
446 construct_start_page (glTemplateDesigner *dialog,
449 gl_debug (DEBUG_TEMPLATE, "START");
451 gl_util_get_builder_widgets (dialog->priv->builder,
452 "start_page", &dialog->priv->start_page,
455 gtk_assistant_append_page (GTK_ASSISTANT (dialog),
456 dialog->priv->start_page);
458 gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
459 dialog->priv->start_page,
461 gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
462 dialog->priv->start_page,
464 gtk_assistant_set_page_type (GTK_ASSISTANT (dialog),
465 dialog->priv->start_page,
466 GTK_ASSISTANT_PAGE_INTRO);
467 gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
468 dialog->priv->start_page,
471 gl_debug (DEBUG_TEMPLATE, "END");
475 /*--------------------------------------------------------------------------*/
476 /* PRIVATE. Construct name page. */
477 /*--------------------------------------------------------------------------*/
479 construct_name_page (glTemplateDesigner *dialog,
482 gl_debug (DEBUG_TEMPLATE, "START");
484 gl_util_get_builder_widgets (dialog->priv->builder,
485 "name_page", &dialog->priv->name_page,
486 "brand_entry", &dialog->priv->brand_entry,
487 "part_num_entry", &dialog->priv->part_num_entry,
488 "name_warning_image", &dialog->priv->name_warning_image,
489 "name_warning_label", &dialog->priv->name_warning_label,
490 "description_entry", &dialog->priv->description_entry,
494 gtk_assistant_append_page (GTK_ASSISTANT (dialog),
495 dialog->priv->name_page);
497 gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
498 dialog->priv->name_page,
499 _("Name and Description"));
500 gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
501 dialog->priv->name_page,
504 /* Connect a handler that listens for changes in these widgets */
505 /* This controls whether we can progress to the next page. */
506 g_signal_connect_swapped (G_OBJECT(dialog->priv->brand_entry), "changed",
507 G_CALLBACK(name_page_changed_cb), dialog);
508 g_signal_connect_swapped (G_OBJECT(dialog->priv->part_num_entry), "changed",
509 G_CALLBACK(name_page_changed_cb), dialog);
510 g_signal_connect_swapped (G_OBJECT(dialog->priv->description_entry), "changed",
511 G_CALLBACK(name_page_changed_cb), dialog);
513 gl_debug (DEBUG_TEMPLATE, "END");
517 /*--------------------------------------------------------------------------*/
518 /* PRIVATE. Construct page size page. */
519 /*--------------------------------------------------------------------------*/
521 construct_pg_size_page (glTemplateDesigner *dialog,
525 const gchar *default_page_size_id;
526 gchar *default_page_size_name;
528 gl_debug (DEBUG_TEMPLATE, "START");
530 gl_util_get_builder_widgets (dialog->priv->builder,
531 "pg_size_page", &dialog->priv->pg_size_page,
532 "pg_size_combo", &dialog->priv->pg_size_combo,
533 "pg_w_spin", &dialog->priv->pg_w_spin,
534 "pg_h_spin", &dialog->priv->pg_h_spin,
535 "pg_w_units_label", &dialog->priv->pg_w_units_label,
536 "pg_h_units_label", &dialog->priv->pg_h_units_label,
540 gl_util_combo_box_add_text_model (GTK_COMBO_BOX (dialog->priv->pg_size_combo));
542 gtk_assistant_append_page (GTK_ASSISTANT (dialog),
543 dialog->priv->pg_size_page);
545 gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
546 dialog->priv->pg_size_page,
548 gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
549 dialog->priv->pg_size_page,
551 gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
552 dialog->priv->pg_size_page,
555 /* Load page size combo */
556 page_sizes = lgl_db_get_paper_name_list ();
557 gl_util_combo_box_set_strings (GTK_COMBO_BOX (dialog->priv->pg_size_combo), page_sizes);
558 lgl_db_free_paper_name_list (page_sizes);
559 default_page_size_id = gl_prefs_get_page_size ();
560 default_page_size_name = lgl_db_lookup_paper_name_from_id (default_page_size_id);
561 gl_util_combo_box_set_active_text (GTK_COMBO_BOX (dialog->priv->pg_size_combo), default_page_size_name);
562 g_free (default_page_size_name);
564 /* Apply units to spinbuttons and units labels. */
565 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin),
566 dialog->priv->digits);
567 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin),
568 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
569 gtk_label_set_text (GTK_LABEL(dialog->priv->pg_w_units_label),
570 dialog->priv->units_string);
571 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->pg_w_spin),
572 0.0, MAX_PAGE_DIM_POINTS*dialog->priv->units_per_point);
573 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->pg_h_spin),
574 dialog->priv->digits);
575 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->pg_h_spin),
576 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
577 gtk_label_set_text (GTK_LABEL(dialog->priv->pg_h_units_label),
578 dialog->priv->units_string);
579 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->pg_h_spin),
580 0.0, MAX_PAGE_DIM_POINTS*dialog->priv->units_per_point);
582 /* Connect a handler that listens for changes in these widgets */
583 /* This controls sensitivity of related widgets. */
584 g_signal_connect_swapped (G_OBJECT(dialog->priv->pg_size_combo), "changed",
585 G_CALLBACK(pg_size_page_changed_cb), dialog);
587 gl_debug (DEBUG_TEMPLATE, "END");
591 /*--------------------------------------------------------------------------*/
592 /* PRIVATE. Construct shape page. */
593 /*--------------------------------------------------------------------------*/
595 construct_shape_page (glTemplateDesigner *dialog,
598 gl_debug (DEBUG_TEMPLATE, "START");
600 gl_util_get_builder_widgets (dialog->priv->builder,
601 "shape_page", &dialog->priv->shape_page,
602 "shape_rect_radio", &dialog->priv->shape_rect_radio,
603 "shape_round_radio", &dialog->priv->shape_round_radio,
604 "shape_cd_radio", &dialog->priv->shape_cd_radio,
608 gtk_assistant_append_page (GTK_ASSISTANT (dialog),
609 dialog->priv->shape_page);
611 gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
612 dialog->priv->shape_page,
613 _("Label or Card Shape"));
614 gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
615 dialog->priv->shape_page,
617 gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
618 dialog->priv->shape_page,
621 gl_debug (DEBUG_TEMPLATE, "END");
625 /*--------------------------------------------------------------------------*/
626 /* PRIVATE. Construct rect size page. */
627 /*--------------------------------------------------------------------------*/
629 construct_rect_size_page (glTemplateDesigner *dialog,
634 gl_debug (DEBUG_TEMPLATE, "START");
636 gl_util_get_builder_widgets (dialog->priv->builder,
637 "rect_size_page", &dialog->priv->rect_size_page,
638 "rect_image", &dialog->priv->rect_image,
639 "rect_w_spin", &dialog->priv->rect_w_spin,
640 "rect_h_spin", &dialog->priv->rect_h_spin,
641 "rect_r_spin", &dialog->priv->rect_r_spin,
642 "rect_x_waste_spin", &dialog->priv->rect_x_waste_spin,
643 "rect_y_waste_spin", &dialog->priv->rect_y_waste_spin,
644 "rect_margin_spin", &dialog->priv->rect_margin_spin,
645 "rect_w_units_label", &dialog->priv->rect_w_units_label,
646 "rect_h_units_label", &dialog->priv->rect_h_units_label,
647 "rect_r_units_label", &dialog->priv->rect_r_units_label,
648 "rect_x_waste_units_label", &dialog->priv->rect_x_waste_units_label,
649 "rect_y_waste_units_label", &dialog->priv->rect_y_waste_units_label,
650 "rect_margin_units_label", &dialog->priv->rect_margin_units_label,
654 gtk_assistant_append_page (GTK_ASSISTANT (dialog),
655 dialog->priv->rect_size_page);
657 gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
658 dialog->priv->rect_size_page,
659 _("Label or Card Size"));
660 gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
661 dialog->priv->rect_size_page,
663 gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
664 dialog->priv->rect_size_page,
667 /* Initialize illustration. */
668 pixbuf = gdk_pixbuf_new_from_file (EX_RECT_IMAGE, NULL);
669 gtk_image_set_from_pixbuf (GTK_IMAGE(dialog->priv->rect_image), pixbuf);
671 /* Apply units to spinbuttons and units labels. */
672 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->rect_w_spin),
673 dialog->priv->digits);
674 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->rect_w_spin),
675 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
676 gtk_label_set_text (GTK_LABEL(dialog->priv->rect_w_units_label),
677 dialog->priv->units_string);
678 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->rect_h_spin),
679 dialog->priv->digits);
680 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->rect_h_spin),
681 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
682 gtk_label_set_text (GTK_LABEL(dialog->priv->rect_h_units_label),
683 dialog->priv->units_string);
684 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->rect_r_spin),
685 dialog->priv->digits);
686 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->rect_r_spin),
687 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
688 gtk_label_set_text (GTK_LABEL(dialog->priv->rect_r_units_label),
689 dialog->priv->units_string);
690 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->rect_x_waste_spin),
691 dialog->priv->digits);
692 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->rect_x_waste_spin),
693 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
694 gtk_label_set_text (GTK_LABEL(dialog->priv->rect_x_waste_units_label),
695 dialog->priv->units_string);
696 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->rect_y_waste_spin),
697 dialog->priv->digits);
698 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->rect_y_waste_spin),
699 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
700 gtk_label_set_text (GTK_LABEL(dialog->priv->rect_y_waste_units_label),
701 dialog->priv->units_string);
702 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->rect_margin_spin),
703 dialog->priv->digits);
704 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->rect_margin_spin),
705 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
706 gtk_label_set_text (GTK_LABEL(dialog->priv->rect_margin_units_label),
707 dialog->priv->units_string);
709 /* Load some realistic defaults. */
710 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_w_spin),
711 DEFAULT_RECT_W * dialog->priv->units_per_point);
712 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_h_spin),
713 DEFAULT_RECT_H * dialog->priv->units_per_point);
714 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_r_spin),
715 DEFAULT_RECT_R * dialog->priv->units_per_point);
716 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_x_waste_spin),
717 DEFAULT_RECT_WASTE * dialog->priv->units_per_point);
718 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_y_waste_spin),
719 DEFAULT_RECT_WASTE * dialog->priv->units_per_point);
720 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_margin_spin),
721 DEFAULT_MARGIN * dialog->priv->units_per_point);
723 gl_debug (DEBUG_TEMPLATE, "END");
727 /*--------------------------------------------------------------------------*/
728 /* PRIVATE. Construct round size page. */
729 /*--------------------------------------------------------------------------*/
731 construct_round_size_page (glTemplateDesigner *dialog,
736 gl_debug (DEBUG_TEMPLATE, "START");
738 gl_util_get_builder_widgets (dialog->priv->builder,
739 "round_size_page", &dialog->priv->round_size_page,
740 "round_image", &dialog->priv->round_image,
741 "round_r_spin", &dialog->priv->round_r_spin,
742 "round_waste_spin", &dialog->priv->round_waste_spin,
743 "round_margin_spin", &dialog->priv->round_margin_spin,
744 "round_r_units_label", &dialog->priv->round_r_units_label,
745 "round_waste_units_label", &dialog->priv->round_waste_units_label,
746 "round_margin_units_label", &dialog->priv->round_margin_units_label,
750 gtk_assistant_append_page (GTK_ASSISTANT (dialog),
751 dialog->priv->round_size_page);
753 gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
754 dialog->priv->round_size_page,
755 _("Label Size (round)"));
756 gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
757 dialog->priv->round_size_page,
759 gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
760 dialog->priv->round_size_page,
763 /* Initialize illustration. */
764 pixbuf = gdk_pixbuf_new_from_file (EX_ROUND_IMAGE, NULL);
765 gtk_image_set_from_pixbuf (GTK_IMAGE(dialog->priv->round_image), pixbuf);
767 /* Apply units to spinbuttons and units labels. */
768 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->round_r_spin),
769 dialog->priv->digits);
770 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->round_r_spin),
771 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
772 gtk_label_set_text (GTK_LABEL(dialog->priv->round_r_units_label),
773 dialog->priv->units_string);
774 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->round_waste_spin),
775 dialog->priv->digits);
776 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->round_waste_spin),
777 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
778 gtk_label_set_text (GTK_LABEL(dialog->priv->round_waste_units_label),
779 dialog->priv->units_string);
780 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->round_margin_spin),
781 dialog->priv->digits);
782 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->round_margin_spin),
783 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
784 gtk_label_set_text (GTK_LABEL(dialog->priv->round_margin_units_label),
785 dialog->priv->units_string);
787 /* Load some realistic defaults. */
788 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->round_r_spin),
789 DEFAULT_ROUND_R * dialog->priv->units_per_point);
790 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->round_waste_spin),
791 DEFAULT_ROUND_WASTE * dialog->priv->units_per_point);
792 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->round_margin_spin),
793 DEFAULT_MARGIN * dialog->priv->units_per_point);
795 gl_debug (DEBUG_TEMPLATE, "END");
799 /*--------------------------------------------------------------------------*/
800 /* PRIVATE. Construct CD/DVD size page. */
801 /*--------------------------------------------------------------------------*/
803 construct_cd_size_page (glTemplateDesigner *dialog,
808 gl_debug (DEBUG_TEMPLATE, "START");
810 gl_util_get_builder_widgets (dialog->priv->builder,
811 "cd_size_page", &dialog->priv->cd_size_page,
812 "cd_image", &dialog->priv->cd_image,
813 "cd_radius_spin", &dialog->priv->cd_radius_spin,
814 "cd_hole_spin", &dialog->priv->cd_hole_spin,
815 "cd_w_spin", &dialog->priv->cd_w_spin,
816 "cd_h_spin", &dialog->priv->cd_h_spin,
817 "cd_waste_spin", &dialog->priv->cd_waste_spin,
818 "cd_margin_spin", &dialog->priv->cd_margin_spin,
819 "cd_radius_units_label", &dialog->priv->cd_radius_units_label,
820 "cd_hole_units_label", &dialog->priv->cd_hole_units_label,
821 "cd_w_units_label", &dialog->priv->cd_w_units_label,
822 "cd_h_units_label", &dialog->priv->cd_h_units_label,
823 "cd_waste_units_label", &dialog->priv->cd_waste_units_label,
824 "cd_margin_units_label", &dialog->priv->cd_margin_units_label,
828 gtk_assistant_append_page (GTK_ASSISTANT (dialog),
829 dialog->priv->cd_size_page);
831 gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
832 dialog->priv->cd_size_page,
833 _("Label Size (CD/DVD)"));
834 gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
835 dialog->priv->cd_size_page,
837 gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
838 dialog->priv->cd_size_page,
841 /* Initialize illustration. */
842 pixbuf = gdk_pixbuf_new_from_file (EX_CD_IMAGE, NULL);
843 gtk_image_set_from_pixbuf (GTK_IMAGE(dialog->priv->cd_image), pixbuf);
845 /* Apply units to spinbuttons and units labels. */
846 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->cd_radius_spin),
847 dialog->priv->digits);
848 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->cd_radius_spin),
849 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
850 gtk_label_set_text (GTK_LABEL(dialog->priv->cd_radius_units_label),
851 dialog->priv->units_string);
852 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->cd_hole_spin),
853 dialog->priv->digits);
854 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->cd_hole_spin),
855 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
856 gtk_label_set_text (GTK_LABEL(dialog->priv->cd_hole_units_label),
857 dialog->priv->units_string);
858 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->cd_w_spin),
859 dialog->priv->digits);
860 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->cd_w_spin),
861 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
862 gtk_label_set_text (GTK_LABEL(dialog->priv->cd_w_units_label),
863 dialog->priv->units_string);
864 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->cd_h_spin),
865 dialog->priv->digits);
866 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->cd_h_spin),
867 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
868 gtk_label_set_text (GTK_LABEL(dialog->priv->cd_h_units_label),
869 dialog->priv->units_string);
870 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->cd_waste_spin),
871 dialog->priv->digits);
872 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->cd_waste_spin),
873 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
874 gtk_label_set_text (GTK_LABEL(dialog->priv->cd_waste_units_label),
875 dialog->priv->units_string);
876 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->cd_margin_spin),
877 dialog->priv->digits);
878 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->cd_margin_spin),
879 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
880 gtk_label_set_text (GTK_LABEL(dialog->priv->cd_margin_units_label),
881 dialog->priv->units_string);
883 /* Load some realistic defaults. */
884 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_radius_spin),
885 DEFAULT_CD_RADIUS * dialog->priv->units_per_point);
886 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_hole_spin),
887 DEFAULT_CD_HOLE * dialog->priv->units_per_point);
888 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_waste_spin),
889 DEFAULT_CD_WASTE * dialog->priv->units_per_point);
890 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_margin_spin),
891 DEFAULT_MARGIN * dialog->priv->units_per_point);
893 gl_debug (DEBUG_TEMPLATE, "END");
897 /*--------------------------------------------------------------------------*/
898 /* PRIVATE. Construct number of layouts page. */
899 /*--------------------------------------------------------------------------*/
901 construct_nlayouts_page (glTemplateDesigner *dialog,
906 gl_debug (DEBUG_TEMPLATE, "START");
908 gl_util_get_builder_widgets (dialog->priv->builder,
909 "nlayouts_page", &dialog->priv->nlayouts_page,
910 "nlayouts_image1", &dialog->priv->nlayouts_image1,
911 "nlayouts_image2", &dialog->priv->nlayouts_image2,
912 "nlayouts_spin", &dialog->priv->nlayouts_spin,
916 gtk_assistant_append_page (GTK_ASSISTANT (dialog),
917 dialog->priv->nlayouts_page);
919 gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
920 dialog->priv->nlayouts_page,
921 _("Number of Layouts"));
922 gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
923 dialog->priv->nlayouts_page,
925 gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
926 dialog->priv->nlayouts_page,
929 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->nlayouts_spin),
933 /* Initialize illustrations. */
934 pixbuf = gdk_pixbuf_new_from_file (EX_NLAYOUTS_IMAGE1, NULL);
935 gtk_image_set_from_pixbuf (GTK_IMAGE(dialog->priv->nlayouts_image1), pixbuf);
936 pixbuf = gdk_pixbuf_new_from_file (EX_NLAYOUTS_IMAGE2, NULL);
937 gtk_image_set_from_pixbuf (GTK_IMAGE(dialog->priv->nlayouts_image2), pixbuf);
939 gl_debug (DEBUG_TEMPLATE, "END");
943 /*--------------------------------------------------------------------------*/
944 /* PRIVATE. Construct layout page. */
945 /*--------------------------------------------------------------------------*/
947 construct_layout_page (glTemplateDesigner *dialog,
950 gl_debug (DEBUG_TEMPLATE, "START");
952 gl_util_get_builder_widgets (dialog->priv->builder,
953 "layout_page", &dialog->priv->layout_page,
954 "layout1_head_label", &dialog->priv->layout1_head_label,
955 "layout1_nx_spin", &dialog->priv->layout1_nx_spin,
956 "layout1_ny_spin", &dialog->priv->layout1_ny_spin,
957 "layout1_x0_spin", &dialog->priv->layout1_x0_spin,
958 "layout1_y0_spin", &dialog->priv->layout1_y0_spin,
959 "layout1_dx_spin", &dialog->priv->layout1_dx_spin,
960 "layout1_dy_spin", &dialog->priv->layout1_dy_spin,
961 "layout2_head_label", &dialog->priv->layout2_head_label,
962 "layout2_nx_spin", &dialog->priv->layout2_nx_spin,
963 "layout2_ny_spin", &dialog->priv->layout2_ny_spin,
964 "layout2_x0_spin", &dialog->priv->layout2_x0_spin,
965 "layout2_y0_spin", &dialog->priv->layout2_y0_spin,
966 "layout2_dx_spin", &dialog->priv->layout2_dx_spin,
967 "layout2_dy_spin", &dialog->priv->layout2_dy_spin,
968 "layout_x0_units_label", &dialog->priv->layout_x0_units_label,
969 "layout_y0_units_label", &dialog->priv->layout_y0_units_label,
970 "layout_dx_units_label", &dialog->priv->layout_dx_units_label,
971 "layout_dy_units_label", &dialog->priv->layout_dy_units_label,
972 "mini_preview_vbox", &dialog->priv->mini_preview_vbox,
973 "layout_test_button", &dialog->priv->layout_test_button,
976 dialog->priv->layout_mini_preview = gl_wdgt_mini_preview_new (175, 200);
977 gtk_container_add (GTK_CONTAINER (dialog->priv->mini_preview_vbox),
978 dialog->priv->layout_mini_preview);
980 gtk_assistant_append_page (GTK_ASSISTANT (dialog),
981 dialog->priv->layout_page);
983 gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
984 dialog->priv->layout_page,
986 gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
987 dialog->priv->layout_page,
989 gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
990 dialog->priv->layout_page,
993 /* Apply units to spinbuttons and units labels. */
994 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->layout1_x0_spin),
995 dialog->priv->digits);
996 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->layout1_x0_spin),
997 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
998 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->layout2_x0_spin),
999 dialog->priv->digits);
1000 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->layout2_x0_spin),
1001 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
1002 gtk_label_set_text (GTK_LABEL(dialog->priv->layout_x0_units_label),
1003 dialog->priv->units_string);
1004 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->layout1_y0_spin),
1005 dialog->priv->digits);
1006 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->layout1_y0_spin),
1007 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
1008 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->layout2_y0_spin),
1009 dialog->priv->digits);
1010 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->layout2_y0_spin),
1011 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
1012 gtk_label_set_text (GTK_LABEL(dialog->priv->layout_y0_units_label),
1013 dialog->priv->units_string);
1014 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->layout1_dx_spin),
1015 dialog->priv->digits);
1016 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->layout1_dx_spin),
1017 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
1018 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->layout2_dx_spin),
1019 dialog->priv->digits);
1020 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->layout2_dx_spin),
1021 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
1022 gtk_label_set_text (GTK_LABEL(dialog->priv->layout_dx_units_label),
1023 dialog->priv->units_string);
1024 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->layout1_dy_spin),
1025 dialog->priv->digits);
1026 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->layout1_dy_spin),
1027 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
1028 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->layout2_dy_spin),
1029 dialog->priv->digits);
1030 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->layout2_dy_spin),
1031 dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
1032 gtk_label_set_text (GTK_LABEL(dialog->priv->layout_dy_units_label),
1033 dialog->priv->units_string);
1035 /* Connect a handler that listens for changes in these widgets */
1036 /* This controls sensitivity of related widgets. */
1037 g_signal_connect_swapped (G_OBJECT(dialog->priv->layout1_nx_spin), "changed",
1038 G_CALLBACK(layout_page_changed_cb), dialog);
1039 g_signal_connect_swapped (G_OBJECT(dialog->priv->layout1_ny_spin), "changed",
1040 G_CALLBACK(layout_page_changed_cb), dialog);
1041 g_signal_connect_swapped (G_OBJECT(dialog->priv->layout1_x0_spin), "changed",
1042 G_CALLBACK(layout_page_changed_cb), dialog);
1043 g_signal_connect_swapped (G_OBJECT(dialog->priv->layout1_y0_spin), "changed",
1044 G_CALLBACK(layout_page_changed_cb), dialog);
1045 g_signal_connect_swapped (G_OBJECT(dialog->priv->layout1_dx_spin), "changed",
1046 G_CALLBACK(layout_page_changed_cb), dialog);
1047 g_signal_connect_swapped (G_OBJECT(dialog->priv->layout1_dy_spin), "changed",
1048 G_CALLBACK(layout_page_changed_cb), dialog);
1049 g_signal_connect_swapped (G_OBJECT(dialog->priv->layout2_nx_spin), "changed",
1050 G_CALLBACK(layout_page_changed_cb), dialog);
1051 g_signal_connect_swapped (G_OBJECT(dialog->priv->layout2_ny_spin), "changed",
1052 G_CALLBACK(layout_page_changed_cb), dialog);
1053 g_signal_connect_swapped (G_OBJECT(dialog->priv->layout2_x0_spin), "changed",
1054 G_CALLBACK(layout_page_changed_cb), dialog);
1055 g_signal_connect_swapped (G_OBJECT(dialog->priv->layout2_y0_spin), "changed",
1056 G_CALLBACK(layout_page_changed_cb), dialog);
1057 g_signal_connect_swapped (G_OBJECT(dialog->priv->layout2_dx_spin), "changed",
1058 G_CALLBACK(layout_page_changed_cb), dialog);
1059 g_signal_connect_swapped (G_OBJECT(dialog->priv->layout2_dy_spin), "changed",
1060 G_CALLBACK(layout_page_changed_cb), dialog);
1064 g_signal_connect_swapped (G_OBJECT(dialog->priv->layout_test_button), "clicked",
1065 G_CALLBACK(print_test_cb), dialog);
1067 gl_debug (DEBUG_TEMPLATE, "END");
1071 /*--------------------------------------------------------------------------*/
1072 /* PRIVATE. Construct finish page. */
1073 /*--------------------------------------------------------------------------*/
1075 construct_finish_page (glTemplateDesigner *dialog,
1078 gl_debug (DEBUG_TEMPLATE, "START");
1080 gl_util_get_builder_widgets (dialog->priv->builder,
1081 "finish_page", &dialog->priv->finish_page,
1085 gtk_assistant_append_page (GTK_ASSISTANT (dialog),
1086 dialog->priv->finish_page);
1088 gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
1089 dialog->priv->finish_page,
1090 _("Design Completed"));
1091 gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
1092 dialog->priv->finish_page,
1094 gtk_assistant_set_page_type (GTK_ASSISTANT (dialog),
1095 dialog->priv->finish_page,
1096 GTK_ASSISTANT_PAGE_CONFIRM);
1097 gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
1098 dialog->priv->finish_page,
1101 gl_debug (DEBUG_TEMPLATE, "END");
1105 /*--------------------------------------------------------------------------*/
1106 /* PRIVATE. cancel callback. */
1107 /*--------------------------------------------------------------------------*/
1109 cancel_cb (glTemplateDesigner *dialog)
1112 gtk_widget_destroy (GTK_WIDGET(dialog));
1117 /*--------------------------------------------------------------------------*/
1118 /* PRIVATE. apply callback */
1119 /*--------------------------------------------------------------------------*/
1121 apply_cb (glTemplateDesigner *dialog)
1123 lglTemplate *template;
1126 template = build_template (dialog);
1127 lgl_db_register_template (template);
1128 name = lgl_template_get_name (template);
1129 gl_mini_preview_pixbuf_cache_add_by_name (name);
1134 /*--------------------------------------------------------------------------*/
1135 /* PRIVATE. close callback */
1136 /*--------------------------------------------------------------------------*/
1138 close_cb (glTemplateDesigner *dialog)
1141 gtk_widget_destroy (GTK_WIDGET(dialog));
1146 /*--------------------------------------------------------------------------*/
1147 /* PRIVATE. prepare page callback */
1148 /*--------------------------------------------------------------------------*/
1150 prepare_cb (glTemplateDesigner *dialog,
1155 page_num = gtk_assistant_get_current_page (GTK_ASSISTANT (dialog));
1161 name_page_changed_cb (dialog); /* Use to prepare */
1164 case PG_SIZE_PAGE_NUM:
1165 pg_size_page_changed_cb (dialog); /* Use to prepare */
1168 case RECT_SIZE_PAGE_NUM:
1169 rect_size_page_prepare_cb (dialog);
1172 case ROUND_SIZE_PAGE_NUM:
1173 round_size_page_prepare_cb (dialog);
1176 case CD_SIZE_PAGE_NUM:
1177 cd_size_page_prepare_cb (dialog);
1180 case LAYOUT_PAGE_NUM:
1181 layout_page_prepare_cb (dialog);
1185 /* No preparation needed */
1192 /*--------------------------------------------------------------------------*/
1193 /* PRIVATE. Handle non-linear forward traversal. */
1194 /*--------------------------------------------------------------------------*/
1196 forward_page_function (gint current_page,
1199 glTemplateDesigner *dialog = GL_TEMPLATE_DESIGNER (data);
1201 switch (current_page)
1203 case START_PAGE_NUM:
1204 return NAME_PAGE_NUM;
1207 return PG_SIZE_PAGE_NUM;
1209 case PG_SIZE_PAGE_NUM:
1210 return SHAPE_PAGE_NUM;
1212 case SHAPE_PAGE_NUM:
1213 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_rect_radio))) {
1214 return RECT_SIZE_PAGE_NUM;
1216 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_round_radio))) {
1217 return ROUND_SIZE_PAGE_NUM;
1219 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_cd_radio))) {
1220 return CD_SIZE_PAGE_NUM;
1224 case RECT_SIZE_PAGE_NUM:
1225 case ROUND_SIZE_PAGE_NUM:
1226 case CD_SIZE_PAGE_NUM:
1227 return NLAYOUTS_PAGE_NUM;
1229 case NLAYOUTS_PAGE_NUM:
1230 return LAYOUT_PAGE_NUM;
1232 case LAYOUT_PAGE_NUM:
1233 return FINISH_PAGE_NUM;
1235 case FINISH_PAGE_NUM:
1244 /*--------------------------------------------------------------------------*/
1245 /* PRIVATE. Widget on name page "changed" callback. */
1246 /*--------------------------------------------------------------------------*/
1248 name_page_changed_cb (glTemplateDesigner *dialog)
1250 gchar *brand, *part_num, *desc;
1252 brand = g_strstrip (gtk_editable_get_chars (GTK_EDITABLE(dialog->priv->brand_entry), 0, -1));
1253 part_num = g_strstrip (gtk_editable_get_chars (GTK_EDITABLE(dialog->priv->part_num_entry), 0, -1));
1254 desc = gtk_editable_get_chars (GTK_EDITABLE(dialog->priv->description_entry), 0, -1);
1257 if (brand && brand[0] && part_num && part_num[0] &&
1258 lgl_db_does_template_exist (brand, part_num))
1260 gtk_image_set_from_stock (GTK_IMAGE (dialog->priv->name_warning_image),
1261 GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_BUTTON);
1262 gtk_label_set_markup (GTK_LABEL (dialog->priv->name_warning_label),
1263 _("<span foreground='red' weight='bold'>Brand and part# match an existing template!</span>"));
1267 gtk_image_clear (GTK_IMAGE (dialog->priv->name_warning_image));
1268 gtk_label_set_text (GTK_LABEL (dialog->priv->name_warning_label), "");
1271 if (brand && brand[0] && part_num && part_num[0] && desc && desc[0] &&
1272 !lgl_db_does_template_exist (brand, part_num))
1275 gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
1276 dialog->priv->name_page,
1282 gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
1283 dialog->priv->name_page,
1293 /*--------------------------------------------------------------------------*/
1294 /* PRIVATE. Widget on page size page "changed" callback. */
1295 /*--------------------------------------------------------------------------*/
1297 pg_size_page_changed_cb (glTemplateDesigner *dialog)
1299 gchar *page_size_name;
1304 gtk_combo_box_get_active_text (GTK_COMBO_BOX (dialog->priv->pg_size_combo));
1306 if (page_size_name && strlen(page_size_name)) {
1308 paper = lgl_db_lookup_paper_from_name (page_size_name);
1311 if ( g_strcasecmp (paper->id, "Other") == 0 ) {
1312 gtk_widget_set_sensitive (GTK_WIDGET(dialog->priv->pg_w_spin), TRUE);
1313 gtk_widget_set_sensitive (GTK_WIDGET(dialog->priv->pg_h_spin), TRUE);
1314 gtk_widget_set_sensitive (GTK_WIDGET(dialog->priv->pg_w_units_label),
1316 gtk_widget_set_sensitive (GTK_WIDGET(dialog->priv->pg_h_units_label),
1320 gtk_widget_set_sensitive (GTK_WIDGET(dialog->priv->pg_w_spin), FALSE);
1321 gtk_widget_set_sensitive (GTK_WIDGET(dialog->priv->pg_h_spin), FALSE);
1322 gtk_widget_set_sensitive (GTK_WIDGET(dialog->priv->pg_w_units_label),
1324 gtk_widget_set_sensitive (GTK_WIDGET(dialog->priv->pg_h_units_label),
1327 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin),
1328 paper->width * dialog->priv->units_per_point);
1329 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->pg_h_spin),
1330 paper->height * dialog->priv->units_per_point);
1333 lgl_paper_free (paper);
1336 g_free (page_size_name);
1341 /*--------------------------------------------------------------------------*/
1342 /* PRIVATE. Prepare rectangular size page. */
1343 /*--------------------------------------------------------------------------*/
1345 rect_size_page_prepare_cb (glTemplateDesigner *dialog)
1347 gdouble max_w, max_h;
1348 gdouble w, h, r, x_waste, y_waste, margin;
1350 /* Limit label size based on already chosen page size. */
1351 max_w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin));
1352 max_h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_h_spin));
1354 w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_w_spin));
1355 h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_h_spin));
1356 r = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_r_spin));
1357 x_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_x_waste_spin));
1358 y_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_y_waste_spin));
1359 margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_margin_spin));
1361 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->rect_w_spin),
1362 dialog->priv->climb_rate, max_w);
1363 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->rect_h_spin),
1364 dialog->priv->climb_rate, max_h);
1365 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->rect_r_spin),
1366 0.0, MIN(max_w, max_h)/2.0);
1367 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->rect_x_waste_spin),
1368 0.0, MIN(max_w, max_h)/4.0);
1369 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->rect_y_waste_spin),
1370 0.0, MIN(max_w, max_h)/4.0);
1371 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->rect_margin_spin),
1372 0.0, MIN(max_w, max_h)/4.0);
1374 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_w_spin), w);
1375 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_h_spin), h);
1376 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_r_spin), r);
1377 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_x_waste_spin), x_waste);
1378 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_y_waste_spin), y_waste);
1379 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_margin_spin), margin);
1384 /*--------------------------------------------------------------------------*/
1385 /* PRIVATE. Prepare round size page. */
1386 /*--------------------------------------------------------------------------*/
1388 round_size_page_prepare_cb (glTemplateDesigner *dialog)
1390 gdouble max_w, max_h;
1391 gdouble r, waste, margin;
1393 /* Limit label size based on already chosen page size. */
1394 max_w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin));
1395 max_h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_h_spin));
1397 r = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->round_r_spin));
1398 waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->round_waste_spin));
1399 margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->round_margin_spin));
1401 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->round_r_spin),
1402 dialog->priv->climb_rate, MIN(max_w, max_h)/2.0);
1403 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->round_waste_spin),
1404 0.0, MIN(max_w, max_h)/4.0);
1405 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->round_margin_spin),
1406 0.0, MIN(max_w, max_h)/4.0);
1408 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->round_r_spin), r);
1409 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->round_waste_spin), waste);
1410 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->round_margin_spin), margin);
1415 /*--------------------------------------------------------------------------*/
1416 /* PRIVATE. Prepare cd/dvd size page. */
1417 /*--------------------------------------------------------------------------*/
1419 cd_size_page_prepare_cb (glTemplateDesigner *dialog)
1421 gdouble max_w, max_h;
1422 gdouble radius, hole, w, h, waste, margin;
1424 /* Limit label size based on already chosen page size. */
1425 max_w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin));
1426 max_h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_h_spin));
1428 radius = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_radius_spin));
1429 hole = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_hole_spin));
1430 w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_w_spin));
1431 h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_h_spin));
1432 waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_waste_spin));
1433 margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_margin_spin));
1435 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->cd_radius_spin),
1436 dialog->priv->climb_rate, MIN(max_w, max_h)/2.0);
1437 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->cd_hole_spin),
1438 dialog->priv->climb_rate, MIN(max_w, max_h)/2.0);
1439 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->cd_w_spin),
1441 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->cd_h_spin),
1443 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->cd_waste_spin),
1444 0.0, MIN(max_w, max_h)/4.0);
1445 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->cd_margin_spin),
1446 0.0, MIN(max_w, max_h)/4.0);
1448 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_radius_spin), radius);
1449 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_hole_spin), hole);
1450 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_w_spin), w);
1451 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_h_spin), h);
1452 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_waste_spin), waste);
1453 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_margin_spin), margin);
1458 /*--------------------------------------------------------------------------*/
1459 /* PRIVATE. Prepare Layout page cb. */
1460 /*--------------------------------------------------------------------------*/
1462 layout_page_prepare_cb (glTemplateDesigner *dialog)
1464 gdouble page_w, page_h;
1465 gdouble w=0, h=0, x_waste=0, y_waste=0;
1466 gint max_nx, max_ny;
1468 gdouble nx_1, ny_1, x0_1, y0_1, dx_1, dy_1;
1469 gdouble nx_2, ny_2, x0_2, y0_2, dx_2, dy_2;
1470 lglTemplate *template;
1472 if (dialog->priv->stop_signals) return;
1473 dialog->priv->stop_signals = TRUE;
1476 /* Limit ranges based on already chosen page and label sizes. */
1477 page_w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin));
1478 page_h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_h_spin));
1479 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_rect_radio))) {
1480 w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_w_spin));
1481 h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_h_spin));
1482 x_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_x_waste_spin));
1483 y_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_y_waste_spin));
1485 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_round_radio))) {
1486 w = 2*gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->round_r_spin));
1488 x_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->round_waste_spin));
1491 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_cd_radio))) {
1492 w = 2*gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_radius_spin));
1494 x_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_waste_spin));
1497 max_nx = MAX (floor (page_w/(w + 2*x_waste) + DELTA), 1.0);
1498 max_ny = MAX (floor (page_h/(h + 2*y_waste) + DELTA), 1.0);
1500 nx_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_nx_spin));
1501 ny_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_ny_spin));
1502 x0_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_x0_spin));
1503 y0_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_y0_spin));
1504 dx_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_dx_spin));
1505 dy_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_dy_spin));
1506 nx_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_nx_spin));
1507 ny_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_ny_spin));
1508 x0_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_x0_spin));
1509 y0_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_y0_spin));
1510 dx_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_dx_spin));
1511 dy_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_dy_spin));
1513 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout1_nx_spin),
1515 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout1_ny_spin),
1517 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout1_x0_spin),
1518 x_waste, page_w - w - x_waste);
1519 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout1_y0_spin),
1520 y_waste, page_h - h - y_waste);
1521 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout1_dx_spin),
1522 w + 2*x_waste, page_w - w - 2*x_waste);
1523 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout1_dy_spin),
1524 h + 2*y_waste, page_h - h - 2*y_waste);
1525 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout2_nx_spin),
1527 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout2_ny_spin),
1529 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout2_x0_spin),
1530 x_waste, page_w - w - x_waste);
1531 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout2_y0_spin),
1532 y_waste, page_h - h - y_waste);
1533 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout2_dx_spin),
1534 w + 2*x_waste, page_w - w - 2*x_waste);
1535 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout2_dy_spin),
1536 h + 2*y_waste, page_h - h - 2*y_waste);
1538 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout1_nx_spin), nx_1);
1539 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout1_ny_spin), ny_1);
1540 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout1_x0_spin), x0_1);
1541 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout1_y0_spin), y0_1);
1542 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout1_dx_spin), dx_1);
1543 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout1_dy_spin), dy_1);
1544 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout2_nx_spin), nx_2);
1545 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout2_ny_spin), ny_2);
1546 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout2_x0_spin), x0_2);
1547 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout2_y0_spin), y0_2);
1548 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout2_dx_spin), dx_2);
1549 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout2_dy_spin), dy_2);
1551 /* Set visibility of layout2 widgets as appropriate. */
1552 nlayouts = gtk_spin_button_get_value (GTK_SPIN_BUTTON (dialog->priv->nlayouts_spin));
1553 if ( nlayouts == 1 )
1555 gtk_widget_hide (dialog->priv->layout1_head_label);
1556 gtk_widget_hide (dialog->priv->layout2_head_label);
1557 gtk_widget_hide (dialog->priv->layout2_nx_spin);
1558 gtk_widget_hide (dialog->priv->layout2_ny_spin);
1559 gtk_widget_hide (dialog->priv->layout2_x0_spin);
1560 gtk_widget_hide (dialog->priv->layout2_y0_spin);
1561 gtk_widget_hide (dialog->priv->layout2_dx_spin);
1562 gtk_widget_hide (dialog->priv->layout2_dy_spin);
1566 gtk_widget_show (dialog->priv->layout1_head_label);
1567 gtk_widget_show (dialog->priv->layout2_head_label);
1568 gtk_widget_show (dialog->priv->layout2_nx_spin);
1569 gtk_widget_show (dialog->priv->layout2_ny_spin);
1570 gtk_widget_show (dialog->priv->layout2_x0_spin);
1571 gtk_widget_show (dialog->priv->layout2_y0_spin);
1572 gtk_widget_show (dialog->priv->layout2_dx_spin);
1573 gtk_widget_show (dialog->priv->layout2_dy_spin);
1576 template = build_template (dialog);
1577 gl_wdgt_mini_preview_set_template (GL_WDGT_MINI_PREVIEW(dialog->priv->layout_mini_preview),
1579 lgl_template_free (template);
1582 dialog->priv->stop_signals = FALSE;
1586 /*--------------------------------------------------------------------------*/
1587 /* PRIVATE. Layout page widget changed cb. */
1588 /*--------------------------------------------------------------------------*/
1590 layout_page_changed_cb (glTemplateDesigner *dialog)
1592 lglTemplate *template;
1594 if (dialog->priv->stop_signals) return;
1595 dialog->priv->stop_signals = TRUE;
1597 template = build_template (dialog);
1599 gl_wdgt_mini_preview_set_template (GL_WDGT_MINI_PREVIEW(dialog->priv->layout_mini_preview),
1602 lgl_template_free (template);
1604 dialog->priv->stop_signals = FALSE;
1608 /*--------------------------------------------------------------------------*/
1609 /* PRIVATE. Print test sheet callback. */
1610 /*--------------------------------------------------------------------------*/
1612 print_test_cb (glTemplateDesigner *dialog)
1615 lglTemplate *template;
1616 glPrintOp *print_op;
1618 label = gl_label_new ();
1620 template = build_template (dialog);
1621 gl_label_set_template (GL_LABEL(label), template);
1623 print_op = gl_print_op_new (GL_LABEL(label));
1624 gl_print_op_force_outline_flag (print_op);
1625 gtk_print_operation_run (GTK_PRINT_OPERATION (print_op),
1626 GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
1627 GTK_WINDOW (dialog),
1630 lgl_template_free (template);
1631 g_object_unref (G_OBJECT(label));
1635 /*--------------------------------------------------------------------------*/
1636 /* Build a template based on current assistant settings. */
1637 /*--------------------------------------------------------------------------*/
1638 static lglTemplate *
1639 build_template (glTemplateDesigner *dialog)
1642 gchar *brand, *part_num, *desc;
1643 gchar *page_size_name;
1645 lglTemplateFrameShape shape;
1646 lglTemplateFrame *frame=NULL;
1647 gdouble w=0, h=0, r=0, radius=0, hole=0, waste=0, x_waste=0, y_waste=0, margin=0;
1649 gdouble nx_1, ny_1, x0_1, y0_1, dx_1, dy_1;
1650 gdouble nx_2, ny_2, x0_2, y0_2, dx_2, dy_2;
1651 lglTemplate *template;
1653 upp = dialog->priv->units_per_point;
1655 brand = g_strstrip (gtk_editable_get_chars (GTK_EDITABLE(dialog->priv->brand_entry), 0, -1));
1656 part_num = g_strstrip (gtk_editable_get_chars (GTK_EDITABLE(dialog->priv->part_num_entry), 0, -1));
1657 desc = gtk_editable_get_chars (GTK_EDITABLE(dialog->priv->description_entry), 0, -1);
1660 gtk_combo_box_get_active_text (GTK_COMBO_BOX (dialog->priv->pg_size_combo));
1661 paper = lgl_db_lookup_paper_from_name (page_size_name);
1662 if ( g_strcasecmp (paper->id, "Other") == 0 ) {
1664 gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin))
1667 gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_h_spin))
1671 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_rect_radio))) {
1672 shape = LGL_TEMPLATE_FRAME_SHAPE_RECT;
1673 w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_w_spin));
1674 h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_h_spin));
1675 r = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_r_spin));
1676 x_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_x_waste_spin));
1677 y_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_y_waste_spin));
1678 margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_margin_spin));
1681 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_round_radio))) {
1682 shape = LGL_TEMPLATE_FRAME_SHAPE_ROUND;
1683 r = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->round_r_spin));
1684 waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->round_waste_spin));
1685 margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->round_margin_spin));
1688 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_cd_radio))) {
1689 shape = LGL_TEMPLATE_FRAME_SHAPE_CD;
1690 radius = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_radius_spin));
1691 hole = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_hole_spin));
1692 w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_w_spin));
1693 h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_h_spin));
1694 waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_waste_spin));
1695 margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_margin_spin));
1698 nlayouts = gtk_spin_button_get_value (GTK_SPIN_BUTTON (dialog->priv->nlayouts_spin));
1699 nx_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_nx_spin));
1700 ny_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_ny_spin));
1701 x0_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_x0_spin));
1702 y0_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_y0_spin));
1703 dx_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_dx_spin));
1704 dy_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_dy_spin));
1705 nx_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_nx_spin));
1706 ny_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_ny_spin));
1707 x0_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_x0_spin));
1708 y0_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_y0_spin));
1709 dx_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_dx_spin));
1710 dy_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_dy_spin));
1713 template = lgl_template_new (brand, part_num, desc, paper->id, paper->width, paper->height);
1716 case LGL_TEMPLATE_FRAME_SHAPE_RECT:
1717 frame = lgl_template_frame_rect_new ("0",
1718 w/upp, h/upp, r/upp,
1719 x_waste/upp, y_waste/upp);
1721 case LGL_TEMPLATE_FRAME_SHAPE_ROUND:
1722 frame = lgl_template_frame_round_new ("0", r/upp, waste/upp);
1724 case LGL_TEMPLATE_FRAME_SHAPE_CD:
1725 frame = lgl_template_frame_cd_new ("0",
1726 radius/upp, hole/upp,
1731 lgl_template_add_frame (template, frame);
1733 lgl_template_frame_add_markup (frame,
1734 lgl_template_markup_margin_new (margin/upp));
1736 lgl_template_frame_add_layout (frame,
1737 lgl_template_layout_new (nx_1, ny_1,
1743 lgl_template_frame_add_layout (frame,
1744 lgl_template_layout_new (nx_2, ny_2,
1755 g_free (page_size_name);
1756 lgl_paper_free (paper);
1764 * Local Variables: -- emacs
1766 * c-basic-offset: 8 -- emacs
1767 * tab-width: 8 -- emacs
1768 * indent-tabs-mode: nil -- emacs