]> git.sur5r.net Git - glabels/blobdiff - glabels2/src/template-designer.c
2009-09-02 Jim Evins <evins@snaught.com>
[glabels] / glabels2 / src / template-designer.c
index ed4df5ba3d79401c53a32508a7a351ceaee01385..0848cc9eeb1cd70f8a86c50b5d942aa84f8e099e 100644 (file)
@@ -1,71 +1,56 @@
 /*
- *  (GLABELS) Label and Business Card Creation program for GNOME
+ *  template-designer.c
+ *  Copyright (C) 2003-2009  Jim Evins <evins@snaught.com>.
  *
- *  template-designer.c:  Template designer module
+ *  This file is part of gLabels.
  *
- *  Copyright (C) 2003  Jim Evins <evins@snaught.com>.
- *
- *  This program is free software; you can redistribute it and/or modify
+ *  gLabels is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
+ *  the Free Software Foundation, either version 3 of the License, or
  *  (at your option) any later version.
  *
- *  This program is distributed in the hope that it will be useful,
+ *  gLabels is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ *  along with gLabels.  If not, see <http://www.gnu.org/licenses/>.
  */
+
 #include <config.h>
 
+#include "template-designer.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtkbuilder.h>
+#include <gtk/gtktogglebutton.h>
+#include <gtk/gtkcombobox.h>
+#include <gtk/gtkspinbutton.h>
+#include <gtk/gtklabel.h>
+#include <string.h>
 #include <math.h>
-#include <libgnome/libgnome.h>
-#include <libgnomeui/libgnomeui.h>
-#include <glade/glade-xml.h>
 
-#include "template-designer.h"
 #include "prefs.h"
-#include "paper.h"
-#include "wdgt-mini-preview.h"
-#include "print-dialog.h"
+#include <libglabels/db.h>
+#include "mini-preview.h"
+#include "mini-preview-pixbuf-cache.h"
+#include "print-op.h"
+#include "util.h"
 
 #include "debug.h"
 
+
 /*========================================================*/
 /* Private macros and constants.                          */
 /*========================================================*/
-#define ICON_PIXMAP gnome_program_locate_file (NULL,\
-                                               GNOME_FILE_DOMAIN_APP_PIXMAP,\
-                                               "glabels/glabels-icon.png",\
-                                               FALSE, NULL)
-
-#define EX_RECT_IMAGE gnome_program_locate_file (NULL,\
-                                               GNOME_FILE_DOMAIN_APP_PIXMAP,\
-                                               "glabels/ex-rect-size.png",\
-                                               FALSE, NULL)
-
-#define EX_ROUND_IMAGE gnome_program_locate_file (NULL,\
-                                               GNOME_FILE_DOMAIN_APP_PIXMAP,\
-                                               "glabels/ex-round-size.png",\
-                                               FALSE, NULL)
-
-#define EX_CD_IMAGE gnome_program_locate_file (NULL,\
-                                               GNOME_FILE_DOMAIN_APP_PIXMAP,\
-                                               "glabels/ex-cd-size.png",\
-                                               FALSE, NULL)
-
-#define EX_NLAYOUTS_IMAGE1 gnome_program_locate_file (NULL,\
-                                               GNOME_FILE_DOMAIN_APP_PIXMAP,\
-                                               "glabels/ex-1layout.png",\
-                                               FALSE, NULL)
-
-#define EX_NLAYOUTS_IMAGE2 gnome_program_locate_file (NULL,\
-                                               GNOME_FILE_DOMAIN_APP_PIXMAP,\
-                                               "glabels/ex-2layouts.png",\
-                                               FALSE, NULL)
+#define ICON_PIXMAP        (GLABELS_ICON_DIR "glabels.png")
+
+#define EX_RECT_IMAGE      (GLABELS_PIXMAP_DIR "ex-rect-size.png")
+#define EX_ROUND_IMAGE     (GLABELS_PIXMAP_DIR "ex-round-size.png")
+#define EX_CD_IMAGE        (GLABELS_PIXMAP_DIR "ex-cd-size.png")
+#define EX_NLAYOUTS_IMAGE1 (GLABELS_PIXMAP_DIR "ex-1layout.png")
+#define EX_NLAYOUTS_IMAGE2 (GLABELS_PIXMAP_DIR "ex-2layouts.png")
 
 #define DEFAULT_MARGIN 9.0
 
 #define DEFAULT_CD_HOLE      58.5
 #define DEFAULT_CD_WASTE      9.0 /* Should never exceed 1/2 the distance between items. */
 
-#define CONTENTS_BG 0xF5F5F5FF
 #define DELTA 0.01
 #define MAX_PAGE_DIM_POINTS 5000.0
 
+
 /*========================================================*/
 /* Private types.                                         */
 /*========================================================*/
 
 struct _glTemplateDesignerPrivate
 {
-       GladeXML        *gui;
-       GtkWidget       *druid;
+        GtkBuilder      *builder;
 
-       /* Druid pages */
+       /* Assistant pages */
        GtkWidget       *start_page;
        GtkWidget       *name_page;
        GtkWidget       *pg_size_page;
@@ -109,11 +93,12 @@ struct _glTemplateDesignerPrivate
        /* Name page controls */
        GtkWidget       *brand_entry;
        GtkWidget       *part_num_entry;
+        GtkWidget       *name_warning_image;
+        GtkWidget       *name_warning_label;
        GtkWidget       *description_entry;
 
        /* Page size page controls */
        GtkWidget       *pg_size_combo;
-       GtkWidget       *pg_size_entry;
        GtkWidget       *pg_w_spin;
        GtkWidget       *pg_h_spin;
        GtkWidget       *pg_w_units_label;
@@ -129,12 +114,14 @@ struct _glTemplateDesignerPrivate
        GtkWidget       *rect_w_spin;
        GtkWidget       *rect_h_spin;
        GtkWidget       *rect_r_spin;
-       GtkWidget       *rect_waste_spin;
+       GtkWidget       *rect_x_waste_spin;
+       GtkWidget       *rect_y_waste_spin;
        GtkWidget       *rect_margin_spin;
        GtkWidget       *rect_w_units_label;
        GtkWidget       *rect_h_units_label;
        GtkWidget       *rect_r_units_label;
-       GtkWidget       *rect_waste_units_label;
+       GtkWidget       *rect_x_waste_units_label;
+       GtkWidget       *rect_y_waste_units_label;
        GtkWidget       *rect_margin_units_label;
 
        /* Label size (round) page controls */
@@ -185,6 +172,7 @@ struct _glTemplateDesignerPrivate
        GtkWidget       *layout_y0_units_label;
        GtkWidget       *layout_dx_units_label;
        GtkWidget       *layout_dy_units_label;
+       GtkWidget       *mini_preview_vbox;
        GtkWidget       *layout_mini_preview;
        GtkWidget       *layout_test_button;
 
@@ -194,1427 +182,1569 @@ struct _glTemplateDesignerPrivate
        gdouble          climb_rate;
        gint             digits;
 
+        /* Prevent recursion */
+       gboolean    stop_signals;
 };
 
+/* Page numbers for traversing GtkAssistant */
+enum {
+        START_PAGE_NUM = 0,
+        NAME_PAGE_NUM,
+        PG_SIZE_PAGE_NUM,
+        SHAPE_PAGE_NUM,
+        RECT_SIZE_PAGE_NUM,
+        ROUND_SIZE_PAGE_NUM,
+        CD_SIZE_PAGE_NUM,
+        NLAYOUTS_PAGE_NUM,
+        LAYOUT_PAGE_NUM,
+        FINISH_PAGE_NUM
+};
+
+
 /*========================================================*/
 /* Private globals.                                       */
 /*========================================================*/
 
-static GtkWindowClass* parent_class = NULL;
 
 /*========================================================*/
 /* Private function prototypes.                           */
 /*========================================================*/
 
-static void gl_template_designer_class_init      (glTemplateDesignerClass *klass);
-static void gl_template_designer_init            (glTemplateDesigner      *dlg);
 static void gl_template_designer_finalize        (GObject                 *object);
-static void gl_template_designer_construct        (glTemplateDesigner      *dlg);
-
-static void     construct_start_page              (glTemplateDesigner      *dlg,
-                                                  GdkPixbuf               *logo);
-
-static void     construct_name_page               (glTemplateDesigner      *dlg,
-                                                  GdkPixbuf               *logo);
+static void gl_template_designer_construct        (glTemplateDesigner      *dialog);
 
-static void     construct_pg_size_page            (glTemplateDesigner      *dlg,
+static void     construct_start_page              (glTemplateDesigner      *dialog,
                                                   GdkPixbuf               *logo);
 
-static void     construct_shape_page              (glTemplateDesigner      *dlg,
+static void     construct_name_page               (glTemplateDesigner      *dialog,
                                                   GdkPixbuf               *logo);
 
-static void     construct_rect_size_page          (glTemplateDesigner      *dlg,
+static void     construct_pg_size_page            (glTemplateDesigner      *dialog,
                                                   GdkPixbuf               *logo);
 
-static void     construct_round_size_page         (glTemplateDesigner      *dlg,
+static void     construct_shape_page              (glTemplateDesigner      *dialog,
                                                   GdkPixbuf               *logo);
 
-static void     construct_cd_size_page            (glTemplateDesigner      *dlg,
+static void     construct_rect_size_page          (glTemplateDesigner      *dialog,
                                                   GdkPixbuf               *logo);
 
-static void     construct_nlayouts_page           (glTemplateDesigner      *dlg,
+static void     construct_round_size_page         (glTemplateDesigner      *dialog,
                                                   GdkPixbuf               *logo);
 
-static void     construct_layout_page             (glTemplateDesigner      *dlg,
+static void     construct_cd_size_page            (glTemplateDesigner      *dialog,
                                                   GdkPixbuf               *logo);
 
-static void     construct_finish_page             (glTemplateDesigner      *dlg,
+static void     construct_nlayouts_page           (glTemplateDesigner      *dialog,
                                                   GdkPixbuf               *logo);
 
-static void     construct_edge_page_boilerplate   (glTemplateDesigner      *dlg,
-                                                  GnomeDruidPageEdge      *page,
+static void     construct_layout_page             (glTemplateDesigner      *dialog,
                                                   GdkPixbuf               *logo);
 
-static void     construct_page_boilerplate        (glTemplateDesigner      *dlg,
-                                                  GnomeDruidPageStandard  *page,
+static void     construct_finish_page             (glTemplateDesigner      *dialog,
                                                   GdkPixbuf               *logo);
 
-static void     cancel_cb                         (glTemplateDesigner      *dlg);
+static void     cancel_cb                         (glTemplateDesigner      *dialog);
+static void     apply_cb                          (glTemplateDesigner      *dialog);
+static void     close_cb                          (glTemplateDesigner      *dialog);
+static void     prepare_cb                        (glTemplateDesigner      *dialog,
+                                                   GtkWidget               *page);
 
-static void     name_page_changed_cb              (glTemplateDesigner      *dlg);
+static gint     forward_page_function             (gint                     current_page,
+                                                   gpointer                 data);
 
-static void     pg_size_page_changed_cb           (glTemplateDesigner      *dlg);
+static void     name_page_changed_cb              (glTemplateDesigner      *dialog);
 
-static void     rect_size_page_prepare_cb         (glTemplateDesigner      *dlg);
+static void     pg_size_page_changed_cb           (glTemplateDesigner      *dialog);
 
-static void     round_size_page_prepare_cb        (glTemplateDesigner      *dlg);
+static void     rect_size_page_prepare_cb         (glTemplateDesigner      *dialog);
 
-static void     cd_size_page_prepare_cb           (glTemplateDesigner      *dlg);
+static void     round_size_page_prepare_cb        (glTemplateDesigner      *dialog);
 
-static void     layout_page_prepare_cb            (glTemplateDesigner      *dlg);
+static void     cd_size_page_prepare_cb           (glTemplateDesigner      *dialog);
 
-static void     layout_page_changed_cb            (glTemplateDesigner      *dlg);
+static void     layout_page_prepare_cb            (glTemplateDesigner      *dialog);
 
-static void     print_test_cb                     (glTemplateDesigner      *dlg);
+static void     layout_page_changed_cb            (glTemplateDesigner      *dialog);
 
-static glTemplate *build_template                 (glTemplateDesigner      *dlg);
+static void     print_test_cb                     (glTemplateDesigner      *dialog);
 
-static gboolean next_cb                           (GnomeDruidPage          *druidpage,
-                                                  GtkWidget               *widget,
-                                                  glTemplateDesigner      *dlg);
+static lglTemplate *build_template                (glTemplateDesigner      *dialog);
 
-static gboolean back_cb                           (GnomeDruidPage          *druidpage,
-                                                  GtkWidget               *widget,
-                                                  glTemplateDesigner      *dlg);
 
-static void finish_cb                             (glTemplateDesigner      *dlg);
-
-\f
 /*****************************************************************************/
 /* Boilerplate object stuff.                                                 */
 /*****************************************************************************/
-GType
-gl_template_designer_get_type (void)
-{
-       static GType dialog_type = 0;
-
-       if (!dialog_type)
-       {
-               static const GTypeInfo dialog_info =
-               {
-                       sizeof (glTemplateDesignerClass),
-                       NULL,           /* base_init */
-                       NULL,           /* base_finalize */
-                       (GClassInitFunc) gl_template_designer_class_init,
-                       NULL,           /* class_finalize */
-                       NULL,           /* class_data */
-                       sizeof (glTemplateDesigner),
-                       0,              /* n_preallocs */
-                       (GInstanceInitFunc) gl_template_designer_init
-               };
-
-               dialog_type = g_type_register_static (GTK_TYPE_WINDOW,
-                                                     "glTemplateDesigner",
-                                                     &dialog_info, 
-                                                     0);
-       }
-
-       return dialog_type;
-}
+G_DEFINE_TYPE (glTemplateDesigner, gl_template_designer, GTK_TYPE_ASSISTANT);
+
 
 static void
-gl_template_designer_class_init (glTemplateDesignerClass *klass)
+gl_template_designer_class_init (glTemplateDesignerClass *class)
 {
-       GObjectClass *object_class = G_OBJECT_CLASS (klass);
+       GObjectClass *object_class = G_OBJECT_CLASS (class);
 
-       gl_debug (DEBUG_TEMPLATE, "");
-       
-       parent_class = g_type_class_peek_parent (klass);
+       gl_template_designer_parent_class = g_type_class_peek_parent (class);
 
        object_class->finalize = gl_template_designer_finalize;         
 }
 
+
 static void
-gl_template_designer_init (glTemplateDesigner *dlg)
+gl_template_designer_init (glTemplateDesigner *dialog)
 {
-       gl_debug (DEBUG_TEMPLATE, "START");
+        static gchar      *object_ids[] = { "start_page",
+                                            "name_page",
+                                            "pg_size_page",
+                                            "shape_page",
+                                            "rect_size_page",
+                                            "round_size_page",
+                                            "cd_size_page",
+                                            "nlayouts_page",
+                                            "layout_page",
+                                            "finish_page",
+                                            "adjustment1",  "adjustment2",  "adjustment3",
+                                            "adjustment4",  "adjustment5",  "adjustment6",
+                                            "adjustment7",  "adjustment8",  "adjustment9",
+                                            "adjustment10", "adjustment11", "adjustment12",
+                                            "adjustment13", "adjustment14", "adjustment15",
+                                            "adjustment16", "adjustment17", "adjustment18",
+                                            "adjustment19", "adjustment20", "adjustment21",
+                                            "adjustment22", "adjustment23", "adjustment24",
+                                            "adjustment25", "adjustment26", "adjustment27",
+                                            "adjustment28", "adjustment29", "adjustment30",
+                                            NULL };
+        GError            *error = NULL;
 
-       dlg->priv = g_new0 (glTemplateDesignerPrivate, 1);
+       gl_debug (DEBUG_TEMPLATE, "START");
 
-       dlg->priv->gui = glade_xml_new (GLABELS_GLADE_DIR "template-designer.glade",
-                                       "druid",
-                                       NULL);
+       dialog->priv = g_new0 (glTemplateDesignerPrivate, 1);
 
-       if (!dlg->priv->gui) {
-               g_warning ("Could not open template-designer.glade, reinstall glabels!");
+        dialog->priv->builder = gtk_builder_new ();
+        gtk_builder_add_objects_from_file (dialog->priv->builder,
+                                           GLABELS_BUILDER_DIR "template-designer.builder",
+                                           object_ids,
+                                           &error);
+       if (error) {
+               g_critical ("%s\n\ngLabels may not be installed correctly!", error->message);
+                g_error_free (error);
                return;
        }
 
        gl_debug (DEBUG_TEMPLATE, "END");
+
+        return;
 }
 
+
 static void 
 gl_template_designer_finalize (GObject *object)
 {
-       glTemplateDesigner* dlg;
+       glTemplateDesigner* dialog = GL_TEMPLATE_DESIGNER (object);
        
        gl_debug (DEBUG_TEMPLATE, "START");
 
        g_return_if_fail (object != NULL);
-       
-       dlg = GL_TEMPLATE_DESIGNER (object);
-
-       g_return_if_fail (GL_IS_TEMPLATE_DESIGNER (dlg));
-       g_return_if_fail (dlg->priv != NULL);
+       g_return_if_fail (GL_IS_TEMPLATE_DESIGNER (dialog));
+       g_return_if_fail (dialog->priv != NULL);
 
-       G_OBJECT_CLASS (parent_class)->finalize (object);
+        if (dialog->priv->builder)
+        {
+                g_object_unref (dialog->priv->builder);
+        }
+       g_free (dialog->priv);
 
-       g_free (dlg->priv);
+       G_OBJECT_CLASS (gl_template_designer_parent_class)->finalize (object);
 
        gl_debug (DEBUG_TEMPLATE, "END");
 }
 
+
 /*****************************************************************************/
 /* NEW preferences dialog.                                                   */
 /*****************************************************************************/
 GtkWidget*
 gl_template_designer_new (GtkWindow *parent)
 {
-       GtkWidget *dlg;
+       GtkWidget *dialog;
 
        gl_debug (DEBUG_TEMPLATE, "START");
 
-       dlg = GTK_WIDGET (g_object_new (GL_TYPE_TEMPLATE_DESIGNER, NULL));
+       dialog = GTK_WIDGET (g_object_new (GL_TYPE_TEMPLATE_DESIGNER, NULL));
 
        if (parent)
-               gtk_window_set_transient_for (GTK_WINDOW (dlg), parent);
+               gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
        
-       gl_template_designer_construct (GL_TEMPLATE_DESIGNER(dlg));
+       gl_template_designer_construct (GL_TEMPLATE_DESIGNER(dialog));
 
 
        gl_debug (DEBUG_TEMPLATE, "END");
 
-       return dlg;
+       return dialog;
 }
 
+
 /*---------------------------------------------------------------------------*/
 /* PRIVATE.  Construct composite widget.                                     */
 /*---------------------------------------------------------------------------*/
 static void
-gl_template_designer_construct (glTemplateDesigner *dlg)
+gl_template_designer_construct (glTemplateDesigner *dialog)
 {
        GdkPixbuf  *logo;
 
-       g_return_if_fail (dlg && GL_IS_TEMPLATE_DESIGNER (dlg));
-       g_return_if_fail (dlg->priv != NULL);
+       gl_debug (DEBUG_TEMPLATE, "START");
+
+       g_return_if_fail (dialog && GL_IS_TEMPLATE_DESIGNER (dialog));
+       g_return_if_fail (dialog->priv != NULL);
 
        /* Initialize units stuff from prefs */
-       dlg->priv->units_string    = gl_prefs_get_units_string ();
-        dlg->priv->units_per_point = gl_prefs_get_units_per_point ();
-        dlg->priv->climb_rate      = gl_prefs_get_units_step_size ();
-        dlg->priv->digits          = gl_prefs_get_units_precision ();
+       dialog->priv->units_string    = gl_prefs_get_units_string ();
+        dialog->priv->units_per_point = gl_prefs_get_units_per_point ();
+        dialog->priv->climb_rate      = gl_prefs_get_units_step_size ();
+        dialog->priv->digits          = gl_prefs_get_units_precision ();
 
-       gtk_window_set_title (GTK_WINDOW(dlg), _("gLabels Template Designer"));
+       gtk_window_set_title (GTK_WINDOW(dialog), _("gLabels Template Designer"));
 
        logo = gdk_pixbuf_new_from_file (ICON_PIXMAP, NULL);
 
-       dlg->priv->druid = glade_xml_get_widget (dlg->priv->gui, "druid");
-       gtk_container_add (GTK_CONTAINER(dlg), dlg->priv->druid);
-
-       construct_start_page (dlg, logo);
-       construct_name_page (dlg, logo);
-       construct_pg_size_page (dlg, logo);
-       construct_shape_page (dlg, logo);
-       construct_rect_size_page (dlg, logo);
-       construct_round_size_page (dlg, logo);
-       construct_cd_size_page (dlg, logo);
-       construct_nlayouts_page (dlg, logo);
-       construct_layout_page (dlg, logo);
-       construct_finish_page (dlg, logo);
-
-       /* Cancel button */
-       g_signal_connect_swapped (G_OBJECT(dlg->priv->druid), "cancel",
-                                 G_CALLBACK(cancel_cb), dlg);
-
-        gtk_widget_show_all (GTK_WIDGET(dlg));   
+        /* Costruct and append pages (must be same order as PAGE_NUM enums. */
+       construct_start_page (dialog, logo);
+       construct_name_page (dialog, logo);
+       construct_pg_size_page (dialog, logo);
+       construct_shape_page (dialog, logo);
+       construct_rect_size_page (dialog, logo);
+       construct_round_size_page (dialog, logo);
+       construct_cd_size_page (dialog, logo);
+       construct_nlayouts_page (dialog, logo);
+       construct_layout_page (dialog, logo);
+       construct_finish_page (dialog, logo);
+
+        gtk_assistant_set_forward_page_func (GTK_ASSISTANT (dialog),
+                                             forward_page_function,
+                                             dialog,
+                                             NULL);
+
+       /* signals */
+       g_signal_connect_swapped (G_OBJECT(dialog), "cancel",
+                                 G_CALLBACK(cancel_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog), "apply",
+                                 G_CALLBACK(apply_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog), "close",
+                                 G_CALLBACK(close_cb), dialog);
+       g_signal_connect (G_OBJECT(dialog), "prepare",
+                          G_CALLBACK(prepare_cb), NULL);
+
+        gtk_widget_show_all (GTK_WIDGET(dialog));   
+
+       gl_debug (DEBUG_TEMPLATE, "END");
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Construct start page.                                          */
 /*--------------------------------------------------------------------------*/
 static void
-construct_start_page (glTemplateDesigner      *dlg,
+construct_start_page (glTemplateDesigner      *dialog,
                      GdkPixbuf               *logo)
 {
-       dlg->priv->start_page =
-               glade_xml_get_widget (dlg->priv->gui, "start_page");
+       gl_debug (DEBUG_TEMPLATE, "START");
+
+        gl_util_get_builder_widgets (dialog->priv->builder,
+                                     "start_page", &dialog->priv->start_page,
+                                     NULL);
+
+        gtk_assistant_append_page (GTK_ASSISTANT (dialog),
+                                   dialog->priv->start_page);
+
+        gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
+                                      dialog->priv->start_page,
+                                      _("Welcome"));
+        gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
+                                             dialog->priv->start_page,
+                                             logo);
+        gtk_assistant_set_page_type (GTK_ASSISTANT (dialog),
+                                     dialog->priv->start_page,
+                                     GTK_ASSISTANT_PAGE_INTRO);
+        gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
+                                         dialog->priv->start_page,
+                                         TRUE);
 
-       construct_edge_page_boilerplate (dlg,
-                                        GNOME_DRUID_PAGE_EDGE(dlg->priv->start_page),
-                                        logo);
+       gl_debug (DEBUG_TEMPLATE, "END");
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Construct name page.                                           */
 /*--------------------------------------------------------------------------*/
 static void
-construct_name_page (glTemplateDesigner      *dlg,
+construct_name_page (glTemplateDesigner      *dialog,
                     GdkPixbuf               *logo)
 {
-       dlg->priv->name_page =
-               glade_xml_get_widget (dlg->priv->gui, "name_page");
+       gl_debug (DEBUG_TEMPLATE, "START");
+
+        gl_util_get_builder_widgets (dialog->priv->builder,
+                                     "name_page",          &dialog->priv->name_page,
+                                     "brand_entry",        &dialog->priv->brand_entry,
+                                     "part_num_entry",     &dialog->priv->part_num_entry,
+                                     "name_warning_image", &dialog->priv->name_warning_image,
+                                     "name_warning_label", &dialog->priv->name_warning_label,
+                                     "description_entry",  &dialog->priv->description_entry,
+                                     NULL);
+
+
+        gtk_assistant_append_page (GTK_ASSISTANT (dialog),
+                                   dialog->priv->name_page);
 
-       /* Name Page Widgets */
-       dlg->priv->brand_entry =
-               glade_xml_get_widget (dlg->priv->gui, "brand_entry");
-       dlg->priv->part_num_entry =
-               glade_xml_get_widget (dlg->priv->gui, "part_num_entry");
-       dlg->priv->description_entry =
-               glade_xml_get_widget (dlg->priv->gui, "description_entry");
+        gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
+                                      dialog->priv->name_page,
+                                      _("Name and Description"));
+        gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
+                                             dialog->priv->name_page,
+                                             logo);
 
        /* Connect a handler that listens for changes in these widgets */
        /* This controls whether we can progress to the next page. */
-       g_signal_connect_swapped (G_OBJECT(dlg->priv->brand_entry), "changed",
-                                 G_CALLBACK(name_page_changed_cb), dlg);
-       g_signal_connect_swapped (G_OBJECT(dlg->priv->part_num_entry), "changed",
-                                 G_CALLBACK(name_page_changed_cb), dlg);
-       g_signal_connect_swapped (G_OBJECT(dlg->priv->description_entry), "changed",
-                                 G_CALLBACK(name_page_changed_cb), dlg);
-
-       /* Use this same handler to prepare the page. */
-       g_signal_connect_data (G_OBJECT(dlg->priv->name_page), "prepare",
-                              G_CALLBACK(name_page_changed_cb), dlg,
-                              NULL, (G_CONNECT_AFTER|G_CONNECT_SWAPPED));
-
-       construct_page_boilerplate (dlg,
-                                   GNOME_DRUID_PAGE_STANDARD(dlg->priv->name_page),
-                                   logo);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->brand_entry), "changed",
+                                 G_CALLBACK(name_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->part_num_entry), "changed",
+                                 G_CALLBACK(name_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->description_entry), "changed",
+                                 G_CALLBACK(name_page_changed_cb), dialog);
+
+       gl_debug (DEBUG_TEMPLATE, "END");
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE. Construct page size page.                                       */
 /*--------------------------------------------------------------------------*/
 static void
-construct_pg_size_page (glTemplateDesigner      *dlg,
+construct_pg_size_page (glTemplateDesigner      *dialog,
                        GdkPixbuf               *logo)
 {
-       GList *page_sizes;
-       const gchar *default_page_size_id;
-       gchar       *default_page_size_name;
-
-       dlg->priv->pg_size_page =
-               glade_xml_get_widget (dlg->priv->gui, "pg_size_page");
-
-       /* Page Size Page Widgets */
-       dlg->priv->pg_size_combo =
-               glade_xml_get_widget (dlg->priv->gui, "pg_size_combo");
-       dlg->priv->pg_size_entry =
-               glade_xml_get_widget (dlg->priv->gui, "pg_size_entry");
-       dlg->priv->pg_w_spin =
-               glade_xml_get_widget (dlg->priv->gui, "pg_w_spin");
-       dlg->priv->pg_h_spin =
-               glade_xml_get_widget (dlg->priv->gui, "pg_h_spin");
-       dlg->priv->pg_w_units_label =
-               glade_xml_get_widget (dlg->priv->gui, "pg_w_units_label");
-       dlg->priv->pg_h_units_label =
-               glade_xml_get_widget (dlg->priv->gui, "pg_h_units_label");
+       GList           *page_sizes;
+       const gchar     *default_page_size_id;
+       gchar           *default_page_size_name;
+
+       gl_debug (DEBUG_TEMPLATE, "START");
+
+        gl_util_get_builder_widgets (dialog->priv->builder,
+                                     "pg_size_page",     &dialog->priv->pg_size_page,
+                                     "pg_size_combo",    &dialog->priv->pg_size_combo,
+                                     "pg_w_spin",        &dialog->priv->pg_w_spin,
+                                     "pg_h_spin",        &dialog->priv->pg_h_spin,
+                                     "pg_w_units_label", &dialog->priv->pg_w_units_label,
+                                     "pg_h_units_label", &dialog->priv->pg_h_units_label,
+                                     NULL);
+
+
+       gl_util_combo_box_add_text_model (GTK_COMBO_BOX (dialog->priv->pg_size_combo));
+
+        gtk_assistant_append_page (GTK_ASSISTANT (dialog),
+                                   dialog->priv->pg_size_page);
+
+        gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
+                                      dialog->priv->pg_size_page,
+                                      _("Page Size"));
+        gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
+                                             dialog->priv->pg_size_page,
+                                             logo);
+        gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
+                                         dialog->priv->pg_size_page,
+                                         TRUE);
 
        /* Load page size combo */
-       page_sizes = gl_paper_get_name_list ();
-       gtk_combo_set_popdown_strings (GTK_COMBO(dlg->priv->pg_size_combo), page_sizes);
-       gl_paper_free_name_list (&page_sizes);
+       page_sizes = lgl_db_get_paper_name_list ();
+       gl_util_combo_box_set_strings (GTK_COMBO_BOX (dialog->priv->pg_size_combo), page_sizes);
+       lgl_db_free_paper_name_list (page_sizes);
        default_page_size_id = gl_prefs_get_page_size ();
-       default_page_size_name = gl_paper_lookup_name_from_id (default_page_size_id);
-       gtk_entry_set_text (GTK_ENTRY(dlg->priv->pg_size_entry), default_page_size_name);
+       default_page_size_name = lgl_db_lookup_paper_name_from_id (default_page_size_id);
+       gl_util_combo_box_set_active_text (GTK_COMBO_BOX (dialog->priv->pg_size_combo), default_page_size_name);
        g_free (default_page_size_name);
 
        /* Apply units to spinbuttons and units labels. */
-        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->pg_w_spin),
-                                   dlg->priv->digits);
-        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->pg_w_spin),
-                                        dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
-        gtk_label_set_text (GTK_LABEL(dlg->priv->pg_w_units_label),
-                           dlg->priv->units_string);
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->pg_w_spin),
-                                   0.0, MAX_PAGE_DIM_POINTS*dlg->priv->units_per_point);
-        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->pg_h_spin),
-                                   dlg->priv->digits);
-        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->pg_h_spin),
-                                        dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
-        gtk_label_set_text (GTK_LABEL(dlg->priv->pg_h_units_label),
-                           dlg->priv->units_string);
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->pg_h_spin),
-                                   0.0, MAX_PAGE_DIM_POINTS*dlg->priv->units_per_point);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->pg_w_units_label),
+                           dialog->priv->units_string);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->pg_w_spin),
+                                   0.0, MAX_PAGE_DIM_POINTS*dialog->priv->units_per_point);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->pg_h_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->pg_h_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->pg_h_units_label),
+                           dialog->priv->units_string);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->pg_h_spin),
+                                   0.0, MAX_PAGE_DIM_POINTS*dialog->priv->units_per_point);
 
        /* Connect a handler that listens for changes in these widgets */
        /* This controls sensitivity of related widgets. */
-       g_signal_connect_swapped (G_OBJECT(dlg->priv->pg_size_entry), "changed",
-                                 G_CALLBACK(pg_size_page_changed_cb), dlg);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->pg_size_combo), "changed",
+                                 G_CALLBACK(pg_size_page_changed_cb), dialog);
 
-       /* Use this same handler to prepare the page. */
-       g_signal_connect_data (G_OBJECT(dlg->priv->pg_size_page), "prepare",
-                              G_CALLBACK(pg_size_page_changed_cb), dlg,
-                              NULL, (G_CONNECT_AFTER|G_CONNECT_SWAPPED));
-
-       construct_page_boilerplate (dlg,
-                                   GNOME_DRUID_PAGE_STANDARD(dlg->priv->pg_size_page),
-                                   logo);
+       gl_debug (DEBUG_TEMPLATE, "END");
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Construct shape page.                                          */
 /*--------------------------------------------------------------------------*/
 static void
-construct_shape_page (glTemplateDesigner      *dlg,
+construct_shape_page (glTemplateDesigner      *dialog,
                      GdkPixbuf               *logo)
 {
-       dlg->priv->shape_page =
-               glade_xml_get_widget (dlg->priv->gui, "shape_page");
-
-       /* Shape Page Widgets */
-       dlg->priv->shape_rect_radio =
-               glade_xml_get_widget (dlg->priv->gui, "shape_rect_radio");
-       dlg->priv->shape_round_radio =
-               glade_xml_get_widget (dlg->priv->gui, "shape_round_radio");
-       dlg->priv->shape_cd_radio =
-               glade_xml_get_widget (dlg->priv->gui, "shape_cd_radio");
-
-       construct_page_boilerplate (dlg,
-                                   GNOME_DRUID_PAGE_STANDARD(dlg->priv->shape_page),
-                                   logo);
+       gl_debug (DEBUG_TEMPLATE, "START");
+
+        gl_util_get_builder_widgets (dialog->priv->builder,
+                                     "shape_page",        &dialog->priv->shape_page,
+                                     "shape_rect_radio",  &dialog->priv->shape_rect_radio,
+                                     "shape_round_radio", &dialog->priv->shape_round_radio,
+                                     "shape_cd_radio",    &dialog->priv->shape_cd_radio,
+                                     NULL);
+
+
+        gtk_assistant_append_page (GTK_ASSISTANT (dialog),
+                                   dialog->priv->shape_page);
+
+        gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
+                                      dialog->priv->shape_page,
+                                      _("Label or Card Shape"));
+        gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
+                                             dialog->priv->shape_page,
+                                             logo);
+        gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
+                                         dialog->priv->shape_page,
+                                         TRUE);
+
+       gl_debug (DEBUG_TEMPLATE, "END");
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Construct rect size page.                                      */
 /*--------------------------------------------------------------------------*/
 static void
-construct_rect_size_page (glTemplateDesigner      *dlg,
+construct_rect_size_page (glTemplateDesigner      *dialog,
                          GdkPixbuf               *logo)
 {
-       GdkPixbuf *pixbuf;
-
-       dlg->priv->rect_size_page =
-               glade_xml_get_widget (dlg->priv->gui, "rect_size_page");
-
-       /* Rect Size Page Widgets */
-       dlg->priv->rect_image =
-               glade_xml_get_widget (dlg->priv->gui, "rect_image");
-       dlg->priv->rect_w_spin =
-               glade_xml_get_widget (dlg->priv->gui, "rect_w_spin");
-       dlg->priv->rect_h_spin =
-               glade_xml_get_widget (dlg->priv->gui, "rect_h_spin");
-       dlg->priv->rect_r_spin =
-               glade_xml_get_widget (dlg->priv->gui, "rect_r_spin");
-       dlg->priv->rect_waste_spin =
-               glade_xml_get_widget (dlg->priv->gui, "rect_waste_spin");
-       dlg->priv->rect_margin_spin =
-               glade_xml_get_widget (dlg->priv->gui, "rect_margin_spin");
-       dlg->priv->rect_w_units_label =
-               glade_xml_get_widget (dlg->priv->gui, "rect_w_units_label");
-       dlg->priv->rect_h_units_label =
-               glade_xml_get_widget (dlg->priv->gui, "rect_h_units_label");
-       dlg->priv->rect_r_units_label =
-               glade_xml_get_widget (dlg->priv->gui, "rect_r_units_label");
-       dlg->priv->rect_waste_units_label =
-               glade_xml_get_widget (dlg->priv->gui, "rect_waste_units_label");
-       dlg->priv->rect_margin_units_label =
-               glade_xml_get_widget (dlg->priv->gui, "rect_margin_units_label");
+       GdkPixbuf       *pixbuf;
+
+       gl_debug (DEBUG_TEMPLATE, "START");
+
+        gl_util_get_builder_widgets (dialog->priv->builder,
+                                     "rect_size_page",           &dialog->priv->rect_size_page,
+                                     "rect_image",               &dialog->priv->rect_image,
+                                     "rect_w_spin",              &dialog->priv->rect_w_spin,
+                                     "rect_h_spin",              &dialog->priv->rect_h_spin,
+                                     "rect_r_spin",              &dialog->priv->rect_r_spin,
+                                     "rect_x_waste_spin",        &dialog->priv->rect_x_waste_spin,
+                                     "rect_y_waste_spin",        &dialog->priv->rect_y_waste_spin,
+                                     "rect_margin_spin",         &dialog->priv->rect_margin_spin,
+                                     "rect_w_units_label",       &dialog->priv->rect_w_units_label,
+                                     "rect_h_units_label",       &dialog->priv->rect_h_units_label,
+                                     "rect_r_units_label",       &dialog->priv->rect_r_units_label,
+                                     "rect_x_waste_units_label", &dialog->priv->rect_x_waste_units_label,
+                                     "rect_y_waste_units_label", &dialog->priv->rect_y_waste_units_label,
+                                     "rect_margin_units_label",  &dialog->priv->rect_margin_units_label,
+                                     NULL);
+
+
+        gtk_assistant_append_page (GTK_ASSISTANT (dialog),
+                                   dialog->priv->rect_size_page);
+
+        gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
+                                      dialog->priv->rect_size_page,
+                                      _("Label or Card Size"));
+        gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
+                                             dialog->priv->rect_size_page,
+                                             logo);
+        gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
+                                         dialog->priv->rect_size_page,
+                                         TRUE);
 
        /* Initialize illustration. */
        pixbuf = gdk_pixbuf_new_from_file (EX_RECT_IMAGE, NULL);
-       gtk_image_set_from_pixbuf (GTK_IMAGE(dlg->priv->rect_image), pixbuf);
+       gtk_image_set_from_pixbuf (GTK_IMAGE(dialog->priv->rect_image), pixbuf);
 
        /* Apply units to spinbuttons and units labels. */
-        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->rect_w_spin),
-                                   dlg->priv->digits);
-        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->rect_w_spin),
-                                        dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
-        gtk_label_set_text (GTK_LABEL(dlg->priv->rect_w_units_label),
-                           dlg->priv->units_string);
-        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->rect_h_spin),
-                                   dlg->priv->digits);
-        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->rect_h_spin),
-                                        dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
-        gtk_label_set_text (GTK_LABEL(dlg->priv->rect_h_units_label),
-                           dlg->priv->units_string);
-        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->rect_r_spin),
-                                   dlg->priv->digits);
-        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->rect_r_spin),
-                                        dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
-        gtk_label_set_text (GTK_LABEL(dlg->priv->rect_r_units_label),
-                           dlg->priv->units_string);
-        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->rect_waste_spin),
-                                   dlg->priv->digits);
-        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->rect_waste_spin),
-                                        dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
-        gtk_label_set_text (GTK_LABEL(dlg->priv->rect_waste_units_label),
-                           dlg->priv->units_string);
-        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->rect_margin_spin),
-                                   dlg->priv->digits);
-        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->rect_margin_spin),
-                                        dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
-        gtk_label_set_text (GTK_LABEL(dlg->priv->rect_margin_units_label),
-                           dlg->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->rect_w_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->rect_w_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->rect_w_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->rect_h_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->rect_h_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->rect_h_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->rect_r_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->rect_r_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->rect_r_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->rect_x_waste_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->rect_x_waste_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->rect_x_waste_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->rect_y_waste_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->rect_y_waste_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->rect_y_waste_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->rect_margin_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->rect_margin_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->rect_margin_units_label),
+                           dialog->priv->units_string);
 
        /* Load some realistic defaults. */
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->rect_w_spin),
-                                  DEFAULT_RECT_W * dlg->priv->units_per_point);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->rect_h_spin),
-                                  DEFAULT_RECT_H * dlg->priv->units_per_point);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->rect_r_spin),
-                                  DEFAULT_RECT_R * dlg->priv->units_per_point);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->rect_waste_spin),
-                                  DEFAULT_RECT_WASTE * dlg->priv->units_per_point);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->rect_margin_spin),
-                                  DEFAULT_MARGIN * dlg->priv->units_per_point);
-
-       /* Handler to prepare the page. */
-       g_signal_connect_data (G_OBJECT(dlg->priv->rect_size_page), "prepare",
-                              G_CALLBACK(rect_size_page_prepare_cb), dlg,
-                              NULL, (G_CONNECT_AFTER|G_CONNECT_SWAPPED));
-
-       construct_page_boilerplate (dlg,
-                                   GNOME_DRUID_PAGE_STANDARD(dlg->priv->rect_size_page),
-                                   logo);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_w_spin),
+                                  DEFAULT_RECT_W * dialog->priv->units_per_point);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_h_spin),
+                                  DEFAULT_RECT_H * dialog->priv->units_per_point);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_r_spin),
+                                  DEFAULT_RECT_R * dialog->priv->units_per_point);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_x_waste_spin),
+                                  DEFAULT_RECT_WASTE * dialog->priv->units_per_point);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_y_waste_spin),
+                                  DEFAULT_RECT_WASTE * dialog->priv->units_per_point);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_margin_spin),
+                                  DEFAULT_MARGIN * dialog->priv->units_per_point);
+
+       gl_debug (DEBUG_TEMPLATE, "END");
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Construct round size page.                                     */
 /*--------------------------------------------------------------------------*/
 static void
-construct_round_size_page (glTemplateDesigner      *dlg,
+construct_round_size_page (glTemplateDesigner      *dialog,
                           GdkPixbuf               *logo)
 {
-       GdkPixbuf *pixbuf;
-
-       dlg->priv->round_size_page =
-               glade_xml_get_widget (dlg->priv->gui, "round_size_page");
-
-       /* Round Size Page Widgets */
-       dlg->priv->round_image =
-               glade_xml_get_widget (dlg->priv->gui, "round_image");
-       dlg->priv->round_r_spin =
-               glade_xml_get_widget (dlg->priv->gui, "round_r_spin");
-       dlg->priv->round_waste_spin =
-               glade_xml_get_widget (dlg->priv->gui, "round_waste_spin");
-       dlg->priv->round_margin_spin =
-               glade_xml_get_widget (dlg->priv->gui, "round_margin_spin");
-       dlg->priv->round_r_units_label =
-               glade_xml_get_widget (dlg->priv->gui, "round_r_units_label");
-       dlg->priv->round_waste_units_label =
-               glade_xml_get_widget (dlg->priv->gui, "round_waste_units_label");
-       dlg->priv->round_margin_units_label =
-               glade_xml_get_widget (dlg->priv->gui, "round_margin_units_label");
+       GdkPixbuf       *pixbuf;
+
+       gl_debug (DEBUG_TEMPLATE, "START");
+
+        gl_util_get_builder_widgets (dialog->priv->builder,
+                                     "round_size_page",          &dialog->priv->round_size_page,
+                                     "round_image",              &dialog->priv->round_image,
+                                     "round_r_spin",             &dialog->priv->round_r_spin,
+                                     "round_waste_spin",         &dialog->priv->round_waste_spin,
+                                     "round_margin_spin",        &dialog->priv->round_margin_spin,
+                                     "round_r_units_label",      &dialog->priv->round_r_units_label,
+                                     "round_waste_units_label",  &dialog->priv->round_waste_units_label,
+                                     "round_margin_units_label", &dialog->priv->round_margin_units_label,
+                                     NULL);
+
+
+        gtk_assistant_append_page (GTK_ASSISTANT (dialog),
+                                   dialog->priv->round_size_page);
+
+        gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
+                                      dialog->priv->round_size_page,
+                                      _("Label Size (round)"));
+        gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
+                                             dialog->priv->round_size_page,
+                                             logo);
+        gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
+                                         dialog->priv->round_size_page,
+                                         TRUE);
 
        /* Initialize illustration. */
        pixbuf = gdk_pixbuf_new_from_file (EX_ROUND_IMAGE, NULL);
-       gtk_image_set_from_pixbuf (GTK_IMAGE(dlg->priv->round_image), pixbuf);
+       gtk_image_set_from_pixbuf (GTK_IMAGE(dialog->priv->round_image), pixbuf);
 
        /* Apply units to spinbuttons and units labels. */
-        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->round_r_spin),
-                                   dlg->priv->digits);
-        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->round_r_spin),
-                                        dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
-        gtk_label_set_text (GTK_LABEL(dlg->priv->round_r_units_label),
-                           dlg->priv->units_string);
-        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->round_waste_spin),
-                                   dlg->priv->digits);
-        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->round_waste_spin),
-                                        dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
-        gtk_label_set_text (GTK_LABEL(dlg->priv->round_waste_units_label),
-                           dlg->priv->units_string);
-        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->round_margin_spin),
-                                   dlg->priv->digits);
-        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->round_margin_spin),
-                                        dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
-        gtk_label_set_text (GTK_LABEL(dlg->priv->round_margin_units_label),
-                           dlg->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->round_r_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->round_r_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->round_r_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->round_waste_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->round_waste_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->round_waste_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->round_margin_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->round_margin_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->round_margin_units_label),
+                           dialog->priv->units_string);
 
        /* Load some realistic defaults. */
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->round_r_spin),
-                                  DEFAULT_ROUND_R * dlg->priv->units_per_point);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->round_waste_spin),
-                                  DEFAULT_ROUND_WASTE * dlg->priv->units_per_point);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->round_margin_spin),
-                                  DEFAULT_MARGIN * dlg->priv->units_per_point);
-
-       /* Handler to prepare the page. */
-       g_signal_connect_data (G_OBJECT(dlg->priv->round_size_page), "prepare",
-                              G_CALLBACK(round_size_page_prepare_cb), dlg,
-                              NULL, (G_CONNECT_AFTER|G_CONNECT_SWAPPED));
-
-       construct_page_boilerplate (dlg,
-                                   GNOME_DRUID_PAGE_STANDARD(dlg->priv->round_size_page),
-                                   logo);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->round_r_spin),
+                                  DEFAULT_ROUND_R * dialog->priv->units_per_point);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->round_waste_spin),
+                                  DEFAULT_ROUND_WASTE * dialog->priv->units_per_point);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->round_margin_spin),
+                                  DEFAULT_MARGIN * dialog->priv->units_per_point);
+
+       gl_debug (DEBUG_TEMPLATE, "END");
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Construct CD/DVD size page.                                    */
 /*--------------------------------------------------------------------------*/
 static void
-construct_cd_size_page (glTemplateDesigner      *dlg,
+construct_cd_size_page (glTemplateDesigner      *dialog,
                        GdkPixbuf               *logo)
 {
-       GdkPixbuf *pixbuf;
-
-       dlg->priv->cd_size_page =
-               glade_xml_get_widget (dlg->priv->gui, "cd_size_page");
-
-       /* Cd Size Page Widgets */
-       dlg->priv->cd_image =
-               glade_xml_get_widget (dlg->priv->gui, "cd_image");
-       dlg->priv->cd_radius_spin =
-               glade_xml_get_widget (dlg->priv->gui, "cd_radius_spin");
-       dlg->priv->cd_hole_spin =
-               glade_xml_get_widget (dlg->priv->gui, "cd_hole_spin");
-       dlg->priv->cd_w_spin =
-               glade_xml_get_widget (dlg->priv->gui, "cd_w_spin");
-       dlg->priv->cd_h_spin =
-               glade_xml_get_widget (dlg->priv->gui, "cd_h_spin");
-       dlg->priv->cd_waste_spin =
-               glade_xml_get_widget (dlg->priv->gui, "cd_waste_spin");
-       dlg->priv->cd_margin_spin =
-               glade_xml_get_widget (dlg->priv->gui, "cd_margin_spin");
-       dlg->priv->cd_radius_units_label =
-               glade_xml_get_widget (dlg->priv->gui, "cd_radius_units_label");
-       dlg->priv->cd_hole_units_label =
-               glade_xml_get_widget (dlg->priv->gui, "cd_hole_units_label");
-       dlg->priv->cd_w_units_label =
-               glade_xml_get_widget (dlg->priv->gui, "cd_w_units_label");
-       dlg->priv->cd_h_units_label =
-               glade_xml_get_widget (dlg->priv->gui, "cd_h_units_label");
-       dlg->priv->cd_waste_units_label =
-               glade_xml_get_widget (dlg->priv->gui, "cd_waste_units_label");
-       dlg->priv->cd_margin_units_label =
-               glade_xml_get_widget (dlg->priv->gui, "cd_margin_units_label");
+       GdkPixbuf       *pixbuf;
+
+       gl_debug (DEBUG_TEMPLATE, "START");
+
+        gl_util_get_builder_widgets (dialog->priv->builder,
+                                     "cd_size_page",          &dialog->priv->cd_size_page,
+                                     "cd_image",              &dialog->priv->cd_image,
+                                     "cd_radius_spin",        &dialog->priv->cd_radius_spin,
+                                     "cd_hole_spin",          &dialog->priv->cd_hole_spin,
+                                     "cd_w_spin",             &dialog->priv->cd_w_spin,
+                                     "cd_h_spin",             &dialog->priv->cd_h_spin,
+                                     "cd_waste_spin",         &dialog->priv->cd_waste_spin,
+                                     "cd_margin_spin",        &dialog->priv->cd_margin_spin,
+                                     "cd_radius_units_label", &dialog->priv->cd_radius_units_label,
+                                     "cd_hole_units_label",   &dialog->priv->cd_hole_units_label,
+                                     "cd_w_units_label",      &dialog->priv->cd_w_units_label,
+                                     "cd_h_units_label",      &dialog->priv->cd_h_units_label,
+                                     "cd_waste_units_label",  &dialog->priv->cd_waste_units_label,
+                                     "cd_margin_units_label", &dialog->priv->cd_margin_units_label,
+                                     NULL);
+
+
+        gtk_assistant_append_page (GTK_ASSISTANT (dialog),
+                                   dialog->priv->cd_size_page);
+
+        gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
+                                      dialog->priv->cd_size_page,
+                                      _("Label Size (CD/DVD)"));
+        gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
+                                             dialog->priv->cd_size_page,
+                                             logo);
+        gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
+                                         dialog->priv->cd_size_page,
+                                         TRUE);
 
        /* Initialize illustration. */
        pixbuf = gdk_pixbuf_new_from_file (EX_CD_IMAGE, NULL);
-       gtk_image_set_from_pixbuf (GTK_IMAGE(dlg->priv->cd_image), pixbuf);
+       gtk_image_set_from_pixbuf (GTK_IMAGE(dialog->priv->cd_image), pixbuf);
 
        /* Apply units to spinbuttons and units labels. */
-        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->cd_radius_spin),
-                                   dlg->priv->digits);
-        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->cd_radius_spin),
-                                        dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
-        gtk_label_set_text (GTK_LABEL(dlg->priv->cd_radius_units_label),
-                           dlg->priv->units_string);
-        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->cd_hole_spin),
-                                   dlg->priv->digits);
-        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->cd_hole_spin),
-                                        dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
-        gtk_label_set_text (GTK_LABEL(dlg->priv->cd_hole_units_label),
-                           dlg->priv->units_string);
-        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->cd_w_spin),
-                                   dlg->priv->digits);
-        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->cd_w_spin),
-                                        dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
-        gtk_label_set_text (GTK_LABEL(dlg->priv->cd_w_units_label),
-                           dlg->priv->units_string);
-        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->cd_h_spin),
-                                   dlg->priv->digits);
-        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->cd_h_spin),
-                                        dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
-        gtk_label_set_text (GTK_LABEL(dlg->priv->cd_h_units_label),
-                           dlg->priv->units_string);
-        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->cd_waste_spin),
-                                   dlg->priv->digits);
-        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->cd_waste_spin),
-                                        dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
-        gtk_label_set_text (GTK_LABEL(dlg->priv->cd_waste_units_label),
-                           dlg->priv->units_string);
-        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->cd_margin_spin),
-                                   dlg->priv->digits);
-        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->cd_margin_spin),
-                                        dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
-        gtk_label_set_text (GTK_LABEL(dlg->priv->cd_margin_units_label),
-                           dlg->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->cd_radius_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->cd_radius_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->cd_radius_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->cd_hole_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->cd_hole_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->cd_hole_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->cd_w_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->cd_w_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->cd_w_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->cd_h_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->cd_h_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->cd_h_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->cd_waste_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->cd_waste_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->cd_waste_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->cd_margin_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->cd_margin_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->cd_margin_units_label),
+                           dialog->priv->units_string);
 
        /* Load some realistic defaults. */
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->cd_radius_spin),
-                                  DEFAULT_CD_RADIUS * dlg->priv->units_per_point);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->cd_hole_spin),
-                                  DEFAULT_CD_HOLE * dlg->priv->units_per_point);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->cd_waste_spin),
-                                  DEFAULT_CD_WASTE * dlg->priv->units_per_point);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->cd_margin_spin),
-                                  DEFAULT_MARGIN * dlg->priv->units_per_point);
-
-       /* Handler to prepare the page. */
-       g_signal_connect_data (G_OBJECT(dlg->priv->cd_size_page), "prepare",
-                              G_CALLBACK(cd_size_page_prepare_cb), dlg,
-                              NULL, (G_CONNECT_AFTER|G_CONNECT_SWAPPED));
-
-       construct_page_boilerplate (dlg,
-                                   GNOME_DRUID_PAGE_STANDARD(dlg->priv->cd_size_page),
-                                   logo);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_radius_spin),
+                                  DEFAULT_CD_RADIUS * dialog->priv->units_per_point);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_hole_spin),
+                                  DEFAULT_CD_HOLE * dialog->priv->units_per_point);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_waste_spin),
+                                  DEFAULT_CD_WASTE * dialog->priv->units_per_point);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_margin_spin),
+                                  DEFAULT_MARGIN * dialog->priv->units_per_point);
+
+       gl_debug (DEBUG_TEMPLATE, "END");
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Construct number of layouts page.                              */
 /*--------------------------------------------------------------------------*/
 static void
-construct_nlayouts_page (glTemplateDesigner      *dlg,
+construct_nlayouts_page (glTemplateDesigner      *dialog,
                         GdkPixbuf               *logo)
 {
-       GdkPixbuf *pixbuf;
+       GdkPixbuf       *pixbuf;
 
-       dlg->priv->nlayouts_page =
-               glade_xml_get_widget (dlg->priv->gui, "nlayouts_page");
+       gl_debug (DEBUG_TEMPLATE, "START");
+
+        gl_util_get_builder_widgets (dialog->priv->builder,
+                                     "nlayouts_page",   &dialog->priv->nlayouts_page,
+                                     "nlayouts_image1", &dialog->priv->nlayouts_image1,
+                                     "nlayouts_image2", &dialog->priv->nlayouts_image2,
+                                     "nlayouts_spin",   &dialog->priv->nlayouts_spin,
+                                     NULL);
+
+
+        gtk_assistant_append_page (GTK_ASSISTANT (dialog),
+                                   dialog->priv->nlayouts_page);
+
+        gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
+                                      dialog->priv->nlayouts_page,
+                                      _("Number of Layouts"));
+        gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
+                                             dialog->priv->nlayouts_page,
+                                             logo);
+        gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
+                                         dialog->priv->nlayouts_page,
+                                         TRUE);
+
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->nlayouts_spin),
+                                   1, 2);
 
-       /* Widgets */
-       dlg->priv->nlayouts_image1 =
-               glade_xml_get_widget (dlg->priv->gui, "nlayouts_image1");
-       dlg->priv->nlayouts_image2 =
-               glade_xml_get_widget (dlg->priv->gui, "nlayouts_image2");
-       dlg->priv->nlayouts_spin =
-               glade_xml_get_widget (dlg->priv->gui, "nlayouts_spin");
 
        /* Initialize illustrations. */
        pixbuf = gdk_pixbuf_new_from_file (EX_NLAYOUTS_IMAGE1, NULL);
-       gtk_image_set_from_pixbuf (GTK_IMAGE(dlg->priv->nlayouts_image1), pixbuf);
+       gtk_image_set_from_pixbuf (GTK_IMAGE(dialog->priv->nlayouts_image1), pixbuf);
        pixbuf = gdk_pixbuf_new_from_file (EX_NLAYOUTS_IMAGE2, NULL);
-       gtk_image_set_from_pixbuf (GTK_IMAGE(dlg->priv->nlayouts_image2), pixbuf);
+       gtk_image_set_from_pixbuf (GTK_IMAGE(dialog->priv->nlayouts_image2), pixbuf);
 
-       construct_page_boilerplate (dlg,
-                                   GNOME_DRUID_PAGE_STANDARD(dlg->priv->nlayouts_page),
-                                   logo);
+       gl_debug (DEBUG_TEMPLATE, "END");
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Construct layout page.                                         */
 /*--------------------------------------------------------------------------*/
 static void
-construct_layout_page (glTemplateDesigner      *dlg,
+construct_layout_page (glTemplateDesigner      *dialog,
                       GdkPixbuf               *logo)
 {
-       dlg->priv->layout_page =
-               glade_xml_get_widget (dlg->priv->gui, "layout_page");
-
-       /* Page Size Page Widgets */
-       dlg->priv->layout1_head_label =
-               glade_xml_get_widget (dlg->priv->gui, "layout1_head_label");
-       dlg->priv->layout1_nx_spin =
-               glade_xml_get_widget (dlg->priv->gui, "layout1_nx_spin");
-       dlg->priv->layout1_ny_spin =
-               glade_xml_get_widget (dlg->priv->gui, "layout1_ny_spin");
-       dlg->priv->layout1_x0_spin =
-               glade_xml_get_widget (dlg->priv->gui, "layout1_x0_spin");
-       dlg->priv->layout1_y0_spin =
-               glade_xml_get_widget (dlg->priv->gui, "layout1_y0_spin");
-       dlg->priv->layout1_dx_spin =
-               glade_xml_get_widget (dlg->priv->gui, "layout1_dx_spin");
-       dlg->priv->layout1_dy_spin =
-               glade_xml_get_widget (dlg->priv->gui, "layout1_dy_spin");
-       dlg->priv->layout2_head_label =
-               glade_xml_get_widget (dlg->priv->gui, "layout2_head_label");
-       dlg->priv->layout2_nx_spin =
-               glade_xml_get_widget (dlg->priv->gui, "layout2_nx_spin");
-       dlg->priv->layout2_ny_spin =
-               glade_xml_get_widget (dlg->priv->gui, "layout2_ny_spin");
-       dlg->priv->layout2_x0_spin =
-               glade_xml_get_widget (dlg->priv->gui, "layout2_x0_spin");
-       dlg->priv->layout2_y0_spin =
-               glade_xml_get_widget (dlg->priv->gui, "layout2_y0_spin");
-       dlg->priv->layout2_dx_spin =
-               glade_xml_get_widget (dlg->priv->gui, "layout2_dx_spin");
-       dlg->priv->layout2_dy_spin =
-               glade_xml_get_widget (dlg->priv->gui, "layout2_dy_spin");
-       dlg->priv->layout_x0_units_label =
-               glade_xml_get_widget (dlg->priv->gui, "layout_x0_units_label");
-       dlg->priv->layout_y0_units_label =
-               glade_xml_get_widget (dlg->priv->gui, "layout_y0_units_label");
-       dlg->priv->layout_dx_units_label =
-               glade_xml_get_widget (dlg->priv->gui, "layout_dx_units_label");
-       dlg->priv->layout_dy_units_label =
-               glade_xml_get_widget (dlg->priv->gui, "layout_dy_units_label");
-       dlg->priv->layout_mini_preview =
-               glade_xml_get_widget (dlg->priv->gui, "layout_mini_preview");
-       dlg->priv->layout_test_button =
-               glade_xml_get_widget (dlg->priv->gui, "layout_test_button");
+       gl_debug (DEBUG_TEMPLATE, "START");
+
+        gl_util_get_builder_widgets (dialog->priv->builder,
+                                     "layout_page",           &dialog->priv->layout_page,
+                                     "layout1_head_label",    &dialog->priv->layout1_head_label,
+                                     "layout1_nx_spin",       &dialog->priv->layout1_nx_spin,
+                                     "layout1_ny_spin",       &dialog->priv->layout1_ny_spin,
+                                     "layout1_x0_spin",       &dialog->priv->layout1_x0_spin,
+                                     "layout1_y0_spin",       &dialog->priv->layout1_y0_spin,
+                                     "layout1_dx_spin",       &dialog->priv->layout1_dx_spin,
+                                     "layout1_dy_spin",       &dialog->priv->layout1_dy_spin,
+                                     "layout2_head_label",    &dialog->priv->layout2_head_label,
+                                     "layout2_nx_spin",       &dialog->priv->layout2_nx_spin,
+                                     "layout2_ny_spin",       &dialog->priv->layout2_ny_spin,
+                                     "layout2_x0_spin",       &dialog->priv->layout2_x0_spin,
+                                     "layout2_y0_spin",       &dialog->priv->layout2_y0_spin,
+                                     "layout2_dx_spin",       &dialog->priv->layout2_dx_spin,
+                                     "layout2_dy_spin",       &dialog->priv->layout2_dy_spin,
+                                     "layout_x0_units_label", &dialog->priv->layout_x0_units_label,
+                                     "layout_y0_units_label", &dialog->priv->layout_y0_units_label,
+                                     "layout_dx_units_label", &dialog->priv->layout_dx_units_label,
+                                     "layout_dy_units_label", &dialog->priv->layout_dy_units_label,
+                                     "mini_preview_vbox",     &dialog->priv->mini_preview_vbox,
+                                     "layout_test_button",    &dialog->priv->layout_test_button,
+                                     NULL);
+
+        dialog->priv->layout_mini_preview = gl_mini_preview_new (175, 200);
+        gtk_container_add (GTK_CONTAINER (dialog->priv->mini_preview_vbox),
+                           dialog->priv->layout_mini_preview);
+
+        gtk_assistant_append_page (GTK_ASSISTANT (dialog),
+                                   dialog->priv->layout_page);
+
+        gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
+                                      dialog->priv->layout_page,
+                                      _("Layout(s)"));
+        gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
+                                             dialog->priv->layout_page,
+                                             logo);
+        gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
+                                         dialog->priv->layout_page,
+                                         TRUE);
 
        /* Apply units to spinbuttons and units labels. */
-        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->layout1_x0_spin),
-                                   dlg->priv->digits);
-        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->layout1_x0_spin),
-                                        dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
-        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->layout2_x0_spin),
-                                   dlg->priv->digits);
-        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->layout2_x0_spin),
-                                        dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
-        gtk_label_set_text (GTK_LABEL(dlg->priv->layout_x0_units_label),
-                           dlg->priv->units_string);
-        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->layout1_y0_spin),
-                                   dlg->priv->digits);
-        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->layout1_y0_spin),
-                                        dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
-        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->layout2_y0_spin),
-                                   dlg->priv->digits);
-        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->layout2_y0_spin),
-                                        dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
-        gtk_label_set_text (GTK_LABEL(dlg->priv->layout_y0_units_label),
-                           dlg->priv->units_string);
-        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->layout1_dx_spin),
-                                   dlg->priv->digits);
-        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->layout1_dx_spin),
-                                        dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
-        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->layout2_dx_spin),
-                                   dlg->priv->digits);
-        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->layout2_dx_spin),
-                                        dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
-        gtk_label_set_text (GTK_LABEL(dlg->priv->layout_dx_units_label),
-                           dlg->priv->units_string);
-        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->layout1_dy_spin),
-                                   dlg->priv->digits);
-        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->layout1_dy_spin),
-                                        dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
-        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dlg->priv->layout2_dy_spin),
-                                   dlg->priv->digits);
-        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dlg->priv->layout2_dy_spin),
-                                        dlg->priv->climb_rate, 10.0*dlg->priv->climb_rate);
-        gtk_label_set_text (GTK_LABEL(dlg->priv->layout_dy_units_label),
-                           dlg->priv->units_string);
-
-       /* Adjust preview */
-       gl_wdgt_mini_preview_set_bg_color (GL_WDGT_MINI_PREVIEW(dlg->priv->layout_mini_preview),
-                                          CONTENTS_BG);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->layout1_x0_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->layout1_x0_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->layout2_x0_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->layout2_x0_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->layout_x0_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->layout1_y0_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->layout1_y0_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->layout2_y0_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->layout2_y0_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->layout_y0_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->layout1_dx_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->layout1_dx_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->layout2_dx_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->layout2_dx_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->layout_dx_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->layout1_dy_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->layout1_dy_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->layout2_dy_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->layout2_dy_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->layout_dy_units_label),
+                           dialog->priv->units_string);
 
        /* Connect a handler that listens for changes in these widgets */
        /* This controls sensitivity of related widgets. */
-       g_signal_connect_swapped (G_OBJECT(dlg->priv->layout1_nx_spin), "changed",
-                                 G_CALLBACK(layout_page_changed_cb), dlg);
-       g_signal_connect_swapped (G_OBJECT(dlg->priv->layout1_ny_spin), "changed",
-                                 G_CALLBACK(layout_page_changed_cb), dlg);
-       g_signal_connect_swapped (G_OBJECT(dlg->priv->layout1_x0_spin), "changed",
-                                 G_CALLBACK(layout_page_changed_cb), dlg);
-       g_signal_connect_swapped (G_OBJECT(dlg->priv->layout1_y0_spin), "changed",
-                                 G_CALLBACK(layout_page_changed_cb), dlg);
-       g_signal_connect_swapped (G_OBJECT(dlg->priv->layout1_dx_spin), "changed",
-                                 G_CALLBACK(layout_page_changed_cb), dlg);
-       g_signal_connect_swapped (G_OBJECT(dlg->priv->layout1_dy_spin), "changed",
-                                 G_CALLBACK(layout_page_changed_cb), dlg);
-       g_signal_connect_swapped (G_OBJECT(dlg->priv->layout2_nx_spin), "changed",
-                                 G_CALLBACK(layout_page_changed_cb), dlg);
-       g_signal_connect_swapped (G_OBJECT(dlg->priv->layout2_ny_spin), "changed",
-                                 G_CALLBACK(layout_page_changed_cb), dlg);
-       g_signal_connect_swapped (G_OBJECT(dlg->priv->layout2_x0_spin), "changed",
-                                 G_CALLBACK(layout_page_changed_cb), dlg);
-       g_signal_connect_swapped (G_OBJECT(dlg->priv->layout2_y0_spin), "changed",
-                                 G_CALLBACK(layout_page_changed_cb), dlg);
-       g_signal_connect_swapped (G_OBJECT(dlg->priv->layout2_dx_spin), "changed",
-                                 G_CALLBACK(layout_page_changed_cb), dlg);
-       g_signal_connect_swapped (G_OBJECT(dlg->priv->layout2_dy_spin), "changed",
-                                 G_CALLBACK(layout_page_changed_cb), dlg);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout1_nx_spin), "changed",
+                                 G_CALLBACK(layout_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout1_ny_spin), "changed",
+                                 G_CALLBACK(layout_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout1_x0_spin), "changed",
+                                 G_CALLBACK(layout_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout1_y0_spin), "changed",
+                                 G_CALLBACK(layout_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout1_dx_spin), "changed",
+                                 G_CALLBACK(layout_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout1_dy_spin), "changed",
+                                 G_CALLBACK(layout_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout2_nx_spin), "changed",
+                                 G_CALLBACK(layout_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout2_ny_spin), "changed",
+                                 G_CALLBACK(layout_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout2_x0_spin), "changed",
+                                 G_CALLBACK(layout_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout2_y0_spin), "changed",
+                                 G_CALLBACK(layout_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout2_dx_spin), "changed",
+                                 G_CALLBACK(layout_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout2_dy_spin), "changed",
+                                 G_CALLBACK(layout_page_changed_cb), dialog);
 
 
        /* Print button */
-       g_signal_connect_swapped (G_OBJECT(dlg->priv->layout_test_button), "clicked",
-                                 G_CALLBACK(print_test_cb), dlg);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout_test_button), "clicked",
+                                 G_CALLBACK(print_test_cb), dialog);
 
-       /* Handler to prepare the page. */
-       g_signal_connect_data (G_OBJECT(dlg->priv->layout_page), "prepare",
-                              G_CALLBACK(layout_page_prepare_cb), dlg,
-                              NULL, (G_CONNECT_AFTER|G_CONNECT_SWAPPED));
-
-       construct_page_boilerplate (dlg,
-                                   GNOME_DRUID_PAGE_STANDARD(dlg->priv->layout_page),
-                                   logo);
+       gl_debug (DEBUG_TEMPLATE, "END");
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Construct finish page.                                         */
 /*--------------------------------------------------------------------------*/
 static void
-construct_finish_page (glTemplateDesigner      *dlg,
+construct_finish_page (glTemplateDesigner      *dialog,
                       GdkPixbuf               *logo)
 {
+       gl_debug (DEBUG_TEMPLATE, "START");
+
+        gl_util_get_builder_widgets (dialog->priv->builder,
+                                     "finish_page", &dialog->priv->finish_page,
+                                     NULL);
+
 
-       dlg->priv->finish_page =
-               glade_xml_get_widget (dlg->priv->gui, "finish_page");
+        gtk_assistant_append_page (GTK_ASSISTANT (dialog),
+                                   dialog->priv->finish_page);
 
-       /* Accept button */
-       g_signal_connect_swapped (G_OBJECT(dlg->priv->finish_page), "finish",
-                                 G_CALLBACK(finish_cb), dlg);
+        gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
+                                      dialog->priv->finish_page,
+                                      _("Design Completed"));
+        gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
+                                             dialog->priv->finish_page,
+                                             logo);
+        gtk_assistant_set_page_type (GTK_ASSISTANT (dialog),
+                                     dialog->priv->finish_page,
+                                     GTK_ASSISTANT_PAGE_CONFIRM);
+        gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
+                                         dialog->priv->finish_page,
+                                         TRUE);
 
-       construct_edge_page_boilerplate (dlg,
-                                        GNOME_DRUID_PAGE_EDGE(dlg->priv->start_page),
-                                        logo);
+       gl_debug (DEBUG_TEMPLATE, "END");
 }
 
+
 /*--------------------------------------------------------------------------*/
-/* PRIVATE.  Common construction tasks for start and finish page.           */
+/* PRIVATE.  cancel callback.                                               */
 /*--------------------------------------------------------------------------*/
 static void
-construct_edge_page_boilerplate (glTemplateDesigner      *dlg,
-                                GnomeDruidPageEdge      *page,
-                                GdkPixbuf               *logo)
+cancel_cb (glTemplateDesigner *dialog)
 {
-       gnome_druid_page_edge_set_logo (page, logo);
+                                                                               
+       gtk_widget_destroy (GTK_WIDGET(dialog));
+
 }
 
+
 /*--------------------------------------------------------------------------*/
-/* PRIVATE.  Common construction tasks for all other pages.                 */
+/* PRIVATE.  apply callback                                                 */
 /*--------------------------------------------------------------------------*/
 static void
-construct_page_boilerplate (glTemplateDesigner      *dlg,
-                           GnomeDruidPageStandard  *page,
-                           GdkPixbuf               *logo)
+apply_cb (glTemplateDesigner *dialog)
 {
-       gnome_druid_page_standard_set_logo (page, logo);
-
-       g_signal_connect (G_OBJECT(page), "next", G_CALLBACK(next_cb), dlg);
-       g_signal_connect (G_OBJECT(page), "back", G_CALLBACK(back_cb), dlg);
+       lglTemplate *template;
+        gchar       *name;
+       
+       template = build_template (dialog);
+       lgl_db_register_template (template);
+        name = lgl_template_get_name (template);
+        gl_mini_preview_pixbuf_cache_add_by_name (name);
+        g_free (name);
 }
 
+                         
 /*--------------------------------------------------------------------------*/
-/* PRIVATE.  Cancel druid.                                                  */
+/* PRIVATE.  close callback                                                 */
 /*--------------------------------------------------------------------------*/
 static void
-cancel_cb (glTemplateDesigner *dlg)
+close_cb (glTemplateDesigner *dialog)
 {
                                                                                
-       gtk_widget_destroy (GTK_WIDGET(dlg));
+       gtk_widget_destroy (GTK_WIDGET(dialog));
 
 }
+
                          
 /*--------------------------------------------------------------------------*/
-/* PRIVATE.  Widget on name page "changed" callback.                        */
+/* PRIVATE.  prepare page callback                                          */
 /*--------------------------------------------------------------------------*/
 static void
-name_page_changed_cb (glTemplateDesigner *dlg)
+prepare_cb (glTemplateDesigner      *dialog,
+            GtkWidget               *page)
 {
-       gchar *brand, *part_num, *desc;
+        gint page_num;
+
+        page_num = gtk_assistant_get_current_page (GTK_ASSISTANT (dialog));
+
+        switch (page_num)
+        {
+
+        case NAME_PAGE_NUM:
+                name_page_changed_cb (dialog); /* Use to prepare */
+                break;
 
-       brand    = gtk_editable_get_chars (GTK_EDITABLE(dlg->priv->brand_entry), 0, -1);
-       part_num = gtk_editable_get_chars (GTK_EDITABLE(dlg->priv->part_num_entry), 0, -1);
-       desc     = gtk_editable_get_chars (GTK_EDITABLE(dlg->priv->description_entry), 0, -1);
+        case PG_SIZE_PAGE_NUM:
+                pg_size_page_changed_cb (dialog); /* Use to prepare */
+                break;
 
-       if (brand && brand[0] && part_num && part_num[0] && desc && desc[0]) {
+        case RECT_SIZE_PAGE_NUM:
+                rect_size_page_prepare_cb (dialog);
+                break;
 
-               gnome_druid_set_buttons_sensitive (GNOME_DRUID(dlg->priv->druid),
-                                                  TRUE, TRUE, TRUE, FALSE);
+        case ROUND_SIZE_PAGE_NUM:
+                round_size_page_prepare_cb (dialog);
+                break;
 
-       } else {
+        case CD_SIZE_PAGE_NUM:
+                cd_size_page_prepare_cb (dialog);
+                break;
 
-               gnome_druid_set_buttons_sensitive (GNOME_DRUID(dlg->priv->druid),
-                                                  TRUE, FALSE, TRUE, FALSE);
+        case LAYOUT_PAGE_NUM:
+                layout_page_prepare_cb (dialog);
+                break;
 
+        default:
+                /* No preparation needed */
+                break;
+
+        }
+}
+
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Handle non-linear forward traversal.                           */
+/*--------------------------------------------------------------------------*/
+static gint
+forward_page_function (gint     current_page,
+                       gpointer data)
+{
+        glTemplateDesigner *dialog = GL_TEMPLATE_DESIGNER (data);
+
+        switch (current_page)
+        {
+        case START_PAGE_NUM:
+                return NAME_PAGE_NUM;
+
+        case NAME_PAGE_NUM:
+                return PG_SIZE_PAGE_NUM;
+
+        case PG_SIZE_PAGE_NUM:
+                return SHAPE_PAGE_NUM;
+
+        case SHAPE_PAGE_NUM:
+               if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_rect_radio))) {
+                        return RECT_SIZE_PAGE_NUM;
+               }
+               if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_round_radio))) {
+                        return ROUND_SIZE_PAGE_NUM;
+               }
+               if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_cd_radio))) {
+                        return CD_SIZE_PAGE_NUM;
+               }
+                break;
+
+        case RECT_SIZE_PAGE_NUM:
+        case ROUND_SIZE_PAGE_NUM:
+        case CD_SIZE_PAGE_NUM:
+                return NLAYOUTS_PAGE_NUM;
+
+        case NLAYOUTS_PAGE_NUM:
+                return LAYOUT_PAGE_NUM;
+
+        case LAYOUT_PAGE_NUM:
+                return FINISH_PAGE_NUM;
+
+        case FINISH_PAGE_NUM:
+        default:
+                return -1;
+        }
+
+        return -1;
+}
+
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Widget on name page "changed" callback.                        */
+/*--------------------------------------------------------------------------*/
+static void
+name_page_changed_cb (glTemplateDesigner *dialog)
+{
+       gchar *brand, *part_num, *desc;
+
+       brand    = g_strstrip (gtk_editable_get_chars (GTK_EDITABLE(dialog->priv->brand_entry), 0, -1));
+       part_num = g_strstrip (gtk_editable_get_chars (GTK_EDITABLE(dialog->priv->part_num_entry), 0, -1));
+       desc     = gtk_editable_get_chars (GTK_EDITABLE(dialog->priv->description_entry), 0, -1);
+
+
+       if (brand && brand[0] && part_num && part_num[0] &&
+            lgl_db_does_template_exist (brand, part_num))
+        {
+                gtk_image_set_from_stock (GTK_IMAGE (dialog->priv->name_warning_image),
+                                          GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_BUTTON);
+                gtk_label_set_markup (GTK_LABEL (dialog->priv->name_warning_label),
+                                    _("<span foreground='red' weight='bold'>Brand and part# match an existing template!</span>"));
+        }
+        else
+        {
+                gtk_image_clear (GTK_IMAGE (dialog->priv->name_warning_image));
+                gtk_label_set_text (GTK_LABEL (dialog->priv->name_warning_label), "");
+        }
+
+       if (brand && brand[0] && part_num && part_num[0] && desc && desc[0] &&
+            !lgl_db_does_template_exist (brand, part_num))
+        {
+
+                gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
+                                                 dialog->priv->name_page,
+                                                 TRUE);
+       }
+        else
+        {
+
+                gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
+                                                 dialog->priv->name_page,
+                                                 FALSE);
        }
 
        g_free (brand);
        g_free (part_num);
        g_free (desc);
-
 }
                                                                                
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Widget on page size page "changed" callback.                   */
 /*--------------------------------------------------------------------------*/
 static void
-pg_size_page_changed_cb (glTemplateDesigner *dlg)
+pg_size_page_changed_cb (glTemplateDesigner *dialog)
 {
-       gchar   *page_size_name;
-       glPaper *paper;
+       gchar    *page_size_name;
+       lglPaper *paper;
        
 
        page_size_name =
-               gtk_editable_get_chars (GTK_EDITABLE(dlg->priv->pg_size_entry), 0, -1);
+               gtk_combo_box_get_active_text (GTK_COMBO_BOX (dialog->priv->pg_size_combo));
 
        if (page_size_name && strlen(page_size_name)) {
 
-               paper = gl_paper_from_name (page_size_name);
+               paper = lgl_db_lookup_paper_from_name (page_size_name);
        
 
-               if ( g_strcasecmp (paper->id, "Other") == 0 ) {
-                       gtk_widget_set_sensitive (GTK_WIDGET(dlg->priv->pg_w_spin), TRUE);
-                       gtk_widget_set_sensitive (GTK_WIDGET(dlg->priv->pg_h_spin), TRUE);
-                       gtk_widget_set_sensitive (GTK_WIDGET(dlg->priv->pg_w_units_label),
+               if ( g_ascii_strcasecmp (paper->id, "Other") == 0 ) {
+                       gtk_widget_set_sensitive (GTK_WIDGET(dialog->priv->pg_w_spin), TRUE);
+                       gtk_widget_set_sensitive (GTK_WIDGET(dialog->priv->pg_h_spin), TRUE);
+                       gtk_widget_set_sensitive (GTK_WIDGET(dialog->priv->pg_w_units_label),
                                                  TRUE);
-                       gtk_widget_set_sensitive (GTK_WIDGET(dlg->priv->pg_h_units_label),
+                       gtk_widget_set_sensitive (GTK_WIDGET(dialog->priv->pg_h_units_label),
                                                  TRUE);
 
                } else {
-                       gtk_widget_set_sensitive (GTK_WIDGET(dlg->priv->pg_w_spin), FALSE);
-                       gtk_widget_set_sensitive (GTK_WIDGET(dlg->priv->pg_h_spin), FALSE);
-                       gtk_widget_set_sensitive (GTK_WIDGET(dlg->priv->pg_w_units_label),
+                       gtk_widget_set_sensitive (GTK_WIDGET(dialog->priv->pg_w_spin), FALSE);
+                       gtk_widget_set_sensitive (GTK_WIDGET(dialog->priv->pg_h_spin), FALSE);
+                       gtk_widget_set_sensitive (GTK_WIDGET(dialog->priv->pg_w_units_label),
                                                  FALSE);
-                       gtk_widget_set_sensitive (GTK_WIDGET(dlg->priv->pg_h_units_label),
+                       gtk_widget_set_sensitive (GTK_WIDGET(dialog->priv->pg_h_units_label),
                                                  FALSE);
 
-                       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->pg_w_spin),
-                                                  paper->width * dlg->priv->units_per_point);
-                       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->pg_h_spin),
-                                                  paper->height * dlg->priv->units_per_point);
+                       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin),
+                                                  paper->width * dialog->priv->units_per_point);
+                       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->pg_h_spin),
+                                                  paper->height * dialog->priv->units_per_point);
                }
 
-               gl_paper_free (&paper);
+               lgl_paper_free (paper);
        }
 
        g_free (page_size_name);
 
 }
                                                                                
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Prepare rectangular size page.                                 */
 /*--------------------------------------------------------------------------*/
 static void
-rect_size_page_prepare_cb (glTemplateDesigner *dlg)
+rect_size_page_prepare_cb (glTemplateDesigner *dialog)
 {
        gdouble max_w, max_h;
-       gdouble w, h, r, waste, margin;
+       gdouble w, h, r, x_waste, y_waste, margin;
 
        /* Limit label size based on already chosen page size. */
-       max_w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->pg_w_spin));
-       max_h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->pg_h_spin));
-
-       w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_w_spin));
-       h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_h_spin));
-       r = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_r_spin));
-       waste  = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_waste_spin));
-       margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_margin_spin));
-
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->rect_w_spin),
-                                   dlg->priv->climb_rate, max_w);
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->rect_h_spin),
-                                   dlg->priv->climb_rate, max_h);
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->rect_r_spin),
+       max_w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin));
+       max_h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_h_spin));
+
+       w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_w_spin));
+       h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_h_spin));
+       r = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_r_spin));
+       x_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_x_waste_spin));
+       y_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_y_waste_spin));
+       margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_margin_spin));
+
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->rect_w_spin),
+                                   dialog->priv->climb_rate, max_w);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->rect_h_spin),
+                                   dialog->priv->climb_rate, max_h);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->rect_r_spin),
                                    0.0, MIN(max_w, max_h)/2.0);
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->rect_waste_spin),
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->rect_x_waste_spin),
+                                   0.0, MIN(max_w, max_h)/4.0);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->rect_y_waste_spin),
                                    0.0, MIN(max_w, max_h)/4.0);
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->rect_margin_spin),
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->rect_margin_spin),
                                    0.0, MIN(max_w, max_h)/4.0);
 
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->rect_w_spin), w);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->rect_h_spin), h);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->rect_r_spin), r);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->rect_waste_spin), waste);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->rect_margin_spin), margin);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_w_spin), w);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_h_spin), h);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_r_spin), r);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_x_waste_spin), x_waste);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_y_waste_spin), y_waste);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_margin_spin), margin);
 
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Prepare round size page.                                       */
 /*--------------------------------------------------------------------------*/
 static void
-round_size_page_prepare_cb (glTemplateDesigner *dlg)
+round_size_page_prepare_cb (glTemplateDesigner *dialog)
 {
        gdouble max_w, max_h;
        gdouble r, waste, margin;
 
        /* Limit label size based on already chosen page size. */
-       max_w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->pg_w_spin));
-       max_h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->pg_h_spin));
+       max_w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin));
+       max_h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_h_spin));
 
-       r = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->round_r_spin));
-       waste  = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->round_waste_spin));
-       margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->round_margin_spin));
+       r = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->round_r_spin));
+       waste  = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->round_waste_spin));
+       margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->round_margin_spin));
 
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->round_r_spin),
-                                   dlg->priv->climb_rate, MIN(max_w, max_h)/2.0);
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->round_waste_spin),
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->round_r_spin),
+                                   dialog->priv->climb_rate, MIN(max_w, max_h)/2.0);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->round_waste_spin),
                                    0.0, MIN(max_w, max_h)/4.0);
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->round_margin_spin),
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->round_margin_spin),
                                    0.0, MIN(max_w, max_h)/4.0);
 
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->round_r_spin), r);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->round_waste_spin), waste);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->round_margin_spin), margin);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->round_r_spin), r);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->round_waste_spin), waste);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->round_margin_spin), margin);
 
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Prepare cd/dvd size page.                                      */
 /*--------------------------------------------------------------------------*/
 static void
-cd_size_page_prepare_cb (glTemplateDesigner *dlg)
+cd_size_page_prepare_cb (glTemplateDesigner *dialog)
 {
        gdouble max_w, max_h;
        gdouble radius, hole, w, h, waste, margin;
 
        /* Limit label size based on already chosen page size. */
-       max_w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->pg_w_spin));
-       max_h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->pg_h_spin));
-
-       radius = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_radius_spin));
-       hole = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_hole_spin));
-       w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_w_spin));
-       h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_h_spin));
-       waste  = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_waste_spin));
-       margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_margin_spin));
-
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->cd_radius_spin),
-                                   dlg->priv->climb_rate, MIN(max_w, max_h)/2.0);
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->cd_hole_spin),
-                                   dlg->priv->climb_rate, MIN(max_w, max_h)/2.0);
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->cd_w_spin),
+       max_w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin));
+       max_h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_h_spin));
+
+       radius = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_radius_spin));
+       hole = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_hole_spin));
+       w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_w_spin));
+       h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_h_spin));
+       waste  = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_waste_spin));
+       margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_margin_spin));
+
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->cd_radius_spin),
+                                   dialog->priv->climb_rate, MIN(max_w, max_h)/2.0);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->cd_hole_spin),
+                                   dialog->priv->climb_rate, MIN(max_w, max_h)/2.0);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->cd_w_spin),
                                    0.0, max_w);
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->cd_h_spin),
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->cd_h_spin),
                                    0.0, max_h);
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->cd_waste_spin),
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->cd_waste_spin),
                                    0.0, MIN(max_w, max_h)/4.0);
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->cd_margin_spin),
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->cd_margin_spin),
                                    0.0, MIN(max_w, max_h)/4.0);
 
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->cd_radius_spin), radius);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->cd_hole_spin), hole);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->cd_w_spin), w);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->cd_h_spin), h);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->cd_waste_spin), waste);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->cd_margin_spin), margin);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_radius_spin), radius);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_hole_spin), hole);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_w_spin), w);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_h_spin), h);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_waste_spin), waste);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_margin_spin), margin);
 
 }
 
+
 /*--------------------------------------------------------------------------*/
-/* PRIVATE.  Layout page widget changed cb.                                 */
+/* PRIVATE.  Prepare Layout page cb.                                        */
 /*--------------------------------------------------------------------------*/
 static void
-layout_page_prepare_cb (glTemplateDesigner *dlg)
+layout_page_prepare_cb (glTemplateDesigner *dialog)
 {
        gdouble page_w, page_h;
-       gdouble w, h, waste;
+       gdouble w=0, h=0, x_waste=0, y_waste=0;
        gint    max_nx, max_ny;
        gint    nlayouts;
        gdouble nx_1, ny_1, x0_1, y0_1, dx_1, dy_1;
        gdouble nx_2, ny_2, x0_2, y0_2, dx_2, dy_2;
+       lglTemplate *template;
+
+       if (dialog->priv->stop_signals) return;
+       dialog->priv->stop_signals = TRUE;
 
-       g_signal_handlers_block_by_func (G_OBJECT(dlg->priv->layout1_nx_spin),
-                                        G_CALLBACK(layout_page_changed_cb),
-                                        G_OBJECT(dlg));
-       g_signal_handlers_block_by_func (G_OBJECT(dlg->priv->layout1_ny_spin),
-                                        G_CALLBACK(layout_page_changed_cb),
-                                        G_OBJECT(dlg));
-       g_signal_handlers_block_by_func (G_OBJECT(dlg->priv->layout1_x0_spin),
-                                        G_CALLBACK(layout_page_changed_cb),
-                                        G_OBJECT(dlg));
-       g_signal_handlers_block_by_func (G_OBJECT(dlg->priv->layout1_y0_spin),
-                                        G_CALLBACK(layout_page_changed_cb),
-                                        G_OBJECT(dlg));
-       g_signal_handlers_block_by_func (G_OBJECT(dlg->priv->layout1_dx_spin),
-                                        G_CALLBACK(layout_page_changed_cb),
-                                        G_OBJECT(dlg));
-       g_signal_handlers_block_by_func (G_OBJECT(dlg->priv->layout1_dy_spin),
-                                        G_CALLBACK(layout_page_changed_cb),
-                                        G_OBJECT(dlg));
-       g_signal_handlers_block_by_func (G_OBJECT(dlg->priv->layout2_nx_spin),
-                                        G_CALLBACK(layout_page_changed_cb),
-                                        G_OBJECT(dlg));
-       g_signal_handlers_block_by_func (G_OBJECT(dlg->priv->layout2_ny_spin),
-                                        G_CALLBACK(layout_page_changed_cb),
-                                        G_OBJECT(dlg));
-       g_signal_handlers_block_by_func (G_OBJECT(dlg->priv->layout2_x0_spin),
-                                        G_CALLBACK(layout_page_changed_cb),
-                                        G_OBJECT(dlg));
-       g_signal_handlers_block_by_func (G_OBJECT(dlg->priv->layout2_y0_spin),
-                                        G_CALLBACK(layout_page_changed_cb),
-                                        G_OBJECT(dlg));
-       g_signal_handlers_block_by_func (G_OBJECT(dlg->priv->layout2_dx_spin),
-                                        G_CALLBACK(layout_page_changed_cb),
-                                        G_OBJECT(dlg));
-       g_signal_handlers_block_by_func (G_OBJECT(dlg->priv->layout2_dy_spin),
-                                        G_CALLBACK(layout_page_changed_cb),
-                                        G_OBJECT(dlg));
 
        /* Limit ranges based on already chosen page and label sizes. */
-       page_w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->pg_w_spin));
-       page_h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->pg_h_spin));
-       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->priv->shape_rect_radio))) {
-               w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_w_spin));
-               h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_h_spin));
-               waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_waste_spin));
+       page_w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin));
+       page_h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_h_spin));
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_rect_radio))) {
+               w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_w_spin));
+               h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_h_spin));
+               x_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_x_waste_spin));
+               y_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_y_waste_spin));
        }
-       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->priv->shape_round_radio))) {
-               w = 2*gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->round_r_spin));
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_round_radio))) {
+               w = 2*gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->round_r_spin));
                h = w;
-               waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->round_waste_spin));
+               x_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->round_waste_spin));
+               y_waste = x_waste;
        }
-       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->priv->shape_cd_radio))) {
-               w = 2*gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_radius_spin));
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_cd_radio))) {
+               w = 2*gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_radius_spin));
                h = w;
-               waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_waste_spin));
+               x_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_waste_spin));
+               y_waste = x_waste;
        }
-       max_nx = MAX (floor (page_w/(w + 2*waste) + DELTA), 1.0);
-       max_ny = MAX (floor (page_h/(h + 2*waste) + DELTA), 1.0);
-
-       nx_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout1_nx_spin));
-       ny_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout1_ny_spin));
-       x0_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout1_x0_spin));
-       y0_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout1_y0_spin));
-       dx_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout1_dx_spin));
-       dy_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout1_dy_spin));
-       nx_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout2_nx_spin));
-       ny_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout2_ny_spin));
-       x0_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout2_x0_spin));
-       y0_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout2_y0_spin));
-       dx_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout2_dx_spin));
-       dy_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout2_dy_spin));
-
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->layout1_nx_spin),
+       max_nx = MAX (floor (page_w/(w + 2*x_waste) + DELTA), 1.0);
+       max_ny = MAX (floor (page_h/(h + 2*y_waste) + DELTA), 1.0);
+
+       nx_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_nx_spin));
+       ny_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_ny_spin));
+       x0_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_x0_spin));
+       y0_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_y0_spin));
+       dx_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_dx_spin));
+       dy_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_dy_spin));
+       nx_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_nx_spin));
+       ny_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_ny_spin));
+       x0_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_x0_spin));
+       y0_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_y0_spin));
+       dx_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_dx_spin));
+       dy_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_dy_spin));
+
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout1_nx_spin),
                                    1, max_nx);
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->layout1_ny_spin),
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout1_ny_spin),
                                    1, max_ny);
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->layout1_x0_spin),
-                                   waste, page_w - w - waste);
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->layout1_y0_spin),
-                                   waste, page_h - h - waste);
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->layout1_dx_spin),
-                                   w + 2*waste, page_w - w - 2*waste);
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->layout1_dy_spin),
-                                   h + 2*waste, page_h - h - 2*waste);
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->layout2_nx_spin),
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout1_x0_spin),
+                                   x_waste, page_w - w - x_waste);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout1_y0_spin),
+                                   y_waste, page_h - h - y_waste);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout1_dx_spin),
+                                   w + 2*x_waste, page_w - w - 2*x_waste);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout1_dy_spin),
+                                   h + 2*y_waste, page_h - h - 2*y_waste);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout2_nx_spin),
                                    1, max_nx);
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->layout2_ny_spin),
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout2_ny_spin),
                                    1, max_ny);
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->layout2_x0_spin),
-                                   waste, page_w - w - waste);
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->layout2_y0_spin),
-                                   waste, page_h - h - waste);
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->layout2_dx_spin),
-                                   w + 2*waste, page_w - w - 2*waste);
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dlg->priv->layout2_dy_spin),
-                                   h + 2*waste, page_h - h - 2*waste);
-
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->layout1_nx_spin), nx_1);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->layout1_ny_spin), ny_1);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->layout1_x0_spin), x0_1);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->layout1_y0_spin), y0_1);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->layout1_dx_spin), dx_1);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->layout1_dy_spin), dy_1);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->layout2_nx_spin), nx_2);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->layout2_ny_spin), ny_2);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->layout2_x0_spin), x0_2);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->layout2_y0_spin), y0_2);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->layout2_dx_spin), dx_2);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dlg->priv->layout2_dy_spin), dy_2);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout2_x0_spin),
+                                   x_waste, page_w - w - x_waste);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout2_y0_spin),
+                                   y_waste, page_h - h - y_waste);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout2_dx_spin),
+                                   w + 2*x_waste, page_w - w - 2*x_waste);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout2_dy_spin),
+                                   h + 2*y_waste, page_h - h - 2*y_waste);
+
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout1_nx_spin), nx_1);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout1_ny_spin), ny_1);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout1_x0_spin), x0_1);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout1_y0_spin), y0_1);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout1_dx_spin), dx_1);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout1_dy_spin), dy_1);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout2_nx_spin), nx_2);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout2_ny_spin), ny_2);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout2_x0_spin), x0_2);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout2_y0_spin), y0_2);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout2_dx_spin), dx_2);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout2_dy_spin), dy_2);
 
        /* Set visibility of layout2 widgets as appropriate. */
-       nlayouts = gtk_spin_button_get_value (GTK_SPIN_BUTTON (dlg->priv->nlayouts_spin));
-       if ( nlayouts == 1 ) {
-
-               gtk_widget_hide (dlg->priv->layout1_head_label);
-               gtk_widget_hide (dlg->priv->layout2_head_label);
-               gtk_widget_hide (dlg->priv->layout2_nx_spin);
-               gtk_widget_hide (dlg->priv->layout2_ny_spin);
-               gtk_widget_hide (dlg->priv->layout2_x0_spin);
-               gtk_widget_hide (dlg->priv->layout2_y0_spin);
-               gtk_widget_hide (dlg->priv->layout2_dx_spin);
-               gtk_widget_hide (dlg->priv->layout2_dy_spin);
-
-       } else {
-
-               gtk_widget_show (dlg->priv->layout1_head_label);
-               gtk_widget_show (dlg->priv->layout2_head_label);
-               gtk_widget_show (dlg->priv->layout2_nx_spin);
-               gtk_widget_show (dlg->priv->layout2_ny_spin);
-               gtk_widget_show (dlg->priv->layout2_x0_spin);
-               gtk_widget_show (dlg->priv->layout2_y0_spin);
-               gtk_widget_show (dlg->priv->layout2_dx_spin);
-               gtk_widget_show (dlg->priv->layout2_dy_spin);
-
+       nlayouts = gtk_spin_button_get_value (GTK_SPIN_BUTTON (dialog->priv->nlayouts_spin));
+       if ( nlayouts == 1 )
+        {
+               gtk_widget_hide (dialog->priv->layout1_head_label);
+               gtk_widget_hide (dialog->priv->layout2_head_label);
+               gtk_widget_hide (dialog->priv->layout2_nx_spin);
+               gtk_widget_hide (dialog->priv->layout2_ny_spin);
+               gtk_widget_hide (dialog->priv->layout2_x0_spin);
+               gtk_widget_hide (dialog->priv->layout2_y0_spin);
+               gtk_widget_hide (dialog->priv->layout2_dx_spin);
+               gtk_widget_hide (dialog->priv->layout2_dy_spin);
+       }
+        else
+        {
+               gtk_widget_show (dialog->priv->layout1_head_label);
+               gtk_widget_show (dialog->priv->layout2_head_label);
+               gtk_widget_show (dialog->priv->layout2_nx_spin);
+               gtk_widget_show (dialog->priv->layout2_ny_spin);
+               gtk_widget_show (dialog->priv->layout2_x0_spin);
+               gtk_widget_show (dialog->priv->layout2_y0_spin);
+               gtk_widget_show (dialog->priv->layout2_dx_spin);
+               gtk_widget_show (dialog->priv->layout2_dy_spin);
        }
 
-       g_signal_handlers_unblock_by_func (G_OBJECT(dlg->priv->layout1_nx_spin),
-                                          G_CALLBACK(layout_page_changed_cb),
-                                          G_OBJECT(dlg));
-       g_signal_handlers_unblock_by_func (G_OBJECT(dlg->priv->layout1_ny_spin),
-                                          G_CALLBACK(layout_page_changed_cb),
-                                          G_OBJECT(dlg));
-       g_signal_handlers_unblock_by_func (G_OBJECT(dlg->priv->layout1_x0_spin),
-                                          G_CALLBACK(layout_page_changed_cb),
-                                          G_OBJECT(dlg));
-       g_signal_handlers_unblock_by_func (G_OBJECT(dlg->priv->layout1_y0_spin),
-                                          G_CALLBACK(layout_page_changed_cb),
-                                          G_OBJECT(dlg));
-       g_signal_handlers_unblock_by_func (G_OBJECT(dlg->priv->layout1_dx_spin),
-                                          G_CALLBACK(layout_page_changed_cb),
-                                          G_OBJECT(dlg));
-       g_signal_handlers_unblock_by_func (G_OBJECT(dlg->priv->layout1_dy_spin),
-                                          G_CALLBACK(layout_page_changed_cb),
-                                          G_OBJECT(dlg));
-       g_signal_handlers_unblock_by_func (G_OBJECT(dlg->priv->layout2_nx_spin),
-                                          G_CALLBACK(layout_page_changed_cb),
-                                          G_OBJECT(dlg));
-       g_signal_handlers_unblock_by_func (G_OBJECT(dlg->priv->layout2_ny_spin),
-                                          G_CALLBACK(layout_page_changed_cb),
-                                          G_OBJECT(dlg));
-       g_signal_handlers_unblock_by_func (G_OBJECT(dlg->priv->layout2_x0_spin),
-                                          G_CALLBACK(layout_page_changed_cb),
-                                          G_OBJECT(dlg));
-       g_signal_handlers_unblock_by_func (G_OBJECT(dlg->priv->layout2_y0_spin),
-                                          G_CALLBACK(layout_page_changed_cb),
-                                          G_OBJECT(dlg));
-       g_signal_handlers_unblock_by_func (G_OBJECT(dlg->priv->layout2_dx_spin),
-                                          G_CALLBACK(layout_page_changed_cb),
-                                          G_OBJECT(dlg));
-       g_signal_handlers_unblock_by_func (G_OBJECT(dlg->priv->layout2_dy_spin),
-                                          G_CALLBACK(layout_page_changed_cb),
-                                          G_OBJECT(dlg));
-
-       layout_page_changed_cb (dlg);
+       template = build_template (dialog);
+       gl_mini_preview_set_template (GL_MINI_PREVIEW(dialog->priv->layout_mini_preview),
+                                      template);
+       lgl_template_free (template);
+
+
+       dialog->priv->stop_signals = FALSE;
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Layout page widget changed cb.                                 */
 /*--------------------------------------------------------------------------*/
 static void
-layout_page_changed_cb (glTemplateDesigner *dlg)
+layout_page_changed_cb (glTemplateDesigner *dialog)
 {
-       glTemplate *template;
+       lglTemplate *template;
+
+       if (dialog->priv->stop_signals) return;
+       dialog->priv->stop_signals = TRUE;
 
-       template = build_template (dlg);
+       template = build_template (dialog);
 
-       gl_wdgt_mini_preview_set_template (GL_WDGT_MINI_PREVIEW(dlg->priv->layout_mini_preview),
-                                          template);
+       gl_mini_preview_set_template (GL_MINI_PREVIEW(dialog->priv->layout_mini_preview),
+                                      template);
 
-       gl_template_free (&template);
+       lgl_template_free (template);
+
+       dialog->priv->stop_signals = FALSE;
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Print test sheet callback.                                     */
 /*--------------------------------------------------------------------------*/
 static void
-print_test_cb (glTemplateDesigner      *dlg)
+print_test_cb (glTemplateDesigner      *dialog)
 {
-       GObject    *label;
-       glTemplate *template;
-       GtkWidget  *print_dialog;
+       GObject     *label;
+       lglTemplate *template;
+       glPrintOp   *print_op;
 
        label = gl_label_new ();
 
-       template = build_template (dlg);
+       template = build_template (dialog);
        gl_label_set_template (GL_LABEL(label), template);
 
-       print_dialog = gl_print_dialog_new (GL_LABEL(label), NULL);
-       gl_print_dialog_force_outline_flag (GL_PRINT_DIALOG(print_dialog));
-       gtk_widget_show (print_dialog);
+       print_op = gl_print_op_new (GL_LABEL(label));
+       gl_print_op_force_outline_flag (print_op);
+        gtk_print_operation_run (GTK_PRINT_OPERATION (print_op),
+                                 GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
+                                 GTK_WINDOW (dialog),
+                                 NULL);
 
-       gl_template_free (&template);
+       lgl_template_free (template);
        g_object_unref (G_OBJECT(label));
 }
 
-/*--------------------------------------------------------------------------*/
-/* PRIVATE.  Finish druid.                                                  */
-/*--------------------------------------------------------------------------*/
-static void
-finish_cb (glTemplateDesigner *dlg)
-{
-       glTemplate *template;
-       
-       template = build_template (dlg);
-       gl_template_register (template);
-                                                                               
-       gtk_widget_destroy (GTK_WIDGET(dlg));
 
-}
-                         
 /*--------------------------------------------------------------------------*/
-/* Build a template based on current druid settings.                        */
+/* Build a template based on current assistant settings.                    */
 /*--------------------------------------------------------------------------*/
-static glTemplate *
-build_template (glTemplateDesigner      *dlg)
+static lglTemplate *
+build_template (glTemplateDesigner      *dialog)
 {
+       gdouble               upp;
        gchar                *brand, *part_num, *desc;
        gchar                *page_size_name;
-       glPaper              *paper;
-       glTemplateLabelStyle  shape;
-       gdouble               w, h, r, radius, hole, waste, margin;
+       lglPaper             *paper;
+       lglTemplateFrameShape shape;
+       lglTemplateFrame     *frame=NULL;
+       gdouble               w=0, h=0, r=0, radius=0, hole=0, waste=0, x_waste=0, y_waste=0, margin=0;
        gint                  nlayouts;
        gdouble               nx_1, ny_1, x0_1, y0_1, dx_1, dy_1;
        gdouble               nx_2, ny_2, x0_2, y0_2, dx_2, dy_2;
-       glTemplate           *template;
+       lglTemplate          *template;
+
+       upp = dialog->priv->units_per_point;
 
-       brand    = gtk_editable_get_chars (GTK_EDITABLE(dlg->priv->brand_entry), 0, -1);
-       part_num = gtk_editable_get_chars (GTK_EDITABLE(dlg->priv->part_num_entry), 0, -1);
-       desc     = gtk_editable_get_chars (GTK_EDITABLE(dlg->priv->description_entry), 0, -1);
+       brand    = g_strstrip (gtk_editable_get_chars (GTK_EDITABLE(dialog->priv->brand_entry), 0, -1));
+       part_num = g_strstrip (gtk_editable_get_chars (GTK_EDITABLE(dialog->priv->part_num_entry), 0, -1));
+       desc     = gtk_editable_get_chars (GTK_EDITABLE(dialog->priv->description_entry), 0, -1);
 
        page_size_name =
-               gtk_editable_get_chars (GTK_EDITABLE(dlg->priv->pg_size_entry), 0, -1);
-       paper = gl_paper_from_name (page_size_name);
-       if ( g_strcasecmp (paper->id, "Other") == 0 ) {
+               gtk_combo_box_get_active_text (GTK_COMBO_BOX (dialog->priv->pg_size_combo));
+       paper = lgl_db_lookup_paper_from_name (page_size_name);
+       if ( g_ascii_strcasecmp (paper->id, "Other") == 0 ) {
                paper->width =
-                       gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->pg_w_spin))
-                       / dlg->priv->units_per_point;
+                       gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin))
+                       / upp;
                paper->height =
-                       gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->pg_h_spin))
-                        / dlg->priv->units_per_point;
+                       gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_h_spin))
+                        / upp;
        }
 
-       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->priv->shape_rect_radio))) {
-               shape = GL_TEMPLATE_STYLE_RECT;
-               w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_w_spin));
-               h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_h_spin));
-               r = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_r_spin));
-               waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_waste_spin));
-               margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->rect_margin_spin));
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_rect_radio))) {
+               shape = LGL_TEMPLATE_FRAME_SHAPE_RECT;
+               w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_w_spin));
+               h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_h_spin));
+               r = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_r_spin));
+               x_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_x_waste_spin));
+               y_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_y_waste_spin));
+               margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_margin_spin));
        }
 
-       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->priv->shape_round_radio))) {
-               shape = GL_TEMPLATE_STYLE_ROUND;
-               r = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->round_r_spin));
-               waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->round_waste_spin));
-               margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->round_margin_spin));
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_round_radio))) {
+               shape = LGL_TEMPLATE_FRAME_SHAPE_ROUND;
+               r = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->round_r_spin));
+               waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->round_waste_spin));
+               margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->round_margin_spin));
        }
 
-       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->priv->shape_cd_radio))) {
-               shape = GL_TEMPLATE_STYLE_CD;
-               radius = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_radius_spin));
-               hole = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_hole_spin));
-               w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_w_spin));
-               h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_h_spin));
-               waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_waste_spin));
-               margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->cd_margin_spin));
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_cd_radio))) {
+               shape = LGL_TEMPLATE_FRAME_SHAPE_CD;
+               radius = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_radius_spin));
+               hole = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_hole_spin));
+               w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_w_spin));
+               h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_h_spin));
+               waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_waste_spin));
+               margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_margin_spin));
        }
 
-       nlayouts = gtk_spin_button_get_value (GTK_SPIN_BUTTON (dlg->priv->nlayouts_spin));
-       nx_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout1_nx_spin));
-       ny_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout1_ny_spin));
-       x0_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout1_x0_spin));
-       y0_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout1_y0_spin));
-       dx_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout1_dx_spin));
-       dy_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout1_dy_spin));
-       nx_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout2_nx_spin));
-       ny_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout2_ny_spin));
-       x0_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout2_x0_spin));
-       y0_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout2_y0_spin));
-       dx_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout2_dx_spin));
-       dy_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->layout2_dy_spin));
-
-       template = g_new0 (glTemplate, 1);
-
-       template->name = g_strdup_printf ("%s %s", brand, part_num);
-       template->alias = g_list_append (template->alias, g_strdup (template->name));
-       template->page_size = g_strdup (paper->id);
-       template->page_width = paper->width;
-       template->page_height = paper->height;
-       template->description = g_strdup (desc);
-
-       template->label.style = shape;
+       nlayouts = gtk_spin_button_get_value (GTK_SPIN_BUTTON (dialog->priv->nlayouts_spin));
+       nx_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_nx_spin));
+       ny_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_ny_spin));
+       x0_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_x0_spin));
+       y0_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_y0_spin));
+       dx_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_dx_spin));
+       dy_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_dy_spin));
+       nx_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_nx_spin));
+       ny_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_ny_spin));
+       x0_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_x0_spin));
+       y0_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_y0_spin));
+       dx_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_dx_spin));
+       dy_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_dy_spin));
+
+
+       template = lgl_template_new (brand, part_num, desc, paper->id, paper->width, paper->height);
+
        switch (shape) {
-       case GL_TEMPLATE_STYLE_RECT:
-               template->label.rect.w = w / dlg->priv->units_per_point;
-               template->label.rect.h = h / dlg->priv->units_per_point;
-               template->label.rect.r = r / dlg->priv->units_per_point;
-               template->label.rect.waste = waste / dlg->priv->units_per_point;
+       case LGL_TEMPLATE_FRAME_SHAPE_RECT:
+               frame = lgl_template_frame_rect_new ("0",
+                                                    w/upp, h/upp, r/upp,
+                                                    x_waste/upp, y_waste/upp);
                break;
-       case GL_TEMPLATE_STYLE_ROUND:
-               template->label.round.r = r / dlg->priv->units_per_point;
-               template->label.round.waste = waste / dlg->priv->units_per_point;
+       case LGL_TEMPLATE_FRAME_SHAPE_ROUND:
+               frame = lgl_template_frame_round_new ("0", r/upp, waste/upp);
                break;
-       case GL_TEMPLATE_STYLE_CD:
-               template->label.cd.r1 = radius / dlg->priv->units_per_point;
-               template->label.cd.r2 = hole / dlg->priv->units_per_point;
-               template->label.cd.w = w / dlg->priv->units_per_point;
-               template->label.cd.h = h / dlg->priv->units_per_point;
-               template->label.cd.waste = waste / dlg->priv->units_per_point;
+       case LGL_TEMPLATE_FRAME_SHAPE_CD:
+               frame = lgl_template_frame_cd_new ("0",
+                                                  radius/upp, hole/upp,
+                                                  w/upp, h/upp,
+                                                  waste/upp);
                break;
        }
-       template->label.any.markups =
-               g_list_append (template->label.any.markups,
-                              gl_template_markup_margin_new (margin / dlg->priv->units_per_point));
-       template->label.any.layouts =
-               g_list_append (template->label.any.layouts,
-                              gl_template_layout_new (nx_1, ny_1,
-                                                      x0_1 / dlg->priv->units_per_point,
-                                                      y0_1 / dlg->priv->units_per_point,
-                                                      dx_1 / dlg->priv->units_per_point,
-                                                      dy_1 / dlg->priv->units_per_point));
+       lgl_template_add_frame (template, frame);
+
+       lgl_template_frame_add_markup (frame,
+                                       lgl_template_markup_margin_new (margin/upp));
+
+       lgl_template_frame_add_layout (frame,
+                                       lgl_template_layout_new (nx_1, ny_1,
+                                                                x0_1/upp,
+                                                                y0_1/upp,
+                                                                dx_1/upp,
+                                                                dy_1/upp));
        if (nlayouts > 1) {
-               template->label.any.layouts =
-                       g_list_append (template->label.any.layouts,
-                                      gl_template_layout_new (nx_2, ny_2,
-                                                              x0_2 / dlg->priv->units_per_point,
-                                                              y0_2 / dlg->priv->units_per_point,
-                                                              dx_2 / dlg->priv->units_per_point,
-                                                              dy_2 / dlg->priv->units_per_point));
+               lgl_template_frame_add_layout (frame,
+                                               lgl_template_layout_new (nx_2, ny_2,
+                                                                        x0_2/upp,
+                                                                        y0_2/upp,
+                                                                        dx_2/upp,
+                                                                        dy_2/upp));
        }
 
        g_free (brand);
@@ -1622,142 +1752,18 @@ build_template (glTemplateDesigner      *dlg)
        g_free (desc);
 
        g_free (page_size_name);
-       gl_paper_free (&paper);
+       lgl_paper_free (paper);
 
        return template;
 }
 
-/*--------------------------------------------------------------------------*/
-/* PRIVATE.  Handle non-linear forward traversal.                           */
-/*--------------------------------------------------------------------------*/
-static gboolean
-next_cb (GnomeDruidPage     *druidpage,
-        GtkWidget          *widget,
-        glTemplateDesigner *dlg)
-{
-
-       if ( GTK_WIDGET(druidpage) == dlg->priv->shape_page ) {
-
-               if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->priv->shape_rect_radio))) {
-                       gnome_druid_set_page (GNOME_DRUID(dlg->priv->druid),
-                                             GNOME_DRUID_PAGE(dlg->priv->rect_size_page));
-                       return TRUE;
-               }
-
-               if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->priv->shape_round_radio))) {
-                       gnome_druid_set_page (GNOME_DRUID(dlg->priv->druid),
-                                             GNOME_DRUID_PAGE(dlg->priv->round_size_page));
-                       return TRUE;
-               }
-
-               if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->priv->shape_cd_radio))) {
-                       gnome_druid_set_page (GNOME_DRUID(dlg->priv->druid),
-                                             GNOME_DRUID_PAGE(dlg->priv->cd_size_page));
-                       return TRUE;
-               }
-
-       }
-
-       if ( GTK_WIDGET(druidpage) == dlg->priv->rect_size_page ) {
-
-               gnome_druid_set_page (GNOME_DRUID(dlg->priv->druid),
-                                     GNOME_DRUID_PAGE(dlg->priv->nlayouts_page));
-               return TRUE;
-
-       }
-
-       if ( GTK_WIDGET(druidpage) == dlg->priv->round_size_page ) {
-
-               gnome_druid_set_page (GNOME_DRUID(dlg->priv->druid),
-                                     GNOME_DRUID_PAGE(dlg->priv->nlayouts_page));
-               return TRUE;
-
-       }
-
-       if ( GTK_WIDGET(druidpage) == dlg->priv->cd_size_page ) {
-
-               gnome_druid_set_page (GNOME_DRUID(dlg->priv->druid),
-                                     GNOME_DRUID_PAGE(dlg->priv->nlayouts_page));
-               return TRUE;
-
-       }
-
-       /* Default case is linear. */
-       return FALSE;
-}
-
-/*--------------------------------------------------------------------------*/
-/* PRIVATE.  Handle non-linear reverse traversal.                           */
-/*--------------------------------------------------------------------------*/
-static gboolean
-back_cb (GnomeDruidPage     *druidpage,
-        GtkWidget          *widget,
-        glTemplateDesigner *dlg)
-{
-
-       if ( GTK_WIDGET(druidpage) == dlg->priv->rect_size_page ) {
 
-               gnome_druid_set_page (GNOME_DRUID(dlg->priv->druid),
-                                     GNOME_DRUID_PAGE(dlg->priv->shape_page));
-               return TRUE;
-
-       }
-
-       if ( GTK_WIDGET(druidpage) == dlg->priv->round_size_page ) {
-
-               gnome_druid_set_page (GNOME_DRUID(dlg->priv->druid),
-                                     GNOME_DRUID_PAGE(dlg->priv->shape_page));
-               return TRUE;
-
-       }
-
-       if ( GTK_WIDGET(druidpage) == dlg->priv->cd_size_page ) {
-
-               gnome_druid_set_page (GNOME_DRUID(dlg->priv->druid),
-                                     GNOME_DRUID_PAGE(dlg->priv->shape_page));
-               return TRUE;
-
-       }
-
-       if ( GTK_WIDGET(druidpage) == dlg->priv->nlayouts_page ) {
-
-               if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->priv->shape_rect_radio))) {
-                       gnome_druid_set_page (GNOME_DRUID(dlg->priv->druid),
-                                             GNOME_DRUID_PAGE(dlg->priv->rect_size_page));
-                       return TRUE;
-               }
-
-               if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->priv->shape_round_radio))) {
-                       gnome_druid_set_page (GNOME_DRUID(dlg->priv->druid),
-                                             GNOME_DRUID_PAGE(dlg->priv->round_size_page));
-                       return TRUE;
-               }
-
-               if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dlg->priv->shape_cd_radio))) {
-                       gnome_druid_set_page (GNOME_DRUID(dlg->priv->druid),
-                                             GNOME_DRUID_PAGE(dlg->priv->cd_size_page));
-                       return TRUE;
-               }
-
-       }
-
-       /* Default case is linear. */
-       return FALSE;
-}
-
-/*****************************************************************************/
-/* Construct mini preview widget.                                            */
-/*****************************************************************************/
-GtkWidget *
-gl_template_designer_construct_mini_preview (gchar *name,
-                                            gchar *string1,
-                                            gchar *string2,
-                                            gint   int1,
-                                            gint   int2)
-{
-       gint width  = int1;
-       gint height = int2;
-
-       return gl_wdgt_mini_preview_new (height, width);
-}
 
+/*
+ * Local Variables:       -- emacs
+ * mode: C                -- emacs
+ * c-basic-offset: 8      -- emacs
+ * tab-width: 8           -- emacs
+ * indent-tabs-mode: nil  -- emacs
+ * End:                   -- emacs
+ */