2 * (GLABELS) Label and Business Card Creation program for GNOME
4 * template-designer.c: Template designer module
6 * Copyright (C) 2003 Jim Evins <evins@snaught.com>.
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 #include "template-designer.h"
26 #include <glib/gi18n.h>
28 #include <glade/glade-xml.h>
29 #include <libgnome/gnome-program.h>
30 #include <libgnomeui/gnome-druid.h>
31 #include <libgnomeui/gnome-druid-page-edge.h>
32 #include <libgnomeui/gnome-druid-page-standard.h>
33 #include <gtk/gtktogglebutton.h>
34 #include <gtk/gtkcombobox.h>
35 #include <gtk/gtkspinbutton.h>
38 #include <libglabels/paper.h>
39 #include <libglabels/template.h>
40 #include "wdgt-mini-preview.h"
41 #include "print-dialog.h"
45 /*========================================================*/
46 /* Private macros and constants. */
47 /*========================================================*/
48 #define ICON_PIXMAP gnome_program_locate_file (NULL,\
49 GNOME_FILE_DOMAIN_APP_PIXMAP,\
53 #define EX_RECT_IMAGE gnome_program_locate_file (NULL,\
54 GNOME_FILE_DOMAIN_APP_PIXMAP,\
55 "glabels/ex-rect-size.png",\
58 #define EX_ROUND_IMAGE gnome_program_locate_file (NULL,\
59 GNOME_FILE_DOMAIN_APP_PIXMAP,\
60 "glabels/ex-round-size.png",\
63 #define EX_CD_IMAGE gnome_program_locate_file (NULL,\
64 GNOME_FILE_DOMAIN_APP_PIXMAP,\
65 "glabels/ex-cd-size.png",\
68 #define EX_NLAYOUTS_IMAGE1 gnome_program_locate_file (NULL,\
69 GNOME_FILE_DOMAIN_APP_PIXMAP,\
70 "glabels/ex-1layout.png",\
73 #define EX_NLAYOUTS_IMAGE2 gnome_program_locate_file (NULL,\
74 GNOME_FILE_DOMAIN_APP_PIXMAP,\
75 "glabels/ex-2layouts.png",\
78 #define DEFAULT_MARGIN 9.0
80 #define DEFAULT_RECT_W 252.0
81 #define DEFAULT_RECT_H 144.0
82 #define DEFAULT_RECT_R 0.0
83 #define DEFAULT_RECT_WASTE 0.0 /* Should never exceed 1/2 the distance between items. */
85 #define DEFAULT_ROUND_R 72.0
86 #define DEFAULT_ROUND_WASTE 0.0 /* Should never exceed 1/2 the distance between items. */
88 #define DEFAULT_CD_RADIUS 166.5
89 #define DEFAULT_CD_HOLE 58.5
90 #define DEFAULT_CD_WASTE 9.0 /* Should never exceed 1/2 the distance between items. */
93 #define MAX_PAGE_DIM_POINTS 5000.0
95 /*========================================================*/
97 /*========================================================*/
99 struct _glTemplateDesignerPrivate
105 GtkWidget *start_page;
106 GtkWidget *name_page;
107 GtkWidget *pg_size_page;
108 GtkWidget *shape_page;
109 GtkWidget *rect_size_page;
110 GtkWidget *round_size_page;
111 GtkWidget *cd_size_page;
112 GtkWidget *nlayouts_page;
113 GtkWidget *layout_page;
114 GtkWidget *finish_page;
116 /* Name page controls */
117 GtkWidget *brand_entry;
118 GtkWidget *part_num_entry;
119 GtkWidget *description_entry;
121 /* Page size page controls */
122 GtkWidget *pg_size_combo;
123 GtkWidget *pg_w_spin;
124 GtkWidget *pg_h_spin;
125 GtkWidget *pg_w_units_label;
126 GtkWidget *pg_h_units_label;
128 /* Shape page controls */
129 GtkWidget *shape_rect_radio;
130 GtkWidget *shape_round_radio;
131 GtkWidget *shape_cd_radio;
133 /* Label size (rectangular) page controls */
134 GtkWidget *rect_image;
135 GtkWidget *rect_w_spin;
136 GtkWidget *rect_h_spin;
137 GtkWidget *rect_r_spin;
138 GtkWidget *rect_x_waste_spin;
139 GtkWidget *rect_y_waste_spin;
140 GtkWidget *rect_margin_spin;
141 GtkWidget *rect_w_units_label;
142 GtkWidget *rect_h_units_label;
143 GtkWidget *rect_r_units_label;
144 GtkWidget *rect_x_waste_units_label;
145 GtkWidget *rect_y_waste_units_label;
146 GtkWidget *rect_margin_units_label;
148 /* Label size (round) page controls */
149 GtkWidget *round_image;
150 GtkWidget *round_r_spin;
151 GtkWidget *round_waste_spin;
152 GtkWidget *round_margin_spin;
153 GtkWidget *round_r_units_label;
154 GtkWidget *round_waste_units_label;
155 GtkWidget *round_margin_units_label;
157 /* Label size (cd) page controls */
159 GtkWidget *cd_radius_spin;
160 GtkWidget *cd_hole_spin;
161 GtkWidget *cd_w_spin;
162 GtkWidget *cd_h_spin;
163 GtkWidget *cd_waste_spin;
164 GtkWidget *cd_margin_spin;
165 GtkWidget *cd_radius_units_label;
166 GtkWidget *cd_hole_units_label;
167 GtkWidget *cd_w_units_label;
168 GtkWidget *cd_h_units_label;
169 GtkWidget *cd_waste_units_label;
170 GtkWidget *cd_margin_units_label;
172 /* Number of layouts controls */
173 GtkWidget *nlayouts_image1;
174 GtkWidget *nlayouts_image2;
175 GtkWidget *nlayouts_spin;
177 /* Layout page controls */
178 GtkWidget *layout1_head_label;
179 GtkWidget *layout1_nx_spin;
180 GtkWidget *layout1_ny_spin;
181 GtkWidget *layout1_x0_spin;
182 GtkWidget *layout1_y0_spin;
183 GtkWidget *layout1_dx_spin;
184 GtkWidget *layout1_dy_spin;
185 GtkWidget *layout2_head_label;
186 GtkWidget *layout2_nx_spin;
187 GtkWidget *layout2_ny_spin;
188 GtkWidget *layout2_x0_spin;
189 GtkWidget *layout2_y0_spin;
190 GtkWidget *layout2_dx_spin;
191 GtkWidget *layout2_dy_spin;
192 GtkWidget *layout_x0_units_label;
193 GtkWidget *layout_y0_units_label;
194 GtkWidget *layout_dx_units_label;
195 GtkWidget *layout_dy_units_label;
196 GtkWidget *layout_mini_preview;
197 GtkWidget *layout_test_button;
199 /* Units related stuff */
200 const gchar *units_string;
201 gdouble units_per_point;
207 /*========================================================*/
208 /* Private globals. */
209 /*========================================================*/
211 static GtkWindowClass* parent_class = NULL;
213 /*========================================================*/
214 /* Private function prototypes. */
215 /*========================================================*/
217 static void gl_template_designer_class_init (glTemplateDesignerClass *klass);
218 static void gl_template_designer_init (glTemplateDesigner *dlg);
219 static void gl_template_designer_finalize (GObject *object);
220 static void gl_template_designer_construct (glTemplateDesigner *dlg);
222 static void construct_start_page (glTemplateDesigner *dlg,
225 static void construct_name_page (glTemplateDesigner *dlg,
228 static void construct_pg_size_page (glTemplateDesigner *dlg,
231 static void construct_shape_page (glTemplateDesigner *dlg,
234 static void construct_rect_size_page (glTemplateDesigner *dlg,
237 static void construct_round_size_page (glTemplateDesigner *dlg,
240 static void construct_cd_size_page (glTemplateDesigner *dlg,
243 static void construct_nlayouts_page (glTemplateDesigner *dlg,
246 static void construct_layout_page (glTemplateDesigner *dlg,
249 static void construct_finish_page (glTemplateDesigner *dlg,
252 static void construct_edge_page_boilerplate (glTemplateDesigner *dlg,
253 GnomeDruidPageEdge *page,
256 static void construct_page_boilerplate (glTemplateDesigner *dlg,
257 GnomeDruidPageStandard *page,
260 static void cancel_cb (glTemplateDesigner *dlg);
262 static void name_page_changed_cb (glTemplateDesigner *dlg);
264 static void pg_size_page_changed_cb (glTemplateDesigner *dlg);
266 static void rect_size_page_prepare_cb (glTemplateDesigner *dlg);
268 static void round_size_page_prepare_cb (glTemplateDesigner *dlg);
270 static void cd_size_page_prepare_cb (glTemplateDesigner *dlg);
272 static void layout_page_prepare_cb (glTemplateDesigner *dlg);
274 static void layout_page_changed_cb (glTemplateDesigner *dlg);
276 static void print_test_cb (glTemplateDesigner *dlg);
278 static glTemplate *build_template (glTemplateDesigner *dlg);
280 static gboolean next_cb (GnomeDruidPage *druidpage,
282 glTemplateDesigner *dlg);
284 static gboolean back_cb (GnomeDruidPage *druidpage,
286 glTemplateDesigner *dlg);
288 static void finish_cb (glTemplateDesigner *dlg);
291 /*****************************************************************************/
292 /* Boilerplate object stuff. */
293 /*****************************************************************************/
295 gl_template_designer_get_type (void)
297 static GType type = 0;
301 static const GTypeInfo info =
303 sizeof (glTemplateDesignerClass),
304 NULL, /* base_init */
305 NULL, /* base_finalize */
306 (GClassInitFunc) gl_template_designer_class_init,
307 NULL, /* class_finalize */
308 NULL, /* class_data */
309 sizeof (glTemplateDesigner),
311 (GInstanceInitFunc) gl_template_designer_init,
315 type = g_type_register_static (GTK_TYPE_WINDOW,
316 "glTemplateDesigner", &info, 0);
323 gl_template_designer_class_init (glTemplateDesignerClass *klass)
325 GObjectClass *object_class = G_OBJECT_CLASS (klass);
327 gl_debug (DEBUG_TEMPLATE, "");
329 parent_class = g_type_class_peek_parent (klass);
331 object_class->finalize = gl_template_designer_finalize;
335 gl_template_designer_init (glTemplateDesigner *dlg)
337 gl_debug (DEBUG_TEMPLATE, "START");
339 dlg->priv = g_new0 (glTemplateDesignerPrivate, 1);
341 dlg->priv->gui = glade_xml_new (GLABELS_GLADE_DIR "template-designer.glade",
345 if (!dlg->priv->gui) {
346 g_warning ("Could not open template-designer.glade, reinstall glabels!");
350 gl_debug (DEBUG_TEMPLATE, "END");
354 gl_template_designer_finalize (GObject *object)
356 glTemplateDesigner* dlg;
358 gl_debug (DEBUG_TEMPLATE, "START");
360 g_return_if_fail (object != NULL);
362 dlg = GL_TEMPLATE_DESIGNER (object);
364 g_return_if_fail (GL_IS_TEMPLATE_DESIGNER (dlg));
365 g_return_if_fail (dlg->priv != NULL);
367 G_OBJECT_CLASS (parent_class)->finalize (object);
371 gl_debug (DEBUG_TEMPLATE, "END");
374 /*****************************************************************************/
375 /* NEW preferences dialog. */
376 /*****************************************************************************/
378 gl_template_designer_new (GtkWindow *parent)
382 gl_debug (DEBUG_TEMPLATE, "START");
384 dlg = GTK_WIDGET (g_object_new (GL_TYPE_TEMPLATE_DESIGNER, NULL));
387 gtk_window_set_transient_for (GTK_WINDOW (dlg), parent);
389 gl_template_designer_construct (GL_TEMPLATE_DESIGNER(dlg));
392 gl_debug (DEBUG_TEMPLATE, "END");
397 /*---------------------------------------------------------------------------*/
398 /* PRIVATE. Construct composite widget. */
399 /*---------------------------------------------------------------------------*/
401 gl_template_designer_construct (glTemplateDesigner *dlg)
405 g_return_if_fail (dlg && GL_IS_TEMPLATE_DESIGNER (dlg));
406 g_return_if_fail (dlg->priv != NULL);
408 /* Initialize units stuff from prefs */
409 dlg->priv->units_string = gl_prefs_get_units_string ();
410 dlg->priv->units_per_point = gl_prefs_get_units_per_point ();
411 dlg->priv->climb_rate = gl_prefs_get_units_step_size ();
412 dlg->priv->digits = gl_prefs_get_units_precision ();
414 gtk_window_set_title (GTK_WINDOW(dlg), _("gLabels Template Designer"));
416 logo = gdk_pixbuf_new_from_file (ICON_PIXMAP, NULL);
418 dlg->priv->druid = glade_xml_get_widget (dlg->priv->gui, "druid");
419 gtk_container_add (GTK_CONTAINER(dlg), dlg->priv->druid);
421 construct_start_page (dlg, logo);
422 construct_name_page (dlg, logo);
423 construct_pg_size_page (dlg, logo);
424 construct_shape_page (dlg, logo);
425 construct_rect_size_page (dlg, logo);
426 construct_round_size_page (dlg, logo);
427 construct_cd_size_page (dlg, logo);
428 construct_nlayouts_page (dlg, logo);
429 construct_layout_page (dlg, logo);
430 construct_finish_page (dlg, logo);
433 g_signal_connect_swapped (G_OBJECT(dlg->priv->druid), "cancel",
434 G_CALLBACK(cancel_cb), dlg);
436 gtk_widget_show_all (GTK_WIDGET(dlg));
439 /*--------------------------------------------------------------------------*/
440 /* PRIVATE. Construct start page. */
441 /*--------------------------------------------------------------------------*/
443 construct_start_page (glTemplateDesigner *dlg,
446 dlg->priv->start_page =
447 glade_xml_get_widget (dlg->priv->gui, "start_page");
449 construct_edge_page_boilerplate (dlg,
450 GNOME_DRUID_PAGE_EDGE(dlg->priv->start_page),
454 /*--------------------------------------------------------------------------*/
455 /* PRIVATE. Construct name page. */
456 /*--------------------------------------------------------------------------*/
458 construct_name_page (glTemplateDesigner *dlg,
461 dlg->priv->name_page =
462 glade_xml_get_widget (dlg->priv->gui, "name_page");
464 /* Name Page Widgets */
465 dlg->priv->brand_entry =
466 glade_xml_get_widget (dlg->priv->gui, "brand_entry");
467 dlg->priv->part_num_entry =
468 glade_xml_get_widget (dlg->priv->gui, "part_num_entry");
469 dlg->priv->description_entry =
470 glade_xml_get_widget (dlg->priv->gui, "description_entry");
472 /* Connect a handler that listens for changes in these widgets */
473 /* This controls whether we can progress to the next page. */
474 g_signal_connect_swapped (G_OBJECT(dlg->priv->brand_entry), "changed",
475 G_CALLBACK(name_page_changed_cb), dlg);
476 g_signal_connect_swapped (G_OBJECT(dlg->priv->part_num_entry), "changed",
477 G_CALLBACK(name_page_changed_cb), dlg);
478 g_signal_connect_swapped (G_OBJECT(dlg->priv->description_entry), "changed",
479 G_CALLBACK(name_page_changed_cb), dlg);
481 /* Use this same handler to prepare the page. */
482 g_signal_connect_data (G_OBJECT(dlg->priv->name_page), "prepare",
483 G_CALLBACK(name_page_changed_cb), dlg,
484 NULL, (G_CONNECT_AFTER|G_CONNECT_SWAPPED));
486 construct_page_boilerplate (dlg,
487 GNOME_DRUID_PAGE_STANDARD(dlg->priv->name_page),
491 /*--------------------------------------------------------------------------*/
492 /* PRIVATE. Construct page size page. */
493 /*--------------------------------------------------------------------------*/
495 construct_pg_size_page (glTemplateDesigner *dlg,
499 const gchar *default_page_size_id;
500 gchar *default_page_size_name;
502 dlg->priv->pg_size_page =
503 glade_xml_get_widget (dlg->priv->gui, "pg_size_page");
505 /* Page Size Page Widgets */
506 dlg->priv->pg_size_combo =
507 glade_xml_get_widget (dlg->priv->gui, "pg_size_combo");
508 dlg->priv->pg_w_spin =
509 glade_xml_get_widget (dlg->priv->gui, "pg_w_spin");
510 dlg->priv->pg_h_spin =
511 glade_xml_get_widget (dlg->priv->gui, "pg_h_spin");
512 dlg->priv->pg_w_units_label =
513 glade_xml_get_widget (dlg->priv->gui, "pg_w_units_label");
514 dlg->priv->pg_h_units_label =
515 glade_xml_get_widget (dlg->priv->gui, "pg_h_units_label");
517 gl_util_combo_box_add_text_model (GTK_COMBO_BOX (dlg->priv->pg_size_combo));
519 /* Load page size combo */
520 page_sizes = gl_paper_get_name_list ();
521 gl_util_combo_box_set_strings (GTK_COMBO_BOX (dlg->priv->pg_size_combo), page_sizes);
522 gl_paper_free_name_list (page_sizes);
523 default_page_size_id = gl_prefs_get_page_size ();
524 default_page_size_name = gl_paper_lookup_name_from_id (default_page_size_id);
525 gl_util_combo_box_set_active_text (GTK_COMBO_BOX (dlg->priv->pg_size_combo), default_page_size_name);
526 g_free (default_page_size_name);
528 /* Apply units to spinbuttons and units labels. */
529 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->pg_w_spin),
531 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->pg_w_spin),
532 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
533 gtk_label_set_text (GTK_LABEL(dlg->priv->pg_w_units_label),
534 dlg->priv->units_string);
535 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->pg_w_spin),
536 0.0, MAX_PAGE_DIM_POINTS*dlg->priv->units_per_point);
537 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->pg_h_spin),
539 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->pg_h_spin),
540 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
541 gtk_label_set_text (GTK_LABEL(dlg->priv->pg_h_units_label),
542 dlg->priv->units_string);
543 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->pg_h_spin),
544 0.0, MAX_PAGE_DIM_POINTS*dlg->priv->units_per_point);
546 /* Connect a handler that listens for changes in these widgets */
547 /* This controls sensitivity of related widgets. */
548 g_signal_connect_swapped (G_OBJECT(dlg->priv->pg_size_combo), "changed",
549 G_CALLBACK(pg_size_page_changed_cb), dlg);
551 /* Use this same handler to prepare the page. */
552 g_signal_connect_data (G_OBJECT(dlg->priv->pg_size_page), "prepare",
553 G_CALLBACK(pg_size_page_changed_cb), dlg,
554 NULL, (G_CONNECT_AFTER|G_CONNECT_SWAPPED));
556 construct_page_boilerplate (dlg,
557 GNOME_DRUID_PAGE_STANDARD(dlg->priv->pg_size_page),
561 /*--------------------------------------------------------------------------*/
562 /* PRIVATE. Construct shape page. */
563 /*--------------------------------------------------------------------------*/
565 construct_shape_page (glTemplateDesigner *dlg,
568 dlg->priv->shape_page =
569 glade_xml_get_widget (dlg->priv->gui, "shape_page");
571 /* Shape Page Widgets */
572 dlg->priv->shape_rect_radio =
573 glade_xml_get_widget (dlg->priv->gui, "shape_rect_radio");
574 dlg->priv->shape_round_radio =
575 glade_xml_get_widget (dlg->priv->gui, "shape_round_radio");
576 dlg->priv->shape_cd_radio =
577 glade_xml_get_widget (dlg->priv->gui, "shape_cd_radio");
579 construct_page_boilerplate (dlg,
580 GNOME_DRUID_PAGE_STANDARD(dlg->priv->shape_page),
584 /*--------------------------------------------------------------------------*/
585 /* PRIVATE. Construct rect size page. */
586 /*--------------------------------------------------------------------------*/
588 construct_rect_size_page (glTemplateDesigner *dlg,
593 dlg->priv->rect_size_page =
594 glade_xml_get_widget (dlg->priv->gui, "rect_size_page");
596 /* Rect Size Page Widgets */
597 dlg->priv->rect_image =
598 glade_xml_get_widget (dlg->priv->gui, "rect_image");
599 dlg->priv->rect_w_spin =
600 glade_xml_get_widget (dlg->priv->gui, "rect_w_spin");
601 dlg->priv->rect_h_spin =
602 glade_xml_get_widget (dlg->priv->gui, "rect_h_spin");
603 dlg->priv->rect_r_spin =
604 glade_xml_get_widget (dlg->priv->gui, "rect_r_spin");
605 dlg->priv->rect_x_waste_spin =
606 glade_xml_get_widget (dlg->priv->gui, "rect_x_waste_spin");
607 dlg->priv->rect_y_waste_spin =
608 glade_xml_get_widget (dlg->priv->gui, "rect_y_waste_spin");
609 dlg->priv->rect_margin_spin =
610 glade_xml_get_widget (dlg->priv->gui, "rect_margin_spin");
611 dlg->priv->rect_w_units_label =
612 glade_xml_get_widget (dlg->priv->gui, "rect_w_units_label");
613 dlg->priv->rect_h_units_label =
614 glade_xml_get_widget (dlg->priv->gui, "rect_h_units_label");
615 dlg->priv->rect_r_units_label =
616 glade_xml_get_widget (dlg->priv->gui, "rect_r_units_label");
617 dlg->priv->rect_x_waste_units_label =
618 glade_xml_get_widget (dlg->priv->gui, "rect_x_waste_units_label");
619 dlg->priv->rect_y_waste_units_label =
620 glade_xml_get_widget (dlg->priv->gui, "rect_y_waste_units_label");
621 dlg->priv->rect_margin_units_label =
622 glade_xml_get_widget (dlg->priv->gui, "rect_margin_units_label");
624 /* Initialize illustration. */
625 pixbuf = gdk_pixbuf_new_from_file (EX_RECT_IMAGE, NULL);
626 gtk_image_set_from_pixbuf (GTK_IMAGE(dlg->priv->rect_image), pixbuf);
628 /* Apply units to spinbuttons and units labels. */
629 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->rect_w_spin),
631 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->rect_w_spin),
632 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
633 gtk_label_set_text (GTK_LABEL(dlg->priv->rect_w_units_label),
634 dlg->priv->units_string);
635 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->rect_h_spin),
637 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->rect_h_spin),
638 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
639 gtk_label_set_text (GTK_LABEL(dlg->priv->rect_h_units_label),
640 dlg->priv->units_string);
641 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->rect_r_spin),
643 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->rect_r_spin),
644 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
645 gtk_label_set_text (GTK_LABEL(dlg->priv->rect_r_units_label),
646 dlg->priv->units_string);
647 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->rect_x_waste_spin),
649 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->rect_x_waste_spin),
650 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
651 gtk_label_set_text (GTK_LABEL(dlg->priv->rect_x_waste_units_label),
652 dlg->priv->units_string);
653 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->rect_y_waste_spin),
655 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->rect_y_waste_spin),
656 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
657 gtk_label_set_text (GTK_LABEL(dlg->priv->rect_y_waste_units_label),
658 dlg->priv->units_string);
659 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->rect_margin_spin),
661 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->rect_margin_spin),
662 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
663 gtk_label_set_text (GTK_LABEL(dlg->priv->rect_margin_units_label),
664 dlg->priv->units_string);
666 /* Load some realistic defaults. */
667 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->rect_w_spin),
668 DEFAULT_RECT_W * dlg->priv->units_per_point);
669 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->rect_h_spin),
670 DEFAULT_RECT_H * dlg->priv->units_per_point);
671 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->rect_r_spin),
672 DEFAULT_RECT_R * dlg->priv->units_per_point);
673 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->rect_x_waste_spin),
674 DEFAULT_RECT_WASTE * dlg->priv->units_per_point);
675 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->rect_y_waste_spin),
676 DEFAULT_RECT_WASTE * dlg->priv->units_per_point);
677 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->rect_margin_spin),
678 DEFAULT_MARGIN * dlg->priv->units_per_point);
680 /* Handler to prepare the page. */
681 g_signal_connect_data (G_OBJECT(dlg->priv->rect_size_page), "prepare",
682 G_CALLBACK(rect_size_page_prepare_cb), dlg,
683 NULL, (G_CONNECT_AFTER|G_CONNECT_SWAPPED));
685 construct_page_boilerplate (dlg,
686 GNOME_DRUID_PAGE_STANDARD(dlg->priv->rect_size_page),
690 /*--------------------------------------------------------------------------*/
691 /* PRIVATE. Construct round size page. */
692 /*--------------------------------------------------------------------------*/
694 construct_round_size_page (glTemplateDesigner *dlg,
699 dlg->priv->round_size_page =
700 glade_xml_get_widget (dlg->priv->gui, "round_size_page");
702 /* Round Size Page Widgets */
703 dlg->priv->round_image =
704 glade_xml_get_widget (dlg->priv->gui, "round_image");
705 dlg->priv->round_r_spin =
706 glade_xml_get_widget (dlg->priv->gui, "round_r_spin");
707 dlg->priv->round_waste_spin =
708 glade_xml_get_widget (dlg->priv->gui, "round_waste_spin");
709 dlg->priv->round_margin_spin =
710 glade_xml_get_widget (dlg->priv->gui, "round_margin_spin");
711 dlg->priv->round_r_units_label =
712 glade_xml_get_widget (dlg->priv->gui, "round_r_units_label");
713 dlg->priv->round_waste_units_label =
714 glade_xml_get_widget (dlg->priv->gui, "round_waste_units_label");
715 dlg->priv->round_margin_units_label =
716 glade_xml_get_widget (dlg->priv->gui, "round_margin_units_label");
718 /* Initialize illustration. */
719 pixbuf = gdk_pixbuf_new_from_file (EX_ROUND_IMAGE, NULL);
720 gtk_image_set_from_pixbuf (GTK_IMAGE(dlg->priv->round_image), pixbuf);
722 /* Apply units to spinbuttons and units labels. */
723 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->round_r_spin),
725 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->round_r_spin),
726 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
727 gtk_label_set_text (GTK_LABEL(dlg->priv->round_r_units_label),
728 dlg->priv->units_string);
729 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->round_waste_spin),
731 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->round_waste_spin),
732 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
733 gtk_label_set_text (GTK_LABEL(dlg->priv->round_waste_units_label),
734 dlg->priv->units_string);
735 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->round_margin_spin),
737 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->round_margin_spin),
738 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
739 gtk_label_set_text (GTK_LABEL(dlg->priv->round_margin_units_label),
740 dlg->priv->units_string);
742 /* Load some realistic defaults. */
743 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->round_r_spin),
744 DEFAULT_ROUND_R * dlg->priv->units_per_point);
745 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->round_waste_spin),
746 DEFAULT_ROUND_WASTE * dlg->priv->units_per_point);
747 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->round_margin_spin),
748 DEFAULT_MARGIN * dlg->priv->units_per_point);
750 /* Handler to prepare the page. */
751 g_signal_connect_data (G_OBJECT(dlg->priv->round_size_page), "prepare",
752 G_CALLBACK(round_size_page_prepare_cb), dlg,
753 NULL, (G_CONNECT_AFTER|G_CONNECT_SWAPPED));
755 construct_page_boilerplate (dlg,
756 GNOME_DRUID_PAGE_STANDARD(dlg->priv->round_size_page),
760 /*--------------------------------------------------------------------------*/
761 /* PRIVATE. Construct CD/DVD size page. */
762 /*--------------------------------------------------------------------------*/
764 construct_cd_size_page (glTemplateDesigner *dlg,
769 dlg->priv->cd_size_page =
770 glade_xml_get_widget (dlg->priv->gui, "cd_size_page");
772 /* Cd Size Page Widgets */
773 dlg->priv->cd_image =
774 glade_xml_get_widget (dlg->priv->gui, "cd_image");
775 dlg->priv->cd_radius_spin =
776 glade_xml_get_widget (dlg->priv->gui, "cd_radius_spin");
777 dlg->priv->cd_hole_spin =
778 glade_xml_get_widget (dlg->priv->gui, "cd_hole_spin");
779 dlg->priv->cd_w_spin =
780 glade_xml_get_widget (dlg->priv->gui, "cd_w_spin");
781 dlg->priv->cd_h_spin =
782 glade_xml_get_widget (dlg->priv->gui, "cd_h_spin");
783 dlg->priv->cd_waste_spin =
784 glade_xml_get_widget (dlg->priv->gui, "cd_waste_spin");
785 dlg->priv->cd_margin_spin =
786 glade_xml_get_widget (dlg->priv->gui, "cd_margin_spin");
787 dlg->priv->cd_radius_units_label =
788 glade_xml_get_widget (dlg->priv->gui, "cd_radius_units_label");
789 dlg->priv->cd_hole_units_label =
790 glade_xml_get_widget (dlg->priv->gui, "cd_hole_units_label");
791 dlg->priv->cd_w_units_label =
792 glade_xml_get_widget (dlg->priv->gui, "cd_w_units_label");
793 dlg->priv->cd_h_units_label =
794 glade_xml_get_widget (dlg->priv->gui, "cd_h_units_label");
795 dlg->priv->cd_waste_units_label =
796 glade_xml_get_widget (dlg->priv->gui, "cd_waste_units_label");
797 dlg->priv->cd_margin_units_label =
798 glade_xml_get_widget (dlg->priv->gui, "cd_margin_units_label");
800 /* Initialize illustration. */
801 pixbuf = gdk_pixbuf_new_from_file (EX_CD_IMAGE, NULL);
802 gtk_image_set_from_pixbuf (GTK_IMAGE(dlg->priv->cd_image), pixbuf);
804 /* Apply units to spinbuttons and units labels. */
805 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->cd_radius_spin),
807 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->cd_radius_spin),
808 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
809 gtk_label_set_text (GTK_LABEL(dlg->priv->cd_radius_units_label),
810 dlg->priv->units_string);
811 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->cd_hole_spin),
813 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->cd_hole_spin),
814 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
815 gtk_label_set_text (GTK_LABEL(dlg->priv->cd_hole_units_label),
816 dlg->priv->units_string);
817 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->cd_w_spin),
819 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->cd_w_spin),
820 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
821 gtk_label_set_text (GTK_LABEL(dlg->priv->cd_w_units_label),
822 dlg->priv->units_string);
823 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->cd_h_spin),
825 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->cd_h_spin),
826 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
827 gtk_label_set_text (GTK_LABEL(dlg->priv->cd_h_units_label),
828 dlg->priv->units_string);
829 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->cd_waste_spin),
831 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->cd_waste_spin),
832 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
833 gtk_label_set_text (GTK_LABEL(dlg->priv->cd_waste_units_label),
834 dlg->priv->units_string);
835 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->cd_margin_spin),
837 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->cd_margin_spin),
838 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
839 gtk_label_set_text (GTK_LABEL(dlg->priv->cd_margin_units_label),
840 dlg->priv->units_string);
842 /* Load some realistic defaults. */
843 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->cd_radius_spin),
844 DEFAULT_CD_RADIUS * dlg->priv->units_per_point);
845 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->cd_hole_spin),
846 DEFAULT_CD_HOLE * dlg->priv->units_per_point);
847 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->cd_waste_spin),
848 DEFAULT_CD_WASTE * dlg->priv->units_per_point);
849 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->cd_margin_spin),
850 DEFAULT_MARGIN * dlg->priv->units_per_point);
852 /* Handler to prepare the page. */
853 g_signal_connect_data (G_OBJECT(dlg->priv->cd_size_page), "prepare",
854 G_CALLBACK(cd_size_page_prepare_cb), dlg,
855 NULL, (G_CONNECT_AFTER|G_CONNECT_SWAPPED));
857 construct_page_boilerplate (dlg,
858 GNOME_DRUID_PAGE_STANDARD(dlg->priv->cd_size_page),
862 /*--------------------------------------------------------------------------*/
863 /* PRIVATE. Construct number of layouts page. */
864 /*--------------------------------------------------------------------------*/
866 construct_nlayouts_page (glTemplateDesigner *dlg,
871 dlg->priv->nlayouts_page =
872 glade_xml_get_widget (dlg->priv->gui, "nlayouts_page");
875 dlg->priv->nlayouts_image1 =
876 glade_xml_get_widget (dlg->priv->gui, "nlayouts_image1");
877 dlg->priv->nlayouts_image2 =
878 glade_xml_get_widget (dlg->priv->gui, "nlayouts_image2");
879 dlg->priv->nlayouts_spin =
880 glade_xml_get_widget (dlg->priv->gui, "nlayouts_spin");
882 /* Initialize illustrations. */
883 pixbuf = gdk_pixbuf_new_from_file (EX_NLAYOUTS_IMAGE1, NULL);
884 gtk_image_set_from_pixbuf (GTK_IMAGE(dlg->priv->nlayouts_image1), pixbuf);
885 pixbuf = gdk_pixbuf_new_from_file (EX_NLAYOUTS_IMAGE2, NULL);
886 gtk_image_set_from_pixbuf (GTK_IMAGE(dlg->priv->nlayouts_image2), pixbuf);
888 construct_page_boilerplate (dlg,
889 GNOME_DRUID_PAGE_STANDARD(dlg->priv->nlayouts_page),
893 /*--------------------------------------------------------------------------*/
894 /* PRIVATE. Construct layout page. */
895 /*--------------------------------------------------------------------------*/
897 construct_layout_page (glTemplateDesigner *dlg,
900 dlg->priv->layout_page =
901 glade_xml_get_widget (dlg->priv->gui, "layout_page");
903 /* Page Size Page Widgets */
904 dlg->priv->layout1_head_label =
905 glade_xml_get_widget (dlg->priv->gui, "layout1_head_label");
906 dlg->priv->layout1_nx_spin =
907 glade_xml_get_widget (dlg->priv->gui, "layout1_nx_spin");
908 dlg->priv->layout1_ny_spin =
909 glade_xml_get_widget (dlg->priv->gui, "layout1_ny_spin");
910 dlg->priv->layout1_x0_spin =
911 glade_xml_get_widget (dlg->priv->gui, "layout1_x0_spin");
912 dlg->priv->layout1_y0_spin =
913 glade_xml_get_widget (dlg->priv->gui, "layout1_y0_spin");
914 dlg->priv->layout1_dx_spin =
915 glade_xml_get_widget (dlg->priv->gui, "layout1_dx_spin");
916 dlg->priv->layout1_dy_spin =
917 glade_xml_get_widget (dlg->priv->gui, "layout1_dy_spin");
918 dlg->priv->layout2_head_label =
919 glade_xml_get_widget (dlg->priv->gui, "layout2_head_label");
920 dlg->priv->layout2_nx_spin =
921 glade_xml_get_widget (dlg->priv->gui, "layout2_nx_spin");
922 dlg->priv->layout2_ny_spin =
923 glade_xml_get_widget (dlg->priv->gui, "layout2_ny_spin");
924 dlg->priv->layout2_x0_spin =
925 glade_xml_get_widget (dlg->priv->gui, "layout2_x0_spin");
926 dlg->priv->layout2_y0_spin =
927 glade_xml_get_widget (dlg->priv->gui, "layout2_y0_spin");
928 dlg->priv->layout2_dx_spin =
929 glade_xml_get_widget (dlg->priv->gui, "layout2_dx_spin");
930 dlg->priv->layout2_dy_spin =
931 glade_xml_get_widget (dlg->priv->gui, "layout2_dy_spin");
932 dlg->priv->layout_x0_units_label =
933 glade_xml_get_widget (dlg->priv->gui, "layout_x0_units_label");
934 dlg->priv->layout_y0_units_label =
935 glade_xml_get_widget (dlg->priv->gui, "layout_y0_units_label");
936 dlg->priv->layout_dx_units_label =
937 glade_xml_get_widget (dlg->priv->gui, "layout_dx_units_label");
938 dlg->priv->layout_dy_units_label =
939 glade_xml_get_widget (dlg->priv->gui, "layout_dy_units_label");
940 dlg->priv->layout_mini_preview =
941 glade_xml_get_widget (dlg->priv->gui, "layout_mini_preview");
942 dlg->priv->layout_test_button =
943 glade_xml_get_widget (dlg->priv->gui, "layout_test_button");
945 /* Apply units to spinbuttons and units labels. */
946 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->layout1_x0_spin),
948 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->layout1_x0_spin),
949 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
950 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->layout2_x0_spin),
952 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->layout2_x0_spin),
953 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
954 gtk_label_set_text (GTK_LABEL(dlg->priv->layout_x0_units_label),
955 dlg->priv->units_string);
956 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->layout1_y0_spin),
958 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->layout1_y0_spin),
959 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
960 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->layout2_y0_spin),
962 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->layout2_y0_spin),
963 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
964 gtk_label_set_text (GTK_LABEL(dlg->priv->layout_y0_units_label),
965 dlg->priv->units_string);
966 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->layout1_dx_spin),
968 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->layout1_dx_spin),
969 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
970 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->layout2_dx_spin),
972 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->layout2_dx_spin),
973 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
974 gtk_label_set_text (GTK_LABEL(dlg->priv->layout_dx_units_label),
975 dlg->priv->units_string);
976 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->layout1_dy_spin),
978 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->layout1_dy_spin),
979 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
980 gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->layout2_dy_spin),
982 gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->layout2_dy_spin),
983 dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
984 gtk_label_set_text (GTK_LABEL(dlg->priv->layout_dy_units_label),
985 dlg->priv->units_string);
987 /* Connect a handler that listens for changes in these widgets */
988 /* This controls sensitivity of related widgets. */
989 g_signal_connect_swapped (G_OBJECT(dlg->priv->layout1_nx_spin), "changed",
990 G_CALLBACK(layout_page_changed_cb), dlg);
991 g_signal_connect_swapped (G_OBJECT(dlg->priv->layout1_ny_spin), "changed",
992 G_CALLBACK(layout_page_changed_cb), dlg);
993 g_signal_connect_swapped (G_OBJECT(dlg->priv->layout1_x0_spin), "changed",
994 G_CALLBACK(layout_page_changed_cb), dlg);
995 g_signal_connect_swapped (G_OBJECT(dlg->priv->layout1_y0_spin), "changed",
996 G_CALLBACK(layout_page_changed_cb), dlg);
997 g_signal_connect_swapped (G_OBJECT(dlg->priv->layout1_dx_spin), "changed",
998 G_CALLBACK(layout_page_changed_cb), dlg);
999 g_signal_connect_swapped (G_OBJECT(dlg->priv->layout1_dy_spin), "changed",
1000 G_CALLBACK(layout_page_changed_cb), dlg);
1001 g_signal_connect_swapped (G_OBJECT(dlg->priv->layout2_nx_spin), "changed",
1002 G_CALLBACK(layout_page_changed_cb), dlg);
1003 g_signal_connect_swapped (G_OBJECT(dlg->priv->layout2_ny_spin), "changed",
1004 G_CALLBACK(layout_page_changed_cb), dlg);
1005 g_signal_connect_swapped (G_OBJECT(dlg->priv->layout2_x0_spin), "changed",
1006 G_CALLBACK(layout_page_changed_cb), dlg);
1007 g_signal_connect_swapped (G_OBJECT(dlg->priv->layout2_y0_spin), "changed",
1008 G_CALLBACK(layout_page_changed_cb), dlg);
1009 g_signal_connect_swapped (G_OBJECT(dlg->priv->layout2_dx_spin), "changed",
1010 G_CALLBACK(layout_page_changed_cb), dlg);
1011 g_signal_connect_swapped (G_OBJECT(dlg->priv->layout2_dy_spin), "changed",
1012 G_CALLBACK(layout_page_changed_cb), dlg);
1016 g_signal_connect_swapped (G_OBJECT(dlg->priv->layout_test_button), "clicked",
1017 G_CALLBACK(print_test_cb), dlg);
1019 /* Handler to prepare the page. */
1020 g_signal_connect_data (G_OBJECT(dlg->priv->layout_page), "prepare",
1021 G_CALLBACK(layout_page_prepare_cb), dlg,
1022 NULL, (G_CONNECT_AFTER|G_CONNECT_SWAPPED));
1024 construct_page_boilerplate (dlg,
1025 GNOME_DRUID_PAGE_STANDARD(dlg->priv->layout_page),
1029 /*--------------------------------------------------------------------------*/
1030 /* PRIVATE. Construct finish page. */
1031 /*--------------------------------------------------------------------------*/
1033 construct_finish_page (glTemplateDesigner *dlg,
1037 dlg->priv->finish_page =
1038 glade_xml_get_widget (dlg->priv->gui, "finish_page");
1041 g_signal_connect_swapped (G_OBJECT(dlg->priv->finish_page), "finish",
1042 G_CALLBACK(finish_cb), dlg);
1044 construct_edge_page_boilerplate (dlg,
1045 GNOME_DRUID_PAGE_EDGE(dlg->priv->start_page),
1049 /*--------------------------------------------------------------------------*/
1050 /* PRIVATE. Common construction tasks for start and finish page. */
1051 /*--------------------------------------------------------------------------*/
1053 construct_edge_page_boilerplate (glTemplateDesigner *dlg,
1054 GnomeDruidPageEdge *page,
1057 gnome_druid_page_edge_set_logo (page, logo);
1060 /*--------------------------------------------------------------------------*/
1061 /* PRIVATE. Common construction tasks for all other pages. */
1062 /*--------------------------------------------------------------------------*/
1064 construct_page_boilerplate (glTemplateDesigner *dlg,
1065 GnomeDruidPageStandard *page,
1068 gnome_druid_page_standard_set_logo (page, logo);
1070 g_signal_connect (G_OBJECT(page), "next", G_CALLBACK(next_cb), dlg);
1071 g_signal_connect (G_OBJECT(page), "back", G_CALLBACK(back_cb), dlg);
1074 /*--------------------------------------------------------------------------*/
1075 /* PRIVATE. Cancel druid. */
1076 /*--------------------------------------------------------------------------*/
1078 cancel_cb (glTemplateDesigner *dlg)
1081 gtk_widget_destroy (GTK_WIDGET(dlg));
1085 /*--------------------------------------------------------------------------*/
1086 /* PRIVATE. Widget on name page "changed" callback. */
1087 /*--------------------------------------------------------------------------*/
1089 name_page_changed_cb (glTemplateDesigner *dlg)
1091 gchar *brand, *part_num, *desc;
1093 brand = gtk_editable_get_chars (GTK_EDITABLE(dlg->priv->brand_entry), 0, -1);
1094 part_num = gtk_editable_get_chars (GTK_EDITABLE(dlg->priv->part_num_entry), 0, -1);
1095 desc = gtk_editable_get_chars (GTK_EDITABLE(dlg->priv->description_entry), 0, -1);
1097 if (brand && brand[0] && part_num && part_num[0] && desc && desc[0]) {
1099 gnome_druid_set_buttons_sensitive (GNOME_DRUID(dlg->priv->druid),
1100 TRUE, TRUE, TRUE, FALSE);
1104 gnome_druid_set_buttons_sensitive (GNOME_DRUID(dlg->priv->druid),
1105 TRUE, FALSE, TRUE, FALSE);
1115 /*--------------------------------------------------------------------------*/
1116 /* PRIVATE. Widget on page size page "changed" callback. */
1117 /*--------------------------------------------------------------------------*/
1119 pg_size_page_changed_cb (glTemplateDesigner *dlg)
1121 gchar *page_size_name;
1126 gtk_combo_box_get_active_text (GTK_COMBO_BOX (dlg->priv->pg_size_combo));
1128 if (page_size_name && strlen(page_size_name)) {
1130 paper = gl_paper_from_name (page_size_name);
1133 if ( g_strcasecmp (paper->id, "Other") == 0 ) {
1134 gtk_widget_set_sensitive (GTK_WIDGET(dlg->priv->pg_w_spin), TRUE);
1135 gtk_widget_set_sensitive (GTK_WIDGET(dlg->priv->pg_h_spin), TRUE);
1136 gtk_widget_set_sensitive (GTK_WIDGET(dlg->priv->pg_w_units_label),
1138 gtk_widget_set_sensitive (GTK_WIDGET(dlg->priv->pg_h_units_label),
1142 gtk_widget_set_sensitive (GTK_WIDGET(dlg->priv->pg_w_spin), FALSE);
1143 gtk_widget_set_sensitive (GTK_WIDGET(dlg->priv->pg_h_spin), FALSE);
1144 gtk_widget_set_sensitive (GTK_WIDGET(dlg->priv->pg_w_units_label),
1146 gtk_widget_set_sensitive (GTK_WIDGET(dlg->priv->pg_h_units_label),
1149 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->pg_w_spin),
1150 paper->width * dlg->priv->units_per_point);
1151 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->pg_h_spin),
1152 paper->height * dlg->priv->units_per_point);
1155 gl_paper_free (paper);
1158 g_free (page_size_name);
1162 /*--------------------------------------------------------------------------*/
1163 /* PRIVATE. Prepare rectangular size page. */
1164 /*--------------------------------------------------------------------------*/
1166 rect_size_page_prepare_cb (glTemplateDesigner *dlg)
1168 gdouble max_w, max_h;
1169 gdouble w, h, r, x_waste, y_waste, margin;
1171 /* Limit label size based on already chosen page size. */
1172 max_w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->pg_w_spin));
1173 max_h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->pg_h_spin));
1175 w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_w_spin));
1176 h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_h_spin));
1177 r = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_r_spin));
1178 x_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_x_waste_spin));
1179 y_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_y_waste_spin));
1180 margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_margin_spin));
1182 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->rect_w_spin),
1183 dlg->priv->climb_rate, max_w);
1184 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->rect_h_spin),
1185 dlg->priv->climb_rate, max_h);
1186 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->rect_r_spin),
1187 0.0, MIN(max_w, max_h)/2.0);
1188 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->rect_x_waste_spin),
1189 0.0, MIN(max_w, max_h)/4.0);
1190 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->rect_y_waste_spin),
1191 0.0, MIN(max_w, max_h)/4.0);
1192 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->rect_margin_spin),
1193 0.0, MIN(max_w, max_h)/4.0);
1195 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->rect_w_spin), w);
1196 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->rect_h_spin), h);
1197 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->rect_r_spin), r);
1198 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->rect_x_waste_spin), x_waste);
1199 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->rect_y_waste_spin), y_waste);
1200 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->rect_margin_spin), margin);
1204 /*--------------------------------------------------------------------------*/
1205 /* PRIVATE. Prepare round size page. */
1206 /*--------------------------------------------------------------------------*/
1208 round_size_page_prepare_cb (glTemplateDesigner *dlg)
1210 gdouble max_w, max_h;
1211 gdouble r, waste, margin;
1213 /* Limit label size based on already chosen page size. */
1214 max_w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->pg_w_spin));
1215 max_h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->pg_h_spin));
1217 r = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->round_r_spin));
1218 waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->round_waste_spin));
1219 margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->round_margin_spin));
1221 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->round_r_spin),
1222 dlg->priv->climb_rate, MIN(max_w, max_h)/2.0);
1223 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->round_waste_spin),
1224 0.0, MIN(max_w, max_h)/4.0);
1225 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->round_margin_spin),
1226 0.0, MIN(max_w, max_h)/4.0);
1228 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->round_r_spin), r);
1229 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->round_waste_spin), waste);
1230 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->round_margin_spin), margin);
1234 /*--------------------------------------------------------------------------*/
1235 /* PRIVATE. Prepare cd/dvd size page. */
1236 /*--------------------------------------------------------------------------*/
1238 cd_size_page_prepare_cb (glTemplateDesigner *dlg)
1240 gdouble max_w, max_h;
1241 gdouble radius, hole, w, h, waste, margin;
1243 /* Limit label size based on already chosen page size. */
1244 max_w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->pg_w_spin));
1245 max_h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->pg_h_spin));
1247 radius = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_radius_spin));
1248 hole = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_hole_spin));
1249 w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_w_spin));
1250 h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_h_spin));
1251 waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_waste_spin));
1252 margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_margin_spin));
1254 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->cd_radius_spin),
1255 dlg->priv->climb_rate, MIN(max_w, max_h)/2.0);
1256 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->cd_hole_spin),
1257 dlg->priv->climb_rate, MIN(max_w, max_h)/2.0);
1258 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->cd_w_spin),
1260 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->cd_h_spin),
1262 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->cd_waste_spin),
1263 0.0, MIN(max_w, max_h)/4.0);
1264 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->cd_margin_spin),
1265 0.0, MIN(max_w, max_h)/4.0);
1267 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->cd_radius_spin), radius);
1268 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->cd_hole_spin), hole);
1269 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->cd_w_spin), w);
1270 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->cd_h_spin), h);
1271 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->cd_waste_spin), waste);
1272 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->cd_margin_spin), margin);
1276 /*--------------------------------------------------------------------------*/
1277 /* PRIVATE. Layout page widget changed cb. */
1278 /*--------------------------------------------------------------------------*/
1280 layout_page_prepare_cb (glTemplateDesigner *dlg)
1282 gdouble page_w, page_h;
1283 gdouble w, h, x_waste, y_waste;
1284 gint max_nx, max_ny;
1286 gdouble nx_1, ny_1, x0_1, y0_1, dx_1, dy_1;
1287 gdouble nx_2, ny_2, x0_2, y0_2, dx_2, dy_2;
1289 g_signal_handlers_block_by_func (G_OBJECT(dlg->priv->layout1_nx_spin),
1290 G_CALLBACK(layout_page_changed_cb),
1292 g_signal_handlers_block_by_func (G_OBJECT(dlg->priv->layout1_ny_spin),
1293 G_CALLBACK(layout_page_changed_cb),
1295 g_signal_handlers_block_by_func (G_OBJECT(dlg->priv->layout1_x0_spin),
1296 G_CALLBACK(layout_page_changed_cb),
1298 g_signal_handlers_block_by_func (G_OBJECT(dlg->priv->layout1_y0_spin),
1299 G_CALLBACK(layout_page_changed_cb),
1301 g_signal_handlers_block_by_func (G_OBJECT(dlg->priv->layout1_dx_spin),
1302 G_CALLBACK(layout_page_changed_cb),
1304 g_signal_handlers_block_by_func (G_OBJECT(dlg->priv->layout1_dy_spin),
1305 G_CALLBACK(layout_page_changed_cb),
1307 g_signal_handlers_block_by_func (G_OBJECT(dlg->priv->layout2_nx_spin),
1308 G_CALLBACK(layout_page_changed_cb),
1310 g_signal_handlers_block_by_func (G_OBJECT(dlg->priv->layout2_ny_spin),
1311 G_CALLBACK(layout_page_changed_cb),
1313 g_signal_handlers_block_by_func (G_OBJECT(dlg->priv->layout2_x0_spin),
1314 G_CALLBACK(layout_page_changed_cb),
1316 g_signal_handlers_block_by_func (G_OBJECT(dlg->priv->layout2_y0_spin),
1317 G_CALLBACK(layout_page_changed_cb),
1319 g_signal_handlers_block_by_func (G_OBJECT(dlg->priv->layout2_dx_spin),
1320 G_CALLBACK(layout_page_changed_cb),
1322 g_signal_handlers_block_by_func (G_OBJECT(dlg->priv->layout2_dy_spin),
1323 G_CALLBACK(layout_page_changed_cb),
1326 /* Limit ranges based on already chosen page and label sizes. */
1327 page_w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->pg_w_spin));
1328 page_h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->pg_h_spin));
1329 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->priv->shape_rect_radio))) {
1330 w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_w_spin));
1331 h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_h_spin));
1332 x_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_x_waste_spin));
1333 y_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_y_waste_spin));
1335 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->priv->shape_round_radio))) {
1336 w = 2*gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->round_r_spin));
1338 x_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->round_waste_spin));
1341 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->priv->shape_cd_radio))) {
1342 w = 2*gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_radius_spin));
1344 x_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_waste_spin));
1347 max_nx = MAX (floor (page_w/(w + 2*x_waste) + DELTA), 1.0);
1348 max_ny = MAX (floor (page_h/(h + 2*y_waste) + DELTA), 1.0);
1350 nx_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout1_nx_spin));
1351 ny_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout1_ny_spin));
1352 x0_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout1_x0_spin));
1353 y0_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout1_y0_spin));
1354 dx_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout1_dx_spin));
1355 dy_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout1_dy_spin));
1356 nx_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout2_nx_spin));
1357 ny_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout2_ny_spin));
1358 x0_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout2_x0_spin));
1359 y0_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout2_y0_spin));
1360 dx_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout2_dx_spin));
1361 dy_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout2_dy_spin));
1363 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->layout1_nx_spin),
1365 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->layout1_ny_spin),
1367 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->layout1_x0_spin),
1368 x_waste, page_w - w - x_waste);
1369 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->layout1_y0_spin),
1370 y_waste, page_h - h - y_waste);
1371 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->layout1_dx_spin),
1372 w + 2*x_waste, page_w - w - 2*x_waste);
1373 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->layout1_dy_spin),
1374 h + 2*y_waste, page_h - h - 2*y_waste);
1375 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->layout2_nx_spin),
1377 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->layout2_ny_spin),
1379 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->layout2_x0_spin),
1380 x_waste, page_w - w - x_waste);
1381 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->layout2_y0_spin),
1382 y_waste, page_h - h - y_waste);
1383 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->layout2_dx_spin),
1384 w + 2*x_waste, page_w - w - 2*x_waste);
1385 gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->layout2_dy_spin),
1386 h + 2*y_waste, page_h - h - 2*y_waste);
1388 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->layout1_nx_spin), nx_1);
1389 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->layout1_ny_spin), ny_1);
1390 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->layout1_x0_spin), x0_1);
1391 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->layout1_y0_spin), y0_1);
1392 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->layout1_dx_spin), dx_1);
1393 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->layout1_dy_spin), dy_1);
1394 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->layout2_nx_spin), nx_2);
1395 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->layout2_ny_spin), ny_2);
1396 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->layout2_x0_spin), x0_2);
1397 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->layout2_y0_spin), y0_2);
1398 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->layout2_dx_spin), dx_2);
1399 gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->layout2_dy_spin), dy_2);
1401 /* Set visibility of layout2 widgets as appropriate. */
1402 nlayouts = gtk_spin_button_get_value (GTK_SPIN_BUTTON (dlg->priv->nlayouts_spin));
1403 if ( nlayouts == 1 ) {
1405 gtk_widget_hide (dlg->priv->layout1_head_label);
1406 gtk_widget_hide (dlg->priv->layout2_head_label);
1407 gtk_widget_hide (dlg->priv->layout2_nx_spin);
1408 gtk_widget_hide (dlg->priv->layout2_ny_spin);
1409 gtk_widget_hide (dlg->priv->layout2_x0_spin);
1410 gtk_widget_hide (dlg->priv->layout2_y0_spin);
1411 gtk_widget_hide (dlg->priv->layout2_dx_spin);
1412 gtk_widget_hide (dlg->priv->layout2_dy_spin);
1416 gtk_widget_show (dlg->priv->layout1_head_label);
1417 gtk_widget_show (dlg->priv->layout2_head_label);
1418 gtk_widget_show (dlg->priv->layout2_nx_spin);
1419 gtk_widget_show (dlg->priv->layout2_ny_spin);
1420 gtk_widget_show (dlg->priv->layout2_x0_spin);
1421 gtk_widget_show (dlg->priv->layout2_y0_spin);
1422 gtk_widget_show (dlg->priv->layout2_dx_spin);
1423 gtk_widget_show (dlg->priv->layout2_dy_spin);
1427 g_signal_handlers_unblock_by_func (G_OBJECT(dlg->priv->layout1_nx_spin),
1428 G_CALLBACK(layout_page_changed_cb),
1430 g_signal_handlers_unblock_by_func (G_OBJECT(dlg->priv->layout1_ny_spin),
1431 G_CALLBACK(layout_page_changed_cb),
1433 g_signal_handlers_unblock_by_func (G_OBJECT(dlg->priv->layout1_x0_spin),
1434 G_CALLBACK(layout_page_changed_cb),
1436 g_signal_handlers_unblock_by_func (G_OBJECT(dlg->priv->layout1_y0_spin),
1437 G_CALLBACK(layout_page_changed_cb),
1439 g_signal_handlers_unblock_by_func (G_OBJECT(dlg->priv->layout1_dx_spin),
1440 G_CALLBACK(layout_page_changed_cb),
1442 g_signal_handlers_unblock_by_func (G_OBJECT(dlg->priv->layout1_dy_spin),
1443 G_CALLBACK(layout_page_changed_cb),
1445 g_signal_handlers_unblock_by_func (G_OBJECT(dlg->priv->layout2_nx_spin),
1446 G_CALLBACK(layout_page_changed_cb),
1448 g_signal_handlers_unblock_by_func (G_OBJECT(dlg->priv->layout2_ny_spin),
1449 G_CALLBACK(layout_page_changed_cb),
1451 g_signal_handlers_unblock_by_func (G_OBJECT(dlg->priv->layout2_x0_spin),
1452 G_CALLBACK(layout_page_changed_cb),
1454 g_signal_handlers_unblock_by_func (G_OBJECT(dlg->priv->layout2_y0_spin),
1455 G_CALLBACK(layout_page_changed_cb),
1457 g_signal_handlers_unblock_by_func (G_OBJECT(dlg->priv->layout2_dx_spin),
1458 G_CALLBACK(layout_page_changed_cb),
1460 g_signal_handlers_unblock_by_func (G_OBJECT(dlg->priv->layout2_dy_spin),
1461 G_CALLBACK(layout_page_changed_cb),
1464 layout_page_changed_cb (dlg);
1467 /*--------------------------------------------------------------------------*/
1468 /* PRIVATE. Layout page widget changed cb. */
1469 /*--------------------------------------------------------------------------*/
1471 layout_page_changed_cb (glTemplateDesigner *dlg)
1473 glTemplate *template;
1475 template = build_template (dlg);
1477 gl_wdgt_mini_preview_set_template (GL_WDGT_MINI_PREVIEW(dlg->priv->layout_mini_preview),
1480 gl_template_free (template);
1483 /*--------------------------------------------------------------------------*/
1484 /* PRIVATE. Print test sheet callback. */
1485 /*--------------------------------------------------------------------------*/
1487 print_test_cb (glTemplateDesigner *dlg)
1490 glTemplate *template;
1491 GtkWidget *print_dialog;
1493 label = gl_label_new ();
1495 template = build_template (dlg);
1496 gl_label_set_template (GL_LABEL(label), template);
1498 print_dialog = gl_print_dialog_new (GL_LABEL(label), NULL);
1499 gl_print_dialog_force_outline_flag (GL_PRINT_DIALOG(print_dialog));
1500 gtk_widget_show (print_dialog);
1502 gl_template_free (template);
1503 g_object_unref (G_OBJECT(label));
1506 /*--------------------------------------------------------------------------*/
1507 /* PRIVATE. Finish druid. */
1508 /*--------------------------------------------------------------------------*/
1510 finish_cb (glTemplateDesigner *dlg)
1512 glTemplate *template;
1514 template = build_template (dlg);
1515 gl_template_register (template);
1517 gtk_widget_destroy (GTK_WIDGET(dlg));
1521 /*--------------------------------------------------------------------------*/
1522 /* Build a template based on current druid settings. */
1523 /*--------------------------------------------------------------------------*/
1525 build_template (glTemplateDesigner *dlg)
1528 gchar *brand, *part_num, *name, *desc;
1529 gchar *page_size_name;
1531 glTemplateLabelShape shape;
1532 glTemplateLabelType *label_type;
1533 gdouble w, h, r, radius, hole, waste, x_waste, y_waste, margin;
1535 gdouble nx_1, ny_1, x0_1, y0_1, dx_1, dy_1;
1536 gdouble nx_2, ny_2, x0_2, y0_2, dx_2, dy_2;
1537 glTemplate *template;
1539 upp = dlg->priv->units_per_point;
1541 brand = gtk_editable_get_chars (GTK_EDITABLE(dlg->priv->brand_entry), 0, -1);
1542 part_num = gtk_editable_get_chars (GTK_EDITABLE(dlg->priv->part_num_entry), 0, -1);
1543 name = g_strdup_printf ("%s %s", brand, part_num);
1544 desc = gtk_editable_get_chars (GTK_EDITABLE(dlg->priv->description_entry), 0, -1);
1547 gtk_combo_box_get_active_text (GTK_COMBO_BOX (dlg->priv->pg_size_combo));
1548 paper = gl_paper_from_name (page_size_name);
1549 if ( g_strcasecmp (paper->id, "Other") == 0 ) {
1551 gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->pg_w_spin))
1554 gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->pg_h_spin))
1558 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->priv->shape_rect_radio))) {
1559 shape = GL_TEMPLATE_SHAPE_RECT;
1560 w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_w_spin));
1561 h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_h_spin));
1562 r = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_r_spin));
1563 x_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_x_waste_spin));
1564 y_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_y_waste_spin));
1565 margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_margin_spin));
1568 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->priv->shape_round_radio))) {
1569 shape = GL_TEMPLATE_SHAPE_ROUND;
1570 r = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->round_r_spin));
1571 waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->round_waste_spin));
1572 margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->round_margin_spin));
1575 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->priv->shape_cd_radio))) {
1576 shape = GL_TEMPLATE_SHAPE_CD;
1577 radius = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_radius_spin));
1578 hole = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_hole_spin));
1579 w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_w_spin));
1580 h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_h_spin));
1581 waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_waste_spin));
1582 margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_margin_spin));
1585 nlayouts = gtk_spin_button_get_value (GTK_SPIN_BUTTON (dlg->priv->nlayouts_spin));
1586 nx_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout1_nx_spin));
1587 ny_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout1_ny_spin));
1588 x0_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout1_x0_spin));
1589 y0_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout1_y0_spin));
1590 dx_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout1_dx_spin));
1591 dy_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout1_dy_spin));
1592 nx_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout2_nx_spin));
1593 ny_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout2_ny_spin));
1594 x0_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout2_x0_spin));
1595 y0_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout2_y0_spin));
1596 dx_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout2_dx_spin));
1597 dy_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout2_dy_spin));
1600 template = gl_template_new (name, desc, paper->id, paper->width, paper->height);
1603 case GL_TEMPLATE_SHAPE_RECT:
1605 gl_template_rect_label_type_new ("0",
1606 w/upp, h/upp, r/upp,
1607 x_waste/upp, y_waste/upp);
1609 case GL_TEMPLATE_SHAPE_ROUND:
1611 gl_template_round_label_type_new ("0", r/upp, waste/upp);
1613 case GL_TEMPLATE_SHAPE_CD:
1615 gl_template_cd_label_type_new ("0",
1616 radius/upp, hole/upp,
1621 gl_template_add_label_type (template, label_type);
1623 gl_template_add_markup (label_type,
1624 gl_template_markup_margin_new (margin/upp));
1626 gl_template_add_layout (label_type,
1627 gl_template_layout_new (nx_1, ny_1,
1633 gl_template_add_layout (label_type,
1634 gl_template_layout_new (nx_2, ny_2,
1646 g_free (page_size_name);
1647 gl_paper_free (paper);
1652 /*--------------------------------------------------------------------------*/
1653 /* PRIVATE. Handle non-linear forward traversal. */
1654 /*--------------------------------------------------------------------------*/
1656 next_cb (GnomeDruidPage *druidpage,
1658 glTemplateDesigner *dlg)
1661 if ( GTK_WIDGET(druidpage) == dlg->priv->shape_page ) {
1663 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->priv->shape_rect_radio))) {
1664 gnome_druid_set_page (GNOME_DRUID(dlg->priv->druid),
1665 GNOME_DRUID_PAGE(dlg->priv->rect_size_page));
1669 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->priv->shape_round_radio))) {
1670 gnome_druid_set_page (GNOME_DRUID(dlg->priv->druid),
1671 GNOME_DRUID_PAGE(dlg->priv->round_size_page));
1675 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->priv->shape_cd_radio))) {
1676 gnome_druid_set_page (GNOME_DRUID(dlg->priv->druid),
1677 GNOME_DRUID_PAGE(dlg->priv->cd_size_page));
1683 if ( GTK_WIDGET(druidpage) == dlg->priv->rect_size_page ) {
1685 gnome_druid_set_page (GNOME_DRUID(dlg->priv->druid),
1686 GNOME_DRUID_PAGE(dlg->priv->nlayouts_page));
1691 if ( GTK_WIDGET(druidpage) == dlg->priv->round_size_page ) {
1693 gnome_druid_set_page (GNOME_DRUID(dlg->priv->druid),
1694 GNOME_DRUID_PAGE(dlg->priv->nlayouts_page));
1699 if ( GTK_WIDGET(druidpage) == dlg->priv->cd_size_page ) {
1701 gnome_druid_set_page (GNOME_DRUID(dlg->priv->druid),
1702 GNOME_DRUID_PAGE(dlg->priv->nlayouts_page));
1707 /* Default case is linear. */
1711 /*--------------------------------------------------------------------------*/
1712 /* PRIVATE. Handle non-linear reverse traversal. */
1713 /*--------------------------------------------------------------------------*/
1715 back_cb (GnomeDruidPage *druidpage,
1717 glTemplateDesigner *dlg)
1720 if ( GTK_WIDGET(druidpage) == dlg->priv->rect_size_page ) {
1722 gnome_druid_set_page (GNOME_DRUID(dlg->priv->druid),
1723 GNOME_DRUID_PAGE(dlg->priv->shape_page));
1728 if ( GTK_WIDGET(druidpage) == dlg->priv->round_size_page ) {
1730 gnome_druid_set_page (GNOME_DRUID(dlg->priv->druid),
1731 GNOME_DRUID_PAGE(dlg->priv->shape_page));
1736 if ( GTK_WIDGET(druidpage) == dlg->priv->cd_size_page ) {
1738 gnome_druid_set_page (GNOME_DRUID(dlg->priv->druid),
1739 GNOME_DRUID_PAGE(dlg->priv->shape_page));
1744 if ( GTK_WIDGET(druidpage) == dlg->priv->nlayouts_page ) {
1746 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->priv->shape_rect_radio))) {
1747 gnome_druid_set_page (GNOME_DRUID(dlg->priv->druid),
1748 GNOME_DRUID_PAGE(dlg->priv->rect_size_page));
1752 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->priv->shape_round_radio))) {
1753 gnome_druid_set_page (GNOME_DRUID(dlg->priv->druid),
1754 GNOME_DRUID_PAGE(dlg->priv->round_size_page));
1758 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->priv->shape_cd_radio))) {
1759 gnome_druid_set_page (GNOME_DRUID(dlg->priv->druid),
1760 GNOME_DRUID_PAGE(dlg->priv->cd_size_page));
1766 /* Default case is linear. */
1770 /*****************************************************************************/
1771 /* Construct mini preview widget. */
1772 /*****************************************************************************/
1774 gl_template_designer_construct_mini_preview (gchar *name,
1783 return gl_wdgt_mini_preview_new (height, width);