]> 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 bfd1a53c38b0baff20582b4661912a0f692e1311..0848cc9eeb1cd70f8a86c50b5d942aa84f8e099e 100644 (file)
@@ -1,32 +1,29 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
-
 /*
- *  (GLABELS) Label and Business Card Creation program for GNOME
- *
- *  template-designer.c:  Template designer module
+ *  template-designer.c
+ *  Copyright (C) 2003-2009  Jim Evins <evins@snaught.com>.
  *
- *  Copyright (C) 2003  Jim Evins <evins@snaught.com>.
+ *  This file is part of gLabels.
  *
- *  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 <glade/glade-xml.h>
+#include <gtk/gtkbuilder.h>
 #include <gtk/gtktogglebutton.h>
 #include <gtk/gtkcombobox.h>
 #include <gtk/gtkspinbutton.h>
 #include <math.h>
 
 #include "prefs.h"
-#include <libglabels/paper.h>
-#include <libglabels/template.h>
-#include "wdgt-mini-preview.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 DELTA 0.01
 #define MAX_PAGE_DIM_POINTS 5000.0
 
+
 /*========================================================*/
 /* Private types.                                         */
 /*========================================================*/
 
 struct _glTemplateDesignerPrivate
 {
+        GtkBuilder      *builder;
+
        /* Assistant pages */
        GtkWidget       *start_page;
        GtkWidget       *name_page;
@@ -92,6 +93,8 @@ 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 */
@@ -169,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;
 
@@ -178,6 +182,8 @@ struct _glTemplateDesignerPrivate
        gdouble          climb_rate;
        gint             digits;
 
+        /* Prevent recursion */
+       gboolean    stop_signals;
 };
 
 /* Page numbers for traversing GtkAssistant */
@@ -194,6 +200,7 @@ enum {
         FINISH_PAGE_NUM
 };
 
+
 /*========================================================*/
 /* Private globals.                                       */
 /*========================================================*/
@@ -261,38 +268,73 @@ static void     layout_page_changed_cb            (glTemplateDesigner      *dial
 
 static void     print_test_cb                     (glTemplateDesigner      *dialog);
 
-static glTemplate *build_template                 (glTemplateDesigner      *dialog);
+static lglTemplate *build_template                (glTemplateDesigner      *dialog);
+
 
-\f
 /*****************************************************************************/
 /* Boilerplate object stuff.                                                 */
 /*****************************************************************************/
 G_DEFINE_TYPE (glTemplateDesigner, gl_template_designer, GTK_TYPE_ASSISTANT);
 
+
 static void
 gl_template_designer_class_init (glTemplateDesignerClass *class)
 {
        GObjectClass *object_class = G_OBJECT_CLASS (class);
 
-       gl_debug (DEBUG_TEMPLATE, "");
-       
        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 *dialog)
 {
+        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;
+
        gl_debug (DEBUG_TEMPLATE, "START");
 
        dialog->priv = g_new0 (glTemplateDesignerPrivate, 1);
 
+        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)
 {
@@ -304,6 +346,10 @@ gl_template_designer_finalize (GObject *object)
        g_return_if_fail (GL_IS_TEMPLATE_DESIGNER (dialog));
        g_return_if_fail (dialog->priv != NULL);
 
+        if (dialog->priv->builder)
+        {
+                g_object_unref (dialog->priv->builder);
+        }
        g_free (dialog->priv);
 
        G_OBJECT_CLASS (gl_template_designer_parent_class)->finalize (object);
@@ -311,6 +357,7 @@ gl_template_designer_finalize (GObject *object)
        gl_debug (DEBUG_TEMPLATE, "END");
 }
 
+
 /*****************************************************************************/
 /* NEW preferences dialog.                                                   */
 /*****************************************************************************/
@@ -334,6 +381,7 @@ gl_template_designer_new (GtkWindow *parent)
        return dialog;
 }
 
+
 /*---------------------------------------------------------------------------*/
 /* PRIVATE.  Construct composite widget.                                     */
 /*---------------------------------------------------------------------------*/
@@ -342,6 +390,8 @@ gl_template_designer_construct (glTemplateDesigner *dialog)
 {
        GdkPixbuf  *logo;
 
+       gl_debug (DEBUG_TEMPLATE, "START");
+
        g_return_if_fail (dialog && GL_IS_TEMPLATE_DESIGNER (dialog));
        g_return_if_fail (dialog->priv != NULL);
 
@@ -383,8 +433,11 @@ gl_template_designer_construct (glTemplateDesigner *dialog)
                           G_CALLBACK(prepare_cb), NULL);
 
         gtk_widget_show_all (GTK_WIDGET(dialog));   
+
+       gl_debug (DEBUG_TEMPLATE, "END");
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Construct start page.                                          */
 /*--------------------------------------------------------------------------*/
@@ -392,17 +445,11 @@ static void
 construct_start_page (glTemplateDesigner      *dialog,
                      GdkPixbuf               *logo)
 {
-       GladeXML        *gui;
-
-       gui = glade_xml_new (GLABELS_GLADE_DIR "template-designer.glade",
-                             "start_page", NULL);
-       if (!gui)
-        {
-                g_critical ("Could not open template-designer.glade. gLabels may not be installed correctly!");
-                return;
-        }
+       gl_debug (DEBUG_TEMPLATE, "START");
 
-       dialog->priv->start_page = glade_xml_get_widget (gui, "start_page");
+        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);
@@ -419,8 +466,11 @@ construct_start_page (glTemplateDesigner      *dialog,
         gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
                                          dialog->priv->start_page,
                                          TRUE);
+
+       gl_debug (DEBUG_TEMPLATE, "END");
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Construct name page.                                           */
 /*--------------------------------------------------------------------------*/
@@ -428,20 +478,17 @@ static void
 construct_name_page (glTemplateDesigner      *dialog,
                     GdkPixbuf               *logo)
 {
-       GladeXML        *gui;
+       gl_debug (DEBUG_TEMPLATE, "START");
 
-       gui = glade_xml_new (GLABELS_GLADE_DIR "template-designer.glade",
-                             "name_page", NULL);
-       if (!gui)
-        {
-                g_critical ("Could not open template-designer.glade. gLabels may not be installed correctly!");
-                return;
-        }
+        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);
 
-       dialog->priv->name_page         = glade_xml_get_widget (gui, "name_page");
-       dialog->priv->brand_entry       = glade_xml_get_widget (gui, "brand_entry");
-       dialog->priv->part_num_entry    = glade_xml_get_widget (gui, "part_num_entry");
-       dialog->priv->description_entry = glade_xml_get_widget (gui, "description_entry");
 
         gtk_assistant_append_page (GTK_ASSISTANT (dialog),
                                    dialog->priv->name_page);
@@ -462,8 +509,10 @@ construct_name_page (glTemplateDesigner      *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.                                       */
 /*--------------------------------------------------------------------------*/
@@ -471,25 +520,21 @@ static void
 construct_pg_size_page (glTemplateDesigner      *dialog,
                        GdkPixbuf               *logo)
 {
-       GladeXML        *gui;
        GList           *page_sizes;
        const gchar     *default_page_size_id;
        gchar           *default_page_size_name;
 
-       gui = glade_xml_new (GLABELS_GLADE_DIR "template-designer.glade",
-                             "pg_size_page", NULL);
-       if (!gui)
-        {
-                g_critical ("Could not open template-designer.glade. gLabels may not be installed correctly!");
-                return;
-        }
+       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);
 
-       dialog->priv->pg_size_page     = glade_xml_get_widget (gui, "pg_size_page");
-       dialog->priv->pg_size_combo    = glade_xml_get_widget (gui, "pg_size_combo");
-       dialog->priv->pg_w_spin        = glade_xml_get_widget (gui, "pg_w_spin");
-       dialog->priv->pg_h_spin        = glade_xml_get_widget (gui, "pg_h_spin");
-       dialog->priv->pg_w_units_label = glade_xml_get_widget (gui, "pg_w_units_label");
-       dialog->priv->pg_h_units_label = glade_xml_get_widget (gui, "pg_h_units_label");
 
        gl_util_combo_box_add_text_model (GTK_COMBO_BOX (dialog->priv->pg_size_combo));
 
@@ -507,11 +552,11 @@ construct_pg_size_page (glTemplateDesigner      *dialog,
                                          TRUE);
 
        /* Load page size combo */
-       page_sizes = gl_paper_get_name_list ();
+       page_sizes = lgl_db_get_paper_name_list ();
        gl_util_combo_box_set_strings (GTK_COMBO_BOX (dialog->priv->pg_size_combo), page_sizes);
-       gl_paper_free_name_list (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);
+       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);
 
@@ -537,8 +582,11 @@ construct_pg_size_page (glTemplateDesigner      *dialog,
        /* This controls sensitivity of related widgets. */
        g_signal_connect_swapped (G_OBJECT(dialog->priv->pg_size_combo), "changed",
                                  G_CALLBACK(pg_size_page_changed_cb), dialog);
+
+       gl_debug (DEBUG_TEMPLATE, "END");
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Construct shape page.                                          */
 /*--------------------------------------------------------------------------*/
@@ -546,20 +594,15 @@ static void
 construct_shape_page (glTemplateDesigner      *dialog,
                      GdkPixbuf               *logo)
 {
-       GladeXML        *gui;
+       gl_debug (DEBUG_TEMPLATE, "START");
 
-       gui = glade_xml_new (GLABELS_GLADE_DIR "template-designer.glade",
-                             "shape_page", NULL);
-       if (!gui)
-        {
-                g_critical ("Could not open template-designer.glade. gLabels may not be installed correctly!");
-                return;
-        }
+        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);
 
-       dialog->priv->shape_page        = glade_xml_get_widget (gui, "shape_page");
-       dialog->priv->shape_rect_radio  = glade_xml_get_widget (gui, "shape_rect_radio");
-       dialog->priv->shape_round_radio = glade_xml_get_widget (gui, "shape_round_radio");
-       dialog->priv->shape_cd_radio    = glade_xml_get_widget (gui, "shape_cd_radio");
 
         gtk_assistant_append_page (GTK_ASSISTANT (dialog),
                                    dialog->priv->shape_page);
@@ -573,8 +616,11 @@ construct_shape_page (glTemplateDesigner      *dialog,
         gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
                                          dialog->priv->shape_page,
                                          TRUE);
+
+       gl_debug (DEBUG_TEMPLATE, "END");
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Construct rect size page.                                      */
 /*--------------------------------------------------------------------------*/
@@ -582,31 +628,27 @@ static void
 construct_rect_size_page (glTemplateDesigner      *dialog,
                          GdkPixbuf               *logo)
 {
-       GladeXML        *gui;
        GdkPixbuf       *pixbuf;
 
-       gui = glade_xml_new (GLABELS_GLADE_DIR "template-designer.glade",
-                             "rect_size_page", NULL);
-       if (!gui)
-        {
-                g_critical ("Could not open template-designer.glade. gLabels may not be installed correctly!");
-                return;
-        }
+       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);
 
-       dialog->priv->rect_size_page           = glade_xml_get_widget (gui, "rect_size_page");
-       dialog->priv->rect_image               = glade_xml_get_widget (gui, "rect_image");
-       dialog->priv->rect_w_spin              = glade_xml_get_widget (gui, "rect_w_spin");
-       dialog->priv->rect_h_spin              = glade_xml_get_widget (gui, "rect_h_spin");
-       dialog->priv->rect_r_spin              = glade_xml_get_widget (gui, "rect_r_spin");
-       dialog->priv->rect_x_waste_spin        = glade_xml_get_widget (gui, "rect_x_waste_spin");
-       dialog->priv->rect_y_waste_spin        = glade_xml_get_widget (gui, "rect_y_waste_spin");
-       dialog->priv->rect_margin_spin         = glade_xml_get_widget (gui, "rect_margin_spin");
-       dialog->priv->rect_w_units_label       = glade_xml_get_widget (gui, "rect_w_units_label");
-       dialog->priv->rect_h_units_label       = glade_xml_get_widget (gui, "rect_h_units_label");
-       dialog->priv->rect_r_units_label       = glade_xml_get_widget (gui, "rect_r_units_label");
-       dialog->priv->rect_x_waste_units_label = glade_xml_get_widget (gui, "rect_x_waste_units_label");
-       dialog->priv->rect_y_waste_units_label = glade_xml_get_widget (gui, "rect_y_waste_units_label");
-       dialog->priv->rect_margin_units_label  = glade_xml_get_widget (gui, "rect_margin_units_label");
 
         gtk_assistant_append_page (GTK_ASSISTANT (dialog),
                                    dialog->priv->rect_size_page);
@@ -676,8 +718,11 @@ construct_rect_size_page (glTemplateDesigner      *dialog,
                                   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.                                     */
 /*--------------------------------------------------------------------------*/
@@ -685,25 +730,21 @@ static void
 construct_round_size_page (glTemplateDesigner      *dialog,
                           GdkPixbuf               *logo)
 {
-       GladeXML        *gui;
        GdkPixbuf       *pixbuf;
 
-       gui = glade_xml_new (GLABELS_GLADE_DIR "template-designer.glade",
-                             "round_size_page", NULL);
-       if (!gui)
-        {
-                g_critical ("Could not open template-designer.glade. gLabels may not be installed correctly!");
-                return;
-        }
+       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);
 
-       dialog->priv->round_size_page          = glade_xml_get_widget (gui, "round_size_page");
-       dialog->priv->round_image              = glade_xml_get_widget (gui, "round_image");
-       dialog->priv->round_r_spin             = glade_xml_get_widget (gui, "round_r_spin");
-       dialog->priv->round_waste_spin         = glade_xml_get_widget (gui, "round_waste_spin");
-       dialog->priv->round_margin_spin        = glade_xml_get_widget (gui, "round_margin_spin");
-       dialog->priv->round_r_units_label      = glade_xml_get_widget (gui, "round_r_units_label");
-       dialog->priv->round_waste_units_label  = glade_xml_get_widget (gui, "round_waste_units_label");
-       dialog->priv->round_margin_units_label = glade_xml_get_widget (gui, "round_margin_units_label");
 
         gtk_assistant_append_page (GTK_ASSISTANT (dialog),
                                    dialog->priv->round_size_page);
@@ -750,8 +791,10 @@ construct_round_size_page (glTemplateDesigner      *dialog,
        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.                                    */
 /*--------------------------------------------------------------------------*/
@@ -759,31 +802,27 @@ static void
 construct_cd_size_page (glTemplateDesigner      *dialog,
                        GdkPixbuf               *logo)
 {
-       GladeXML        *gui;
        GdkPixbuf       *pixbuf;
 
-       gui = glade_xml_new (GLABELS_GLADE_DIR "template-designer.glade",
-                             "cd_size_page", NULL);
-       if (!gui)
-        {
-                g_critical ("Could not open template-designer.glade. gLabels may not be installed correctly!");
-                return;
-        }
+       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);
 
-       dialog->priv->cd_size_page = glade_xml_get_widget (gui, "cd_size_page");
-       dialog->priv->cd_image     = glade_xml_get_widget (gui, "cd_image");
-       dialog->priv->cd_radius_spin = glade_xml_get_widget (gui, "cd_radius_spin");
-       dialog->priv->cd_hole_spin   = glade_xml_get_widget (gui, "cd_hole_spin");
-       dialog->priv->cd_w_spin      = glade_xml_get_widget (gui, "cd_w_spin");
-       dialog->priv->cd_h_spin      = glade_xml_get_widget (gui, "cd_h_spin");
-       dialog->priv->cd_waste_spin  = glade_xml_get_widget (gui, "cd_waste_spin");
-       dialog->priv->cd_margin_spin = glade_xml_get_widget (gui, "cd_margin_spin");
-       dialog->priv->cd_radius_units_label = glade_xml_get_widget (gui, "cd_radius_units_label");
-       dialog->priv->cd_hole_units_label   = glade_xml_get_widget (gui, "cd_hole_units_label");
-       dialog->priv->cd_w_units_label      = glade_xml_get_widget (gui, "cd_w_units_label");
-       dialog->priv->cd_h_units_label      = glade_xml_get_widget (gui, "cd_h_units_label");
-       dialog->priv->cd_waste_units_label  = glade_xml_get_widget (gui, "cd_waste_units_label");
-       dialog->priv->cd_margin_units_label = glade_xml_get_widget (gui, "cd_margin_units_label");
 
         gtk_assistant_append_page (GTK_ASSISTANT (dialog),
                                    dialog->priv->cd_size_page);
@@ -850,8 +889,10 @@ construct_cd_size_page (glTemplateDesigner      *dialog,
        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.                              */
 /*--------------------------------------------------------------------------*/
@@ -859,21 +900,17 @@ static void
 construct_nlayouts_page (glTemplateDesigner      *dialog,
                         GdkPixbuf               *logo)
 {
-       GladeXML        *gui;
        GdkPixbuf       *pixbuf;
 
-       gui = glade_xml_new (GLABELS_GLADE_DIR "template-designer.glade",
-                             "nlayouts_page", NULL);
-       if (!gui)
-        {
-                g_critical ("Could not open template-designer.glade. gLabels may not be installed correctly!");
-                return;
-        }
+       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);
 
-       dialog->priv->nlayouts_page   = glade_xml_get_widget (gui, "nlayouts_page");
-       dialog->priv->nlayouts_image1 = glade_xml_get_widget (gui, "nlayouts_image1");
-       dialog->priv->nlayouts_image2 = glade_xml_get_widget (gui, "nlayouts_image2");
-       dialog->priv->nlayouts_spin   = glade_xml_get_widget (gui, "nlayouts_spin");
 
         gtk_assistant_append_page (GTK_ASSISTANT (dialog),
                                    dialog->priv->nlayouts_page);
@@ -888,14 +925,20 @@ construct_nlayouts_page (glTemplateDesigner      *dialog,
                                          dialog->priv->nlayouts_page,
                                          TRUE);
 
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->nlayouts_spin),
+                                   1, 2);
+
+
        /* Initialize illustrations. */
        pixbuf = gdk_pixbuf_new_from_file (EX_NLAYOUTS_IMAGE1, NULL);
        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(dialog->priv->nlayouts_image2), pixbuf);
 
+       gl_debug (DEBUG_TEMPLATE, "END");
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Construct layout page.                                         */
 /*--------------------------------------------------------------------------*/
@@ -903,37 +946,35 @@ static void
 construct_layout_page (glTemplateDesigner      *dialog,
                       GdkPixbuf               *logo)
 {
-       GladeXML        *gui;
-
-       gui = glade_xml_new (GLABELS_GLADE_DIR "template-designer.glade",
-                             "layout_page", NULL);
-       if (!gui)
-        {
-                g_critical ("Could not open template-designer.glade. gLabels may not be installed correctly!");
-                return;
-        }
+       gl_debug (DEBUG_TEMPLATE, "START");
 
-       dialog->priv->layout_page           = glade_xml_get_widget (gui, "layout_page");
-       dialog->priv->layout1_head_label    = glade_xml_get_widget (gui, "layout1_head_label");
-       dialog->priv->layout1_nx_spin       = glade_xml_get_widget (gui, "layout1_nx_spin");
-       dialog->priv->layout1_ny_spin       = glade_xml_get_widget (gui, "layout1_ny_spin");
-       dialog->priv->layout1_x0_spin       = glade_xml_get_widget (gui, "layout1_x0_spin");
-       dialog->priv->layout1_y0_spin       = glade_xml_get_widget (gui, "layout1_y0_spin");
-       dialog->priv->layout1_dx_spin       = glade_xml_get_widget (gui, "layout1_dx_spin");
-       dialog->priv->layout1_dy_spin       = glade_xml_get_widget (gui, "layout1_dy_spin");
-       dialog->priv->layout2_head_label    = glade_xml_get_widget (gui, "layout2_head_label");
-       dialog->priv->layout2_nx_spin       = glade_xml_get_widget (gui, "layout2_nx_spin");
-       dialog->priv->layout2_ny_spin       = glade_xml_get_widget (gui, "layout2_ny_spin");
-       dialog->priv->layout2_x0_spin       = glade_xml_get_widget (gui, "layout2_x0_spin");
-       dialog->priv->layout2_y0_spin       = glade_xml_get_widget (gui, "layout2_y0_spin");
-       dialog->priv->layout2_dx_spin       = glade_xml_get_widget (gui, "layout2_dx_spin");
-       dialog->priv->layout2_dy_spin       = glade_xml_get_widget (gui, "layout2_dy_spin");
-       dialog->priv->layout_x0_units_label = glade_xml_get_widget (gui, "layout_x0_units_label");
-       dialog->priv->layout_y0_units_label = glade_xml_get_widget (gui, "layout_y0_units_label");
-       dialog->priv->layout_dx_units_label = glade_xml_get_widget (gui, "layout_dx_units_label");
-       dialog->priv->layout_dy_units_label = glade_xml_get_widget (gui, "layout_dy_units_label");
-       dialog->priv->layout_mini_preview   = glade_xml_get_widget (gui, "layout_mini_preview");
-       dialog->priv->layout_test_button    = glade_xml_get_widget (gui, "layout_test_button");
+        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);
@@ -1022,8 +1063,10 @@ construct_layout_page (glTemplateDesigner      *dialog,
        g_signal_connect_swapped (G_OBJECT(dialog->priv->layout_test_button), "clicked",
                                  G_CALLBACK(print_test_cb), dialog);
 
+       gl_debug (DEBUG_TEMPLATE, "END");
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Construct finish page.                                         */
 /*--------------------------------------------------------------------------*/
@@ -1031,17 +1074,12 @@ static void
 construct_finish_page (glTemplateDesigner      *dialog,
                       GdkPixbuf               *logo)
 {
-       GladeXML        *gui;
+       gl_debug (DEBUG_TEMPLATE, "START");
 
-       gui = glade_xml_new (GLABELS_GLADE_DIR "template-designer.glade",
-                             "finish_page", NULL);
-       if (!gui)
-        {
-                g_critical ("Could not open template-designer.glade. gLabels may not be installed correctly!");
-                return;
-        }
+        gl_util_get_builder_widgets (dialog->priv->builder,
+                                     "finish_page", &dialog->priv->finish_page,
+                                     NULL);
 
-       dialog->priv->finish_page = glade_xml_get_widget (gui, "finish_page");
 
         gtk_assistant_append_page (GTK_ASSISTANT (dialog),
                                    dialog->priv->finish_page);
@@ -1059,8 +1097,10 @@ construct_finish_page (glTemplateDesigner      *dialog,
                                          dialog->priv->finish_page,
                                          TRUE);
 
+       gl_debug (DEBUG_TEMPLATE, "END");
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  cancel callback.                                               */
 /*--------------------------------------------------------------------------*/
@@ -1072,18 +1112,23 @@ cancel_cb (glTemplateDesigner *dialog)
 
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  apply callback                                                 */
 /*--------------------------------------------------------------------------*/
 static void
 apply_cb (glTemplateDesigner *dialog)
 {
-       glTemplate *template;
+       lglTemplate *template;
+        gchar       *name;
        
        template = build_template (dialog);
-       gl_template_register (template);
-                                                                               
+       lgl_db_register_template (template);
+        name = lgl_template_get_name (template);
+        gl_mini_preview_pixbuf_cache_add_by_name (name);
+        g_free (name);
 }
+
                          
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  close callback                                                 */
@@ -1095,6 +1140,7 @@ close_cb (glTemplateDesigner *dialog)
        gtk_widget_destroy (GTK_WIDGET(dialog));
 
 }
+
                          
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  prepare page callback                                          */
@@ -1141,6 +1187,7 @@ prepare_cb (glTemplateDesigner      *dialog,
         }
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Handle non-linear forward traversal.                           */
 /*--------------------------------------------------------------------------*/
@@ -1192,6 +1239,7 @@ forward_page_function (gint     current_page,
         return -1;
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Widget on name page "changed" callback.                        */
 /*--------------------------------------------------------------------------*/
@@ -1200,11 +1248,27 @@ name_page_changed_cb (glTemplateDesigner *dialog)
 {
        gchar *brand, *part_num, *desc;
 
-       brand    = gtk_editable_get_chars (GTK_EDITABLE(dialog->priv->brand_entry), 0, -1);
-       part_num = gtk_editable_get_chars (GTK_EDITABLE(dialog->priv->part_num_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);
 
-       if (brand && brand[0] && part_num && part_num[0] && desc && desc[0])
+
+       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),
@@ -1224,14 +1288,15 @@ name_page_changed_cb (glTemplateDesigner *dialog)
        g_free (desc);
 }
                                                                                
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Widget on page size page "changed" callback.                   */
 /*--------------------------------------------------------------------------*/
 static void
 pg_size_page_changed_cb (glTemplateDesigner *dialog)
 {
-       gchar   *page_size_name;
-       glPaper *paper;
+       gchar    *page_size_name;
+       lglPaper *paper;
        
 
        page_size_name =
@@ -1239,10 +1304,10 @@ pg_size_page_changed_cb (glTemplateDesigner *dialog)
 
        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 ) {
+               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),
@@ -1264,13 +1329,14 @@ pg_size_page_changed_cb (glTemplateDesigner *dialog)
                                                   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.                                 */
 /*--------------------------------------------------------------------------*/
@@ -1313,6 +1379,7 @@ rect_size_page_prepare_cb (glTemplateDesigner *dialog)
 
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Prepare round size page.                                       */
 /*--------------------------------------------------------------------------*/
@@ -1343,6 +1410,7 @@ round_size_page_prepare_cb (glTemplateDesigner *dialog)
 
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Prepare cd/dvd size page.                                      */
 /*--------------------------------------------------------------------------*/
@@ -1385,8 +1453,9 @@ cd_size_page_prepare_cb (glTemplateDesigner *dialog)
 
 }
 
+
 /*--------------------------------------------------------------------------*/
-/* PRIVATE.  Layout page widget changed cb.                                 */
+/* PRIVATE.  Prepare Layout page cb.                                        */
 /*--------------------------------------------------------------------------*/
 static void
 layout_page_prepare_cb (glTemplateDesigner *dialog)
@@ -1397,43 +1466,11 @@ layout_page_prepare_cb (glTemplateDesigner *dialog)
        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(dialog->priv->layout1_nx_spin),
-                                        G_CALLBACK(layout_page_changed_cb),
-                                        G_OBJECT(dialog));
-       g_signal_handlers_block_by_func (G_OBJECT(dialog->priv->layout1_ny_spin),
-                                        G_CALLBACK(layout_page_changed_cb),
-                                        G_OBJECT(dialog));
-       g_signal_handlers_block_by_func (G_OBJECT(dialog->priv->layout1_x0_spin),
-                                        G_CALLBACK(layout_page_changed_cb),
-                                        G_OBJECT(dialog));
-       g_signal_handlers_block_by_func (G_OBJECT(dialog->priv->layout1_y0_spin),
-                                        G_CALLBACK(layout_page_changed_cb),
-                                        G_OBJECT(dialog));
-       g_signal_handlers_block_by_func (G_OBJECT(dialog->priv->layout1_dx_spin),
-                                        G_CALLBACK(layout_page_changed_cb),
-                                        G_OBJECT(dialog));
-       g_signal_handlers_block_by_func (G_OBJECT(dialog->priv->layout1_dy_spin),
-                                        G_CALLBACK(layout_page_changed_cb),
-                                        G_OBJECT(dialog));
-       g_signal_handlers_block_by_func (G_OBJECT(dialog->priv->layout2_nx_spin),
-                                        G_CALLBACK(layout_page_changed_cb),
-                                        G_OBJECT(dialog));
-       g_signal_handlers_block_by_func (G_OBJECT(dialog->priv->layout2_ny_spin),
-                                        G_CALLBACK(layout_page_changed_cb),
-                                        G_OBJECT(dialog));
-       g_signal_handlers_block_by_func (G_OBJECT(dialog->priv->layout2_x0_spin),
-                                        G_CALLBACK(layout_page_changed_cb),
-                                        G_OBJECT(dialog));
-       g_signal_handlers_block_by_func (G_OBJECT(dialog->priv->layout2_y0_spin),
-                                        G_CALLBACK(layout_page_changed_cb),
-                                        G_OBJECT(dialog));
-       g_signal_handlers_block_by_func (G_OBJECT(dialog->priv->layout2_dx_spin),
-                                        G_CALLBACK(layout_page_changed_cb),
-                                        G_OBJECT(dialog));
-       g_signal_handlers_block_by_func (G_OBJECT(dialog->priv->layout2_dy_spin),
-                                        G_CALLBACK(layout_page_changed_cb),
-                                        G_OBJECT(dialog));
 
        /* Limit ranges based on already chosen page and label sizes. */
        page_w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin));
@@ -1512,8 +1549,8 @@ layout_page_prepare_cb (glTemplateDesigner *dialog)
 
        /* Set visibility of layout2 widgets as appropriate. */
        nlayouts = gtk_spin_button_get_value (GTK_SPIN_BUTTON (dialog->priv->nlayouts_spin));
-       if ( nlayouts == 1 ) {
-
+       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);
@@ -1522,9 +1559,9 @@ layout_page_prepare_cb (glTemplateDesigner *dialog)
                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 {
-
+       }
+        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);
@@ -1533,74 +1570,49 @@ layout_page_prepare_cb (glTemplateDesigner *dialog)
                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(dialog->priv->layout1_nx_spin),
-                                          G_CALLBACK(layout_page_changed_cb),
-                                          G_OBJECT(dialog));
-       g_signal_handlers_unblock_by_func (G_OBJECT(dialog->priv->layout1_ny_spin),
-                                          G_CALLBACK(layout_page_changed_cb),
-                                          G_OBJECT(dialog));
-       g_signal_handlers_unblock_by_func (G_OBJECT(dialog->priv->layout1_x0_spin),
-                                          G_CALLBACK(layout_page_changed_cb),
-                                          G_OBJECT(dialog));
-       g_signal_handlers_unblock_by_func (G_OBJECT(dialog->priv->layout1_y0_spin),
-                                          G_CALLBACK(layout_page_changed_cb),
-                                          G_OBJECT(dialog));
-       g_signal_handlers_unblock_by_func (G_OBJECT(dialog->priv->layout1_dx_spin),
-                                          G_CALLBACK(layout_page_changed_cb),
-                                          G_OBJECT(dialog));
-       g_signal_handlers_unblock_by_func (G_OBJECT(dialog->priv->layout1_dy_spin),
-                                          G_CALLBACK(layout_page_changed_cb),
-                                          G_OBJECT(dialog));
-       g_signal_handlers_unblock_by_func (G_OBJECT(dialog->priv->layout2_nx_spin),
-                                          G_CALLBACK(layout_page_changed_cb),
-                                          G_OBJECT(dialog));
-       g_signal_handlers_unblock_by_func (G_OBJECT(dialog->priv->layout2_ny_spin),
-                                          G_CALLBACK(layout_page_changed_cb),
-                                          G_OBJECT(dialog));
-       g_signal_handlers_unblock_by_func (G_OBJECT(dialog->priv->layout2_x0_spin),
-                                          G_CALLBACK(layout_page_changed_cb),
-                                          G_OBJECT(dialog));
-       g_signal_handlers_unblock_by_func (G_OBJECT(dialog->priv->layout2_y0_spin),
-                                          G_CALLBACK(layout_page_changed_cb),
-                                          G_OBJECT(dialog));
-       g_signal_handlers_unblock_by_func (G_OBJECT(dialog->priv->layout2_dx_spin),
-                                          G_CALLBACK(layout_page_changed_cb),
-                                          G_OBJECT(dialog));
-       g_signal_handlers_unblock_by_func (G_OBJECT(dialog->priv->layout2_dy_spin),
-                                          G_CALLBACK(layout_page_changed_cb),
-                                          G_OBJECT(dialog));
-
-       layout_page_changed_cb (dialog);
+       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 *dialog)
 {
-       glTemplate *template;
+       lglTemplate *template;
+
+       if (dialog->priv->stop_signals) return;
+       dialog->priv->stop_signals = TRUE;
 
        template = build_template (dialog);
 
-       gl_wdgt_mini_preview_set_template (GL_WDGT_MINI_PREVIEW(dialog->priv->layout_mini_preview),
-                                          template);
+       gl_mini_preview_set_template (GL_MINI_PREVIEW(dialog->priv->layout_mini_preview),
+                                      template);
+
+       lgl_template_free (template);
 
-       gl_template_free (template);
+       dialog->priv->stop_signals = FALSE;
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* PRIVATE.  Print test sheet callback.                                     */
 /*--------------------------------------------------------------------------*/
 static void
 print_test_cb (glTemplateDesigner      *dialog)
 {
-       GObject    *label;
-       glTemplate *template;
-       glPrintOp  *print_op;
+       GObject     *label;
+       lglTemplate *template;
+       glPrintOp   *print_op;
 
        label = gl_label_new ();
 
@@ -1614,39 +1626,39 @@ print_test_cb (glTemplateDesigner      *dialog)
                                  GTK_WINDOW (dialog),
                                  NULL);
 
-       gl_template_free (template);
+       lgl_template_free (template);
        g_object_unref (G_OBJECT(label));
 }
 
+
 /*--------------------------------------------------------------------------*/
 /* Build a template based on current assistant settings.                    */
 /*--------------------------------------------------------------------------*/
-static glTemplate *
+static lglTemplate *
 build_template (glTemplateDesigner      *dialog)
 {
        gdouble               upp;
-       gchar                *brand, *part_num, *name, *desc;
+       gchar                *brand, *part_num, *desc;
        gchar                *page_size_name;
-       glPaper              *paper;
-       glTemplateLabelShape  shape;
-       glTemplateLabelType  *label_type=NULL;
+       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(dialog->priv->brand_entry), 0, -1);
-       part_num = gtk_editable_get_chars (GTK_EDITABLE(dialog->priv->part_num_entry), 0, -1);
-       name     = g_strdup_printf ("%s %s", brand, part_num);
+       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_combo_box_get_active_text (GTK_COMBO_BOX (dialog->priv->pg_size_combo));
-       paper = gl_paper_from_name (page_size_name);
-       if ( g_strcasecmp (paper->id, "Other") == 0 ) {
+       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(dialog->priv->pg_w_spin))
                        / upp;
@@ -1656,7 +1668,7 @@ build_template (glTemplateDesigner      *dialog)
        }
 
        if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_rect_radio))) {
-               shape = GL_TEMPLATE_SHAPE_RECT;
+               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));
@@ -1666,14 +1678,14 @@ build_template (glTemplateDesigner      *dialog)
        }
 
        if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_round_radio))) {
-               shape = GL_TEMPLATE_SHAPE_ROUND;
+               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(dialog->priv->shape_cd_radio))) {
-               shape = GL_TEMPLATE_SHAPE_CD;
+               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));
@@ -1697,71 +1709,61 @@ build_template (glTemplateDesigner      *dialog)
        dy_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_dy_spin));
 
 
-       template = gl_template_new (name, desc, paper->id, paper->width, paper->height);
+       template = lgl_template_new (brand, part_num, desc, paper->id, paper->width, paper->height);
 
        switch (shape) {
-       case GL_TEMPLATE_SHAPE_RECT:
-               label_type =
-                       gl_template_rect_label_type_new ("0",
-                                                        w/upp, h/upp, r/upp,
-                                                        x_waste/upp, y_waste/upp);
+       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_SHAPE_ROUND:
-               label_type =
-                       gl_template_round_label_type_new ("0", r/upp, waste/upp);
+       case LGL_TEMPLATE_FRAME_SHAPE_ROUND:
+               frame = lgl_template_frame_round_new ("0", r/upp, waste/upp);
                break;
-       case GL_TEMPLATE_SHAPE_CD:
-               label_type =
-                       gl_template_cd_label_type_new ("0",
-                                                      radius/upp, hole/upp,
-                                                      w/upp, h/upp,
-                                                      waste/upp);
+       case LGL_TEMPLATE_FRAME_SHAPE_CD:
+               frame = lgl_template_frame_cd_new ("0",
+                                                  radius/upp, hole/upp,
+                                                  w/upp, h/upp,
+                                                  waste/upp);
                break;
        }
-       gl_template_add_label_type (template, label_type);
+       lgl_template_add_frame (template, frame);
 
-       gl_template_add_markup (label_type,
-                               gl_template_markup_margin_new (margin/upp));
+       lgl_template_frame_add_markup (frame,
+                                       lgl_template_markup_margin_new (margin/upp));
 
-       gl_template_add_layout (label_type,
-                               gl_template_layout_new (nx_1, ny_1,
-                                                       x0_1/upp,
-                                                       y0_1/upp,
-                                                       dx_1/upp,
-                                                       dy_1/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) {
-               gl_template_add_layout (label_type,
-                                       gl_template_layout_new (nx_2, ny_2,
-                                                               x0_2/upp,
-                                                               y0_2/upp,
-                                                               dx_2/upp,
-                                                               dy_2/upp));
+               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);
        g_free (part_num);
-       g_free (name);
        g_free (desc);
 
        g_free (page_size_name);
-       gl_paper_free (paper);
+       lgl_paper_free (paper);
 
        return template;
 }
 
-/*****************************************************************************/
-/* 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
+ */