gnucash maint: Merge reg and reg2 variant of print check dialog back into one file

Geert Janssens gjanssens at code.gnucash.org
Thu Mar 24 13:58:51 EDT 2016


Updated	 via  https://github.com/Gnucash/gnucash/commit/39bfeba9 (commit)
	from  https://github.com/Gnucash/gnucash/commit/cde9d784 (commit)



commit 39bfeba930e13a65c05540f839457e9c71cf31ef
Author: Geert Janssens <janssens-geert at telenet.be>
Date:   Thu Mar 24 22:49:27 2016 +0100

    Merge reg and reg2 variant of print check dialog back into one file
    
    There was nothing in the duplicate file that was different
    from the original one except for the plugin_page parameter
    initially passed in. Turns out we don't need anything
    from the plugin_page except for the very generic GtkWindow
    which is actually a member of the generic GncPluginPage
    base object. So pass that window instead and avoid the
    need for differentiation.

diff --git a/src/gnome/CMakeLists.txt b/src/gnome/CMakeLists.txt
index 1faa475..5eed8cc 100644
--- a/src/gnome/CMakeLists.txt
+++ b/src/gnome/CMakeLists.txt
@@ -14,7 +14,6 @@ SET (gnc_gnome_noinst_HEADERS
   dialog-lot-viewer.h
   dialog-new-user.h
   dialog-print-check.h
-  dialog-print-check2.h
   dialog-progress.h
   dialog-sx-editor.h
   dialog-sx-editor2.h
@@ -58,7 +57,6 @@ SET (gnc_gnome_SOURCES
   dialog-price-editor.c
   dialog-price-edit-db.c
   dialog-print-check.c
-  dialog-print-check2.c
   dialog-progress.c
   dialog-sx-editor.c
   dialog-sx-editor2.c
diff --git a/src/gnome/Makefile.am b/src/gnome/Makefile.am
index a498323..2420228 100644
--- a/src/gnome/Makefile.am
+++ b/src/gnome/Makefile.am
@@ -37,7 +37,6 @@ libgnc_gnome_la_SOURCES = \
   dialog-price-editor.c \
   dialog-price-edit-db.c \
   dialog-print-check.c \
-  dialog-print-check2.c \
   dialog-progress.c \
   dialog-sx-editor.c \
   dialog-sx-editor2.c \
@@ -87,7 +86,6 @@ noinst_HEADERS = \
   dialog-lot-viewer.h \
   dialog-new-user.h \
   dialog-print-check.h \
-  dialog-print-check2.h \
   dialog-progress.h \
   dialog-sx-editor.h \
   dialog-sx-editor2.h \
diff --git a/src/gnome/dialog-print-check.c b/src/gnome/dialog-print-check.c
index ed3fd18..d47ce80 100644
--- a/src/gnome/dialog-print-check.c
+++ b/src/gnome/dialog-print-check.c
@@ -277,7 +277,6 @@ struct _print_check_dialog
     GtkWidget *dialog;
     GtkWindow *caller_window;
 
-    GncPluginPageRegister *plugin_page;
     Split *split;
     GList *splits;
 
@@ -1601,7 +1600,7 @@ initialize_format_combobox (PrintCheckDialog *pcd)
  * make a new print check dialog and wait for it.    *
  *****************************************************/
 void
-gnc_ui_print_check_dialog_create(GncPluginPageRegister *plugin_page,
+gnc_ui_print_check_dialog_create(GtkWidget *parent,
                                  GList *splits)
 {
     PrintCheckDialog *pcd;
@@ -1612,7 +1611,7 @@ gnc_ui_print_check_dialog_create(GncPluginPageRegister *plugin_page,
     Transaction *trans = NULL;
 
     pcd = g_new0(PrintCheckDialog, 1);
-    pcd->plugin_page = plugin_page;
+    pcd->caller_window = GTK_WINDOW(parent);
     pcd->splits = g_list_copy(splits);
 
     builder = gtk_builder_new();
@@ -1682,9 +1681,7 @@ gnc_ui_print_check_dialog_create(GncPluginPageRegister *plugin_page,
     pcd->check_rotation = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "check_rotation_entry"));
     pcd->units_combobox = GTK_WIDGET(gtk_builder_get_object (builder, "units_combobox"));
 
-    window = GTK_WINDOW(GNC_PLUGIN_PAGE(plugin_page)->window);
-    gtk_window_set_transient_for(GTK_WINDOW(pcd->dialog), window);
-    pcd->caller_window = GTK_WINDOW(window);
+    gtk_window_set_transient_for(GTK_WINDOW(pcd->dialog), pcd->caller_window);
 
     /* Create and attach the date-format chooser */
     table = GTK_WIDGET(gtk_builder_get_object (builder, "options_table"));
diff --git a/src/gnome/dialog-print-check.h b/src/gnome/dialog-print-check.h
index f315cd1..e36a78e 100644
--- a/src/gnome/dialog-print-check.h
+++ b/src/gnome/dialog-print-check.h
@@ -28,7 +28,7 @@
 
 typedef struct _print_check_dialog PrintCheckDialog;
 
-void gnc_ui_print_check_dialog_create(GncPluginPageRegister *plugin_page,
+void gnc_ui_print_check_dialog_create(GtkWidget *parent,
                                       GList *splits);
 
 #endif
diff --git a/src/gnome/dialog-print-check2.c b/src/gnome/dialog-print-check2.c
deleted file mode 100644
index b9a2cc4..0000000
--- a/src/gnome/dialog-print-check2.c
+++ /dev/null
@@ -1,2648 +0,0 @@
-/********************************************************************\
- * dialog-print-check2.c : dialog to control check printing.         *
- * Copyright (C) 2000 Bill Gribble <grib at billgribble.com>           *
- * Copyright (C) 2006,2007 David Hampton <hampton at employees.org>    *
- *                                                                  *
- * This program 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 (at your option) any later version.              *
- *                                                                  *
- * This program 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, contact:                        *
- *                                                                  *
- * Free Software Foundation           Voice:  +1-617-542-5942       *
- * 51 Franklin Street, Fifth Floor    Fax:    +1-617-542-2652       *
- * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
-\********************************************************************/
-
-/**
- * @file dialog-print-check2.c
- * @brief Print Checks Dialog
- * @author Copyright (C) 2000 Bill Gribble <grib at billgribble.com>
- * @author Copyright (C) 2006,2007 David Hampton <hampton at employees.org>
- */
-
-#include "config.h"
-
-#include <gtk/gtk.h>
-#include <glib/gi18n.h>
-#include <stdio.h>
-#include <locale.h>
-#include <math.h>
-
-#include <gnc-gdate-utils.h>
-#include "qof.h"
-#include "gnc-date.h"
-#include "gnc-prefs.h"
-#include "gnc-numeric.h"
-#include "gnc-plugin-page-register2.h"
-#include "dialog-print-check2.h"
-#include "dialog-utils.h"
-#include "print-session.h"
-#include "gnc-ui.h"
-#include "gnc-date-format.h"
-#include "gnc-ui-util.h"
-#include "gnc-path.h"
-#include "gnc-filepath-utils.h"
-#include "gnc-gkeyfile-utils.h"
-
-#include "gnc-engine.h"
-#include "engine-helpers.h"
-#include "Split.h"
-#include "Transaction.h"
-
-#undef G_LOG_DOMAIN
-#define G_LOG_DOMAIN "gnc.printing.checks"
-
-/* This static indicates the debugging module that this .o belongs to.
- */
-G_GNUC_UNUSED static QofLogModule log_module = "gnc.printing.checks";
-
-#define GNC_PREFS_GROUP             "dialogs.checkprinting"
-#define GNC_PREF_CHECK_FORMAT_GUID  "check-format-guid"
-#define GNC_PREF_CHECK_POSITION     "check-position"
-#define GNC_PREF_FIRST_PAGE_COUNT   "first-page-count"
-#define GNC_PREF_DATE_FORMAT_USER   "date-format-custom"
-#define GNC_PREF_CUSTOM_PAYEE       "custom-payee"
-#define GNC_PREF_CUSTOM_DATE        "custom-date"
-#define GNC_PREF_CUSTOM_WORDS       "custom-amount-words"
-#define GNC_PREF_CUSTOM_NUMBER      "custom-amount-number"
-#define GNC_PREF_CUSTOM_ADDRESS     "custom-address"
-#define GNC_PREF_CUSTOM_NOTES       "custom-notes"
-#define GNC_PREF_CUSTOM_MEMO        "custom-memo"
-#define GNC_PREF_CUSTOM_TRANSLATION "custom-translation"
-#define GNC_PREF_CUSTOM_ROTATION    "custom-rotation"
-#define GNC_PREF_CUSTOM_UNITS       "custom-units"
-#define GNC_PREF_PRINT_DATE_FMT     "print-date-format"
-#define GNC_PREF_DEFAULT_FONT       "default-font"
-#define GNC_PREF_BLOCKING_CHARS     "blocking-chars"
-#define GNC_PREF_SPLITS_AMOUNT      "splits-amount"
-#define GNC_PREF_SPLITS_MEMO        "splits-memo"
-#define GNC_PREF_SPLITS_ACCOUNT     "splits-account"
-
-
-#define DEFAULT_FONT            "sans 12"
-#define CHECK_FMT_DIR           "checks"
-#define CHECK_NAME_EXTENSION    ".chk"
-#define DEGREES_TO_RADIANS      (G_PI / 180.0)
-
-#define BLOCKING_CHAR_OFF	0
-#define BLOCKING_CHAR_ON	1
-
-#define KF_GROUP_TOP       "Top"
-#define KF_GROUP_POS       "Check Positions"
-#define KF_GROUP_ITEMS     "Check Items"
-#define KF_KEY_GUID        "Guid"
-#define KF_KEY_TITLE       "Title"
-#define KF_KEY_ROTATION    "Rotation"
-#define KF_KEY_TRANSLATION "Translation"
-#define KF_KEY_FONT        "Font"
-#define KF_KEY_ALIGN       "Align"
-#define KF_KEY_BLOCKING    "Blocking_Chars"
-#define KF_KEY_SHOW_GRID   "Show_Grid"
-#define KF_KEY_SHOW_BOXES  "Show_Boxes"
-#define KF_KEY_NAMES       "Names"
-#define KF_KEY_HEIGHT      "Height"
-#define KF_KEY_TYPE        "Type"
-#define KF_KEY_COORDS      "Coords"
-#define KF_KEY_TEXT        "Text"
-#define KF_KEY_FILENAME    "Filename"
-#define KF_KEY_DATE_FORMAT "DateFormat"
-#define KF_KEY_SPLITS_AMOUNT  "SplitsAmount"
-#define KF_KEY_SPLITS_MEMO    "SplitsMemo"
-#define KF_KEY_SPLITS_ACCOUNT "SplitsAccount"
-
-/* This enum specifies the columns used in the check format combobox.
- */
-typedef enum format_combo_col_t
-{
-    COL_NAME = 0,               /**< This column holds a copy of the check
-                                 *   format name and is what is displayed to
-                                 *   the user in the combobox. It is NULL for
-                                 *   separator lines. */
-    COL_DATA,                   /**< This column holds a pointer to the check
-                                 *   format data read in from a file.  It is
-                                 *   NULL for the custom check format and for
-                                 *   separator lines. */
-    COL_SEP,                    /**< This column contains the value TRUE if
-                                 *   this entry specifies a separator line. */
-} format_combo_col;
-
-void gnc_ui_print_check_response_cb2 (GtkDialog *dialog, gint response, PrintCheckDialog *pcd);
-void gnc_print_check_format_changed2 (GtkComboBox *widget, PrintCheckDialog *pcd);
-void gnc_print_check_position_changed2 (GtkComboBox *widget, PrintCheckDialog *pcd);
-void gnc_print_check_save_button_clicked2 (GtkButton *button, PrintCheckDialog *pcd);
-void gnc_check_format_title_changed2 (GtkEditable *editable, GtkWidget *ok_button);
-
-static void initialize_format_combobox (PrintCheckDialog *pcd);
-gchar* get_check_address2 (PrintCheckDialog *pcd);
-static gboolean check_format_has_address (PrintCheckDialog *pcd);
-gchar* get_check_splits_amount2 (PrintCheckDialog *pcd);
-gchar* get_check_splits_memo2 (PrintCheckDialog *pcd);
-gchar* get_check_splits_account2 (PrintCheckDialog *pcd);
-
-/* This enum defines the types of items that gnucash knows how to
- * print on checks.  Most refer to specific fields from a gnucash
- * transaction and split, but some are generic items unrelated to
- * gnucash.
- */
-#define ENUM_CHECK_ITEM_TYPE(_) \
-        _(NONE,) \
-        _(PAYEE,) \
-        _(DATE,) \
-        _(NOTES,) \
-        _(CHECK_NUMBER,) \
-                  \
-        _(MEMO,) \
-        _(ACTION,) \
-        _(AMOUNT_NUMBER,) \
-        _(AMOUNT_WORDS,) \
-                         \
-        _(TEXT,) \
-        _(ADDRESS,) \
-        _(DATE_FORMAT,) \
-        _(SPLITS_AMOUNT,) \
-        _(SPLITS_MEMO,) \
-        _(SPLITS_ACCOUNT,) \
-        _(PICTURE,)
-
-DEFINE_ENUM(CheckItemType2, ENUM_CHECK_ITEM_TYPE)
-FROM_STRING_DEC(CheckItemType2, ENUM_CHECK_ITEM_TYPE)
-FROM_STRING_FUNC(CheckItemType2, ENUM_CHECK_ITEM_TYPE)
-AS_STRING_DEC(CheckItemType2, ENUM_CHECK_ITEM_TYPE)
-AS_STRING_FUNC(CheckItemType2, ENUM_CHECK_ITEM_TYPE)
-
-/* This data structure describes a single item printed on a check.
- * It is built from a description in a text file.
- */
-typedef struct _check_item
-{
-
-    CheckItemType2 type;         /**< What type of item is this?  */
-
-    gdouble x, y;               /**< The x/y coordinates where this item should
-                                 *   be printed.  The origin for these
-                                 *   coordinates is determined by the print
-                                 *   system used.  */
-
-    gdouble w, h;               /**< Optional. The width and height of this
-                                 *   item.  Text will be clipped to this
-                                 *   size. Pictures will be shrunk to fit if
-                                 *   necessary.  */
-
-    gchar *filename;            /**< The filename for picture items. Otherwise
-                                 *   unused. */
-
-    gchar *text;                /**< The text to be displayed (for text based
-                                 *   items.) Otherwise unused.  */
-
-    gchar *font;                /**< The font to use for text based items. This
-                                 *   overrides any font in the check format.
-                                 *   Unused for non-text items. */
-
-    gboolean blocking;          /**< Optional. Overrides blocking in the check
-                                 *   format. Default is no blocking characters
-                                 *   are written.  Unused for non-text
-                                 *   items. */
-
-    gboolean print_date_format; /**< Optional.  Print date format.  Only
-                                 *   applies to DATE items.  Default is no
-                                 *   format is written. */
-
-    PangoAlignment align;       /**< The alignment of a text based item. Only
-                                 *   used for text based items when a width is
-                                 *   specified.  */
-} check_item_t;
-
-/* This data structure describes an entire page of checks.  Depending
- * upon the check format, the page may contain multiple checks or
- * only a single check.  The data structure is built from a
- * description in a text file.
- */
-typedef struct _check_format
-{
-
-    gchar *guid;                /**< Unique identifier for this format. */
-
-    const gchar *group;         /**< The group where this format was found. */
-
-    gchar *filename;            /**< The name of the file from which this data
-                                 *   was read.  */
-
-    gchar *title;               /**< Title of this check format. Displayed in
-                                 *   the dialog box. */
-
-    gboolean blocking;          /**< Default for printing blocking characters for
-                                 *   this page of checks.  */
-
-    gboolean print_date_format; /**< Default for printing date format characters for
-                                 *   this page of checks.  */
-
-    gboolean show_grid;         /**< Print a grid pattern on the page */
-
-    gboolean show_boxes;        /**< Print boxes when width and height are
-                                 *   known. */
-
-    gdouble rotation;           /**< Rotate the entire page by this amount. */
-
-    gdouble trans_x;            /**< Move entire page left by this amount. */
-
-    gdouble trans_y;            /**< Move entire page down by this amount. */
-
-    gchar *font;                /**< Default font for this page of checks. */
-
-    gdouble height;             /**< Height of one check on a page. */
-
-    GSList *positions;          /**< Names of the checks on the page. */
-
-    GSList *items;              /**< List of items printed on each check. */
-} check_format_t;
-
-
-/* This data structure is used to manage the print check dialog, and
- * the overall check printing process.  It contains pointers to many
- * of the widgets in the dialog, pointers to the check descriptions
- * that have been read, and also contains the data from the gnucash
- * transaction/split that is to be printed.
- */
-struct _print_check_dialog
-{
-    GtkBuilder *builder;
-    GtkWidget *dialog;
-    GtkWindow *caller_window;
-
-    GncPluginPageRegister2 *plugin_page;
-    Split *split;
-    GList *splits;
-
-    GtkWidget *format_combobox;
-    gint format_max;
-    GtkWidget *position_combobox;
-    gint position_max;
-    GtkSpinButton *first_page_count;
-    GtkWidget *custom_table;
-    GtkSpinButton *payee_x, *payee_y;
-    GtkSpinButton *date_x, *date_y;
-    GtkSpinButton *words_x, *words_y;
-    GtkSpinButton *number_x, *number_y;
-    GtkSpinButton *address_x, *address_y;
-    GtkSpinButton *notes_x, *notes_y;
-    GtkSpinButton *memo_x, *memo_y;
-    GtkSpinButton *splits_amount_x, *splits_amount_y;
-    GtkSpinButton *splits_memo_x, *splits_memo_y;
-    GtkSpinButton *splits_account_x, *splits_account_y;
-    GtkSpinButton *translation_x, *translation_y;
-    GtkSpinButton *check_rotation;
-    GtkWidget *translation_label;
-
-    GtkWidget *units_combobox;
-
-    GtkWidget *date_format;
-
-    GtkWidget *check_address_name;
-    GtkWidget *check_address_1;
-    GtkWidget *check_address_2;
-    GtkWidget *check_address_3;
-    GtkWidget *check_address_4;
-
-    gchar *default_font;
-
-    check_format_t *selected_format;
-};
-
-
-/* This function walks ths list of available check formats looking for a
- * specific format as specified by guid number.  If found, a pointer to it is
- * returned to the caller.  Additionally, if the caller passed a pointer to a
- * GtkTreeIter, then the iter for that entry will also be returned.
- */
-static check_format_t *
-find_existing_format (GtkListStore *store, gchar *guid, GtkTreeIter *iter_out)
-{
-    GtkTreeIter iter;
-    check_format_t *format;
-
-    g_return_val_if_fail(store, NULL);
-    g_return_val_if_fail(guid, NULL);
-
-    if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter))
-        return NULL;
-
-    do
-    {
-        gtk_tree_model_get(GTK_TREE_MODEL(store), &iter,
-                           COL_DATA, &format, -1);
-        if (format == NULL)
-            continue;
-        if (strcmp(format->guid, guid) != 0)
-            continue;
-
-        if (iter_out)
-            *iter_out = iter;
-        return format;
-    }
-    while (gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &iter));
-
-    return NULL;
-}
-
-
-/* This function returns a string containing the check address in a five-line
- * format.
- *
- * Note that the string needs to be freed with g_free.
- */
-gchar *
-get_check_address2( PrintCheckDialog *pcd)
-{
-    gchar *address;
-    address = g_strconcat(gtk_entry_get_text(GTK_ENTRY(pcd->check_address_name)), "\n",
-                          gtk_entry_get_text(GTK_ENTRY(pcd->check_address_1)), "\n",
-                          gtk_entry_get_text(GTK_ENTRY(pcd->check_address_2)), "\n",
-                          gtk_entry_get_text(GTK_ENTRY(pcd->check_address_3)), "\n",
-                          gtk_entry_get_text(GTK_ENTRY(pcd->check_address_4)),
-                          NULL);
-    return address;
-}
-
-
-//@{
-/** @name Split printing functions */
-
-/* This function formats the splits amounts for printing.
- */
-gchar *
-get_check_splits_amount2(PrintCheckDialog *pcd)
-{
-    gchar* amount = NULL;
-    Transaction *trans;
-    GList *node;
-    SplitList* s_list;
-
-    trans = xaccSplitGetParent(pcd->split);
-    s_list = xaccTransGetSplitList(trans);
-    if ( !s_list ) return NULL;
-
-    amount = g_strconcat("", NULL);
-    node = s_list;
-    while ( node )
-    {
-        Split *split = node->data;
-        /* Include all splits except the main split for the check */
-        if (split != pcd->split)
-        {
-            const gchar* split_amount;
-            gchar* amt_temp;
-            split_amount = xaccPrintAmount(xaccSplitGetAmount(split), gnc_split_amount_print_info(split, TRUE));
-            amt_temp = amount;
-            if (amount && *amount)
-                amount = g_strconcat(amt_temp, "\n", split_amount, NULL);
-            else
-                amount = g_strconcat(amt_temp, split_amount, NULL);
-            g_free(amt_temp);
-        }
-        node = node->next;
-    }
-    return amount;
-}
-
-
-/* This function formats the splits memo fields for printing.
- */
-gchar *
-get_check_splits_memo2(PrintCheckDialog *pcd)
-{
-    gchar* memo = NULL;
-    const gchar* split_memo;
-    Transaction *trans;
-    GList *node;
-    SplitList* s_list;
-
-    trans = xaccSplitGetParent(pcd->split);
-    s_list = xaccTransGetSplitList(trans);
-    if ( !s_list ) return NULL;
-
-    memo = g_strconcat("", NULL);
-    node = s_list;
-    while ( node )
-    {
-        Split *split = node->data;
-        /* Include all splits except the main split for the check */
-        if (split != pcd->split)
-        {
-            gchar* memo_temp;
-            split_memo = xaccSplitGetMemo(split);
-            memo_temp = memo;
-            if (memo && *memo)
-                memo = g_strconcat(memo_temp, "\n", split_memo, NULL);
-            else
-                memo = g_strconcat(memo_temp, split_memo, NULL);
-            g_free(memo_temp);
-        }
-        node = node->next;
-    }
-    return memo;
-}
-
-
-/* This function formats the splits accounts for printing.
- */
-gchar *
-get_check_splits_account2(PrintCheckDialog *pcd)
-{
-    gchar* account = NULL;
-    Transaction *trans;
-    GList *node;
-    SplitList* s_list;
-
-    trans = xaccSplitGetParent(pcd->split);
-    s_list = xaccTransGetSplitList(trans);
-    if ( !s_list ) return NULL;
-
-    account = g_strconcat("", NULL);
-    node = s_list;
-    while ( node )
-    {
-        Split *split = node->data;
-        /* Include all splits except the main split for the check */
-        if (split != pcd->split)
-        {
-            gchar* account_temp;
-            const gchar* aName = NULL;
-            Account *pAccount;
-            pAccount = xaccSplitGetAccount(split);
-            aName = gnc_get_account_name_for_register(pAccount);
-            account_temp = account;
-            if (account && *account)
-                account = g_strconcat(account_temp, "\n", aName, NULL);
-            else
-                account = g_strconcat(account_temp, aName, NULL);
-            g_free(account_temp);
-        }
-        node = node->next;
-    }
-    return account;
-}
-//@}
-
-
-/* This function determines if an address item is present in the check format.
- */
-static gboolean
-check_format_has_address ( PrintCheckDialog *pcd )
-{
-    /* check format for an ADDRESS item */
-    check_item_t *item = NULL;
-    GSList *elem;
-    check_format_t *format = NULL;
-
-    if ( !pcd ) return FALSE;
-
-    /* If we're printing more than one check no addresses are allowed */
-    if (g_list_length(pcd->splits) != 1)
-        return FALSE;
-
-    /* if format is NULL, then the custom format is being used
-     * which has an ADDRESS item by definition */
-    format = pcd->selected_format;
-    if ( !format ) return TRUE;
-
-    for (elem = pcd->selected_format->items; elem; elem = g_slist_next(elem))
-    {
-        item = elem->data;
-        if ( item->type == ADDRESS ) return TRUE;
-    }
-    return FALSE;
-}
-
-
-static void
-gnc_ui_print_save_dialog(PrintCheckDialog *pcd)
-{
-    GtkTreeModel *model;
-    GtkTreeIter iter;
-    check_format_t *check;
-    const gchar *format;
-    gint active;
-
-    /* Options page */
-    if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(pcd->format_combobox),
-                                      &iter))
-    {
-        model = gtk_combo_box_get_model(GTK_COMBO_BOX(pcd->format_combobox));
-        gtk_tree_model_get(model, &iter, COL_DATA, &check, -1);
-        gnc_prefs_set_string (GNC_PREFS_GROUP, GNC_PREF_CHECK_FORMAT_GUID,
-                              check ? check->guid : "custom");
-    }
-    active = gtk_combo_box_get_active(GTK_COMBO_BOX(pcd->position_combobox));
-    gnc_prefs_set_int(GNC_PREFS_GROUP, GNC_PREF_CHECK_POSITION, active);
-    active = gtk_spin_button_get_value_as_int(pcd->first_page_count);
-    gnc_prefs_set_int(GNC_PREFS_GROUP, GNC_PREF_FIRST_PAGE_COUNT, active);
-    active = gnc_date_format_get_format (GNC_DATE_FORMAT(pcd->date_format));
-    gnc_prefs_set_int(GNC_PREFS_GROUP, GNC_PREF_DATE_FORMAT, active);
-    if (active == QOF_DATE_FORMAT_CUSTOM)
-    {
-        format = gnc_date_format_get_custom (GNC_DATE_FORMAT(pcd->date_format));
-        gnc_prefs_set_string (GNC_PREFS_GROUP, GNC_PREF_DATE_FORMAT_USER, format);
-    }
-    else
-    {
-        gnc_prefs_reset (GNC_PREFS_GROUP, GNC_PREF_DATE_FORMAT_USER);
-    }
-
-    /* Custom format page */
-    gnc_prefs_set_coords(GNC_PREFS_GROUP, GNC_PREF_CUSTOM_PAYEE,
-                         gtk_spin_button_get_value(pcd->payee_x),
-                         gtk_spin_button_get_value(pcd->payee_y));
-    gnc_prefs_set_coords(GNC_PREFS_GROUP, GNC_PREF_CUSTOM_DATE,
-                         gtk_spin_button_get_value(pcd->date_x),
-                         gtk_spin_button_get_value(pcd->date_y));
-    gnc_prefs_set_coords(GNC_PREFS_GROUP, GNC_PREF_CUSTOM_WORDS,
-                         gtk_spin_button_get_value(pcd->words_x),
-                         gtk_spin_button_get_value(pcd->words_y));
-    gnc_prefs_set_coords(GNC_PREFS_GROUP, GNC_PREF_CUSTOM_NUMBER,
-                         gtk_spin_button_get_value(pcd->number_x),
-                         gtk_spin_button_get_value(pcd->number_y));
-    gnc_prefs_set_coords(GNC_PREFS_GROUP, GNC_PREF_CUSTOM_NOTES,
-                         gtk_spin_button_get_value(pcd->notes_x),
-                         gtk_spin_button_get_value(pcd->notes_y));
-    gnc_prefs_set_coords(GNC_PREFS_GROUP, GNC_PREF_CUSTOM_MEMO,
-                         gtk_spin_button_get_value(pcd->memo_x),
-                         gtk_spin_button_get_value(pcd->memo_y));
-    gnc_prefs_set_coords(GNC_PREFS_GROUP, GNC_PREF_CUSTOM_ADDRESS,
-                         gtk_spin_button_get_value(pcd->address_x),
-                         gtk_spin_button_get_value(pcd->address_y));
-    gnc_prefs_set_coords(GNC_PREFS_GROUP, GNC_PREF_SPLITS_AMOUNT,
-                         gtk_spin_button_get_value(pcd->splits_amount_x),
-                         gtk_spin_button_get_value(pcd->splits_amount_y));
-    gnc_prefs_set_coords(GNC_PREFS_GROUP, GNC_PREF_SPLITS_MEMO,
-                         gtk_spin_button_get_value(pcd->splits_memo_x),
-                         gtk_spin_button_get_value(pcd->splits_memo_y));
-    gnc_prefs_set_coords(GNC_PREFS_GROUP, GNC_PREF_SPLITS_ACCOUNT,
-                         gtk_spin_button_get_value(pcd->splits_account_x),
-                         gtk_spin_button_get_value(pcd->splits_account_y));
-    gnc_prefs_set_coords(GNC_PREFS_GROUP, GNC_PREF_CUSTOM_TRANSLATION,
-                         gtk_spin_button_get_value(pcd->translation_x),
-                         gtk_spin_button_get_value(pcd->translation_y));
-    gnc_prefs_set_float(GNC_PREFS_GROUP, GNC_PREF_CUSTOM_ROTATION,
-                        gtk_spin_button_get_value(pcd->check_rotation));
-    active = gtk_combo_box_get_active(GTK_COMBO_BOX(pcd->units_combobox));
-    gnc_prefs_set_int(GNC_PREFS_GROUP, GNC_PREF_CUSTOM_UNITS, active);
-}
-
-
-static void
-gnc_ui_print_restore_dialog(PrintCheckDialog *pcd)
-{
-    GtkTreeModel *model;
-    GtkTreeIter iter;
-    gchar *format, *guid;
-    gdouble x, y;
-    gint active;
-
-    /* Options page */
-    guid = gnc_prefs_get_string (GNC_PREFS_GROUP, GNC_PREF_CHECK_FORMAT_GUID);
-    if (guid == NULL)
-        gtk_combo_box_set_active(GTK_COMBO_BOX(pcd->format_combobox), 0);
-    else if (strcmp(guid, "custom") == 0)
-        gtk_combo_box_set_active(GTK_COMBO_BOX(pcd->format_combobox),
-                                 pcd->format_max - 1);
-    else
-    {
-        model = gtk_combo_box_get_model(GTK_COMBO_BOX(pcd->format_combobox));
-        if (find_existing_format(GTK_LIST_STORE(model), guid, &iter))
-        {
-            gtk_combo_box_set_active_iter(GTK_COMBO_BOX(pcd->format_combobox), &iter);
-        }
-        else
-        {
-            gtk_combo_box_set_active(GTK_COMBO_BOX(pcd->format_combobox), 0);
-        }
-    }
-    active = gnc_prefs_get_int(GNC_PREFS_GROUP, GNC_PREF_CHECK_POSITION);
-
-    /* If the check format used last time no longer exists, then the saved check
-       position may be invalid.  If so set it to the first position. */
-    if (active < 0 || active > pcd->position_max)
-        active = 0;
-    gtk_combo_box_set_active(GTK_COMBO_BOX(pcd->position_combobox), active);
-    active = gnc_prefs_get_int(GNC_PREFS_GROUP, GNC_PREF_FIRST_PAGE_COUNT);
-    gtk_spin_button_set_value(pcd->first_page_count, (gdouble) active);
-    active = gnc_prefs_get_int(GNC_PREFS_GROUP, GNC_PREF_DATE_FORMAT);
-    gnc_date_format_set_format(GNC_DATE_FORMAT(pcd->date_format), active);
-    if (active == QOF_DATE_FORMAT_CUSTOM)
-    {
-        format = gnc_prefs_get_string (GNC_PREFS_GROUP, GNC_PREF_DATE_FORMAT_USER);
-        if (format)
-        {
-            gnc_date_format_set_custom(GNC_DATE_FORMAT(pcd->date_format), format);
-            g_free(format);
-        }
-    }
-
-    /* Custom format page */
-    gnc_prefs_get_coords(GNC_PREFS_GROUP, GNC_PREF_CUSTOM_PAYEE, &x, &y);
-    gtk_spin_button_set_value(pcd->payee_x, x);
-    gtk_spin_button_set_value(pcd->payee_y, y);
-
-    gnc_prefs_get_coords(GNC_PREFS_GROUP, GNC_PREF_CUSTOM_DATE, &x, &y);
-    gtk_spin_button_set_value(pcd->date_x, x);
-    gtk_spin_button_set_value(pcd->date_y, y);
-    gnc_prefs_get_coords(GNC_PREFS_GROUP, GNC_PREF_CUSTOM_WORDS, &x, &y);
-    gtk_spin_button_set_value(pcd->words_x, x);
-    gtk_spin_button_set_value(pcd->words_y, y);
-    gnc_prefs_get_coords(GNC_PREFS_GROUP, GNC_PREF_CUSTOM_NUMBER, &x, &y);
-    gtk_spin_button_set_value(pcd->number_x, x);
-    gtk_spin_button_set_value(pcd->number_y, y);
-    gnc_prefs_get_coords(GNC_PREFS_GROUP, GNC_PREF_CUSTOM_ADDRESS, &x, &y);
-    gtk_spin_button_set_value(pcd->address_x, x);
-    gtk_spin_button_set_value(pcd->address_y, y);
-    gnc_prefs_get_coords(GNC_PREFS_GROUP, GNC_PREF_CUSTOM_NOTES, &x, &y);
-    gtk_spin_button_set_value(pcd->notes_x, x);
-    gtk_spin_button_set_value(pcd->notes_y, y);
-    gnc_prefs_get_coords(GNC_PREFS_GROUP, GNC_PREF_CUSTOM_MEMO, &x, &y);
-    gtk_spin_button_set_value(pcd->memo_x, x);
-    gtk_spin_button_set_value(pcd->memo_y, y);
-    gnc_prefs_get_coords(GNC_PREFS_GROUP, GNC_PREF_SPLITS_AMOUNT, &x, &y);
-    gtk_spin_button_set_value(pcd->splits_amount_x, x);
-    gtk_spin_button_set_value(pcd->splits_amount_y, y);
-    gnc_prefs_get_coords(GNC_PREFS_GROUP, GNC_PREF_SPLITS_MEMO, &x, &y);
-    gtk_spin_button_set_value(pcd->splits_memo_x, x);
-    gtk_spin_button_set_value(pcd->splits_memo_y, y);
-    gnc_prefs_get_coords(GNC_PREFS_GROUP, GNC_PREF_SPLITS_ACCOUNT, &x, &y);
-    gtk_spin_button_set_value(pcd->splits_account_x, x);
-    gtk_spin_button_set_value(pcd->splits_account_y, y);
-    gnc_prefs_get_coords(GNC_PREFS_GROUP, GNC_PREF_CUSTOM_TRANSLATION, &x, &y);
-    gtk_spin_button_set_value(pcd->translation_x, x);
-    gtk_spin_button_set_value(pcd->translation_y, y);
-    x = gnc_prefs_get_float(GNC_PREFS_GROUP, GNC_PREF_CUSTOM_ROTATION);
-    gtk_spin_button_set_value(pcd->check_rotation, x);
-    active = gnc_prefs_get_int(GNC_PREFS_GROUP, GNC_PREF_CUSTOM_UNITS);
-    gtk_combo_box_set_active(GTK_COMBO_BOX(pcd->units_combobox), active);
-}
-
-
-static gdouble
-pcd_get_custom_multip(PrintCheckDialog *pcd)
-{
-    gint selected;
-
-    selected = gtk_combo_box_get_active(GTK_COMBO_BOX(pcd->units_combobox));
-    switch (selected)
-    {
-    default:
-        return 72.0;        /* inches */
-    case 1:
-        return 28.346;      /* cm */
-    case 2:
-        return 2.8346;      /* mm */
-    case 3:
-        return 1.0;         /* points */
-    }
-}
-
-
-/* This function saves a coordinate pair into a check description file.  It
- * extracts the values from the spin buttons, adjusts them according to the
- * unit multiplier (inches, pixels, etc), then adds them to the gKeyFile.
- */
-static void
-pcd_key_file_save_xy (GKeyFile *key_file, const gchar *group_name,
-                      const gchar *key_name, gdouble multip,
-                      GtkSpinButton *spin0, GtkSpinButton *spin1)
-{
-    gdouble dd[2];
-
-    dd[0] = multip * gtk_spin_button_get_value(spin0);
-    dd[1] = multip * gtk_spin_button_get_value(spin1);
-
-    /* Clip the numbers to three decimal places. */
-    dd[0] = round(dd[0] * 1000) / 1000;
-    dd[1] = round(dd[1] * 1000) / 1000;
-    g_key_file_set_double_list(key_file, group_name, key_name, dd, 2);
-}
-
-
-/* This function saves the information about a single printed item into a
- * check description file.  It uses a helper function to extracts and save the
- * item coordinates.
- */
-static void
-pcd_key_file_save_item_xy (GKeyFile *key_file, int index,
-                           CheckItemType2 type, gdouble multip,
-                           GtkSpinButton *spin0, GtkSpinButton *spin1)
-{
-    gchar *key;
-    key = g_strdup_printf("Type_%d", index);
-    g_key_file_set_string(key_file, KF_GROUP_ITEMS, key,
-                          CheckItemType2asString(type));
-    g_free(key);
-    key = g_strdup_printf("Coords_%d", index);
-    pcd_key_file_save_xy(key_file, KF_GROUP_ITEMS, key, multip, spin0, spin1);
-    g_free(key);
-}
-
-
-/* This function saves all of the information from the custom check dialog
- *  into a check description file.
- */
-static void
-pcd_save_custom_data(PrintCheckDialog *pcd, const gchar *title)
-{
-    GKeyFile *key_file;
-    GError *error = NULL;
-    GtkWidget *dialog;
-    gdouble multip;
-    gint i = 1;
-    GncGUID guid;
-    char buf[GUID_ENCODING_LENGTH+1];
-    gchar *filename, *pathname;
-
-    multip = pcd_get_custom_multip(pcd);
-
-    key_file = g_key_file_new();
-    guid_new(&guid);
-    guid_to_string_buff(&guid, buf);
-    g_key_file_set_string(key_file, KF_GROUP_TOP, KF_KEY_GUID, buf);
-    g_key_file_set_string(key_file, KF_GROUP_TOP, KF_KEY_TITLE, title);
-    g_key_file_set_boolean(key_file, KF_GROUP_TOP, KF_KEY_SHOW_GRID, FALSE);
-    g_key_file_set_boolean(key_file, KF_GROUP_TOP, KF_KEY_SHOW_BOXES, FALSE);
-    g_key_file_set_double(key_file, KF_GROUP_TOP, KF_KEY_ROTATION,
-                          gtk_spin_button_get_value(pcd->check_rotation));
-    pcd_key_file_save_xy(key_file, KF_GROUP_TOP, KF_KEY_TRANSLATION, multip,
-                         pcd->translation_x, pcd->translation_y);
-
-    pcd_key_file_save_item_xy(key_file, i++, PAYEE, multip,
-                              pcd->payee_x, pcd->payee_y);
-    pcd_key_file_save_item_xy(key_file, i++, DATE, multip,
-                              pcd->date_x, pcd->date_y);
-    pcd_key_file_save_item_xy(key_file, i++, AMOUNT_WORDS, multip,
-                              pcd->words_x, pcd->words_y);
-    pcd_key_file_save_item_xy(key_file, i++, AMOUNT_NUMBER, multip,
-                              pcd->number_x, pcd->number_y);
-    pcd_key_file_save_item_xy(key_file, i++, ADDRESS, multip,
-                              pcd->address_x, pcd->address_y);
-    pcd_key_file_save_item_xy(key_file, i++, NOTES, multip,
-                              pcd->notes_x, pcd->notes_y);
-    pcd_key_file_save_item_xy(key_file, i++, MEMO, multip,
-                              pcd->memo_x, pcd->memo_y);
-    pcd_key_file_save_item_xy(key_file, i++, SPLITS_AMOUNT, multip,
-                              pcd->splits_amount_x, pcd->splits_amount_y);
-    pcd_key_file_save_item_xy(key_file, i++, SPLITS_MEMO, multip,
-                              pcd->splits_memo_x, pcd->splits_memo_y);
-    pcd_key_file_save_item_xy(key_file, i++, SPLITS_ACCOUNT, multip,
-                              pcd->splits_account_x, pcd->splits_account_y);
-
-    filename = g_strconcat(title, CHECK_NAME_EXTENSION, NULL);
-    pathname = g_build_filename(gnc_dotgnucash_dir(), CHECK_FMT_DIR,
-                                filename, NULL);
-
-    if (gnc_key_file_save_to_file(pathname, key_file, &error))
-    {
-        if (!gnc_prefs_get_bool(GNC_PREFS_GROUP, GNC_PREF_PRINT_DATE_FMT))
-            /* Reload the format combo box and reselect the "custom" entry */
-            initialize_format_combobox(pcd);
-
-        gtk_combo_box_set_active(GTK_COMBO_BOX(pcd->format_combobox),
-                                 pcd->format_max - 1);
-    }
-    else
-    {
-        dialog = gtk_message_dialog_new(GTK_WINDOW(pcd->dialog),
-                                        GTK_DIALOG_DESTROY_WITH_PARENT,
-                                        GTK_MESSAGE_ERROR,
-                                        GTK_BUTTONS_CLOSE, "%s",
-                                        _("Cannot save check format file."));
-        gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
-                "%s", error->message);
-        gtk_dialog_run(GTK_DIALOG(dialog));
-        gtk_widget_destroy(dialog);
-        g_error_free(error);
-    }
-    g_free(pathname);
-    g_free(filename);
-}
-
-
-/* This function makes the OK button active iff a title has been entered.
- */
-void
-gnc_check_format_title_changed2 (GtkEditable *editable, GtkWidget *ok_button)
-{
-    const gchar *text;
-    gboolean sensitive;
-
-    text = gtk_entry_get_text(GTK_ENTRY(editable));
-    sensitive = text && *text;
-    gtk_widget_set_sensitive(ok_button, sensitive);
-}
-
-
-/* This function is called when the user clicks the "save format" button in
- * the check printing dialog.  It presents another dialog to the user to get
- * the filename for saving the data.
- */
-void
-gnc_print_check_save_button_clicked2(GtkButton *unused, PrintCheckDialog *pcd)
-{
-    GtkWidget *dialog, *entry, *button;
-    GtkBuilder *builder;
-    gchar *title;
-
-    builder = gtk_builder_new();
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "Format Title Dialog");
-
-    /* Get a title for the new check format. */
-    dialog = GTK_WIDGET(gtk_builder_get_object (builder, "Format Title Dialog"));
-    entry = GTK_WIDGET(gtk_builder_get_object (builder, "format_title"));
-    button = GTK_WIDGET(gtk_builder_get_object (builder, "ok_button"));
-    gnc_check_format_title_changed2(GTK_EDITABLE(entry), button);
-    gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, pcd);
-
-    gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(pcd->dialog));
-    if (gtk_dialog_run (GTK_DIALOG (dialog)) != GTK_RESPONSE_OK)
-    {
-        gtk_widget_destroy(dialog);
-        g_object_unref(G_OBJECT(builder));
-        return;
-    }
-
-    title = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
-    gtk_widget_destroy (dialog);
-
-    g_object_unref(G_OBJECT(builder));
-
-    pcd_save_custom_data(pcd, title);
-    g_free(title);
-}
-
-
-/* This function is an auxiliary debugging function for converting an array of
- * doubles into a printable string.
- */
-static gchar *
-doubles_to_string(gdouble *dd, gint len)
-{
-    GString *str;
-    gint i;
-
-    str = g_string_new_len(NULL, 50);
-    for (i = 0; i < len; i++)
-        g_string_append_printf(str, "%f ", dd[i]);
-    return g_string_free(str, FALSE);
-}
-
-
-/* This function reads in the information describing the placement for each
- * item to be printed on a check.  This information is all relative to the
- * upper left hand corner of a "check".  See the format_read_multicheck_info()
- * function for determining if there are multiple checks on a single page of
- * paper. This data is build into a linked list and saved as part of the check
- * format information.  These items will be printed in the same order they are
- * read, meaning that items listed later in the date file can be printed over
- * top of items that appear earlier in the file.
- */
-static GSList *
-format_read_item_placement(const gchar *file,
-                           GKeyFile *key_file, check_format_t *format)
-{
-    check_item_t *data = NULL;
-    GError *error = NULL;
-    GSList *list = NULL;
-    gchar *key, *value, *name;
-    int item_num;
-    gboolean bval;
-    gdouble *dd;
-    gsize dd_len;
-
-    /* Read until failure. */
-    for (item_num = 1;; item_num++)
-    {
-
-        /* Create the per-item data structure */
-        data = g_new0(check_item_t, 1);
-        if (NULL == data)
-            return list;
-
-        /* Get the item type */
-        key = g_strdup_printf("%s_%d", KF_KEY_TYPE, item_num);
-        value = g_key_file_get_string(key_file, KF_GROUP_ITEMS, key, &error);
-        if (error)
-        {
-            if ((error->domain == G_KEY_FILE_ERROR)
-                    && (error->code == G_KEY_FILE_ERROR_KEY_NOT_FOUND))
-            {
-                /* This is the expected exit from this function. */
-                goto cleanup;
-            }
-            goto failed;
-        }
-        g_debug("Check file %s, group %s, key %s, value: %s",
-                file, KF_GROUP_ITEMS, key, value);
-        g_free(key);
-
-        /* Convert the type from a string to an enum, ignoring case. */
-        name = g_utf8_strup(value, -1);
-        data->type = CheckItemType2fromString(name);
-        g_free(name);
-        g_free(value);
-
-
-        /* Get the item location */
-        key = g_strdup_printf("%s_%d", KF_KEY_COORDS, item_num);
-        dd = g_key_file_get_double_list(key_file, KF_GROUP_ITEMS,
-                                        key, &dd_len, &error);
-        if (error)
-            goto failed;
-        value = doubles_to_string(dd, dd_len);
-        g_debug("Check file %s, group %s, key %s, length %"G_GSIZE_FORMAT"; values: %s",
-                file, KF_GROUP_ITEMS, key, dd_len, value);
-        g_free(value);
-
-        /* Must have "x;y" or "x;y;w;h". */
-        switch (dd_len)
-        {
-        case 4:
-            data->w = dd[2];
-            data->h = dd[3];
-            /* fall through */
-        case 2:
-            data->x = dd[0];
-            data->y = dd[1];
-            break;
-        default:
-            g_warning
-            ("Check file %s, group %s, key %s, error: 2 or 4 values only",
-             file, KF_GROUP_ITEMS, key);
-            goto cleanup;
-        }
-        g_free(dd);
-        g_free(key);
-
-        /* Any text item can specify:
-         *   a font  FONT_n
-         *   an alignment if a width was provided for the item  ALIGN_n
-         *   blocking chars flag  BLOCKING_CHARS_n
-         * These values are optional and do not cause a failure if they are missing. */
-
-        if (data->type != PICTURE)
-        {
-            key = g_strdup_printf("%s_%d", KF_KEY_FONT, item_num);
-            data->font =
-                g_key_file_get_string(key_file, KF_GROUP_ITEMS, key, &error);
-            if (!error)
-            {
-                g_debug("Check file %s, group %s, key %s, value: %s",
-                        file, KF_GROUP_ITEMS, key, data->font);
-            }
-            else
-            {
-                if (!((error->domain == G_KEY_FILE_ERROR)
-                        && (error->code == G_KEY_FILE_ERROR_KEY_NOT_FOUND)))
-                    g_warning("Check file %s, group %s, key %s, error: %s",
-                              file, KF_GROUP_ITEMS, key, error->message);
-                g_clear_error(&error);
-            }
-            g_free(key);
-
-            key = g_strdup_printf("%s_%d", KF_KEY_ALIGN, item_num);
-            value =
-                g_key_file_get_string(key_file, KF_GROUP_ITEMS, key, &error);
-            if (!error)
-            {
-                g_debug("Check file %s, group %s, key %s, value: %s",
-                        file, KF_GROUP_ITEMS, key, value);
-                name = g_utf8_strdown(value, -1);
-                if (strcmp(name, "right") == 0)
-                    data->align = PANGO_ALIGN_RIGHT;
-                else if (strcmp(name, "center") == 0)
-                    data->align = PANGO_ALIGN_CENTER;
-                else
-                    data->align = PANGO_ALIGN_LEFT;
-                g_free(name);
-                g_free(value);
-            }
-            else
-            {
-                if (!((error->domain == G_KEY_FILE_ERROR)
-                        && (error->code == G_KEY_FILE_ERROR_KEY_NOT_FOUND)))
-                    g_warning("Check file %s, group %s, key %s, error: %s",
-                              file, KF_GROUP_ITEMS, key, error->message);
-                data->align = PANGO_ALIGN_LEFT;
-                g_clear_error(&error);
-            }
-            g_free(key);
-
-            key = g_strdup_printf("%s_%d", KF_KEY_BLOCKING, item_num);
-            bval =
-                g_key_file_get_boolean(key_file, KF_GROUP_ITEMS, key, &error);
-            if (!error)
-            {
-                g_debug("Check file %s, group %s, key %s, value: %d",
-                        file, KF_GROUP_ITEMS, key, bval);
-                data->blocking = bval;
-            }
-            else
-            {
-                if (!((error->domain == G_KEY_FILE_ERROR)
-                        && (error->code == G_KEY_FILE_ERROR_KEY_NOT_FOUND)))
-                    g_warning("Check file %s, group %s, key %s, error: %s",
-                              file, KF_GROUP_ITEMS, key, error->message);
-                data->blocking = format->blocking;
-                g_clear_error(&error);
-            }
-            g_free(key);
-        }
-        /* Get any extra data for specific items. */
-        switch (data->type)
-        {
-        case PICTURE:
-            key = g_strdup_printf("%s_%d", KF_KEY_FILENAME, item_num);
-            data->filename =
-                g_key_file_get_string(key_file, KF_GROUP_ITEMS, key,
-                                      &error);
-            if (error)
-                goto failed;
-            g_debug("Check file %s, group %s, key %s, value: %s",
-                    file, KF_GROUP_ITEMS, key, data->filename);
-            g_free(key);
-            break;
-        case TEXT:
-            key = g_strdup_printf("%s_%d", KF_KEY_TEXT, item_num);
-            data->text =
-                g_key_file_get_string(key_file, KF_GROUP_ITEMS, key,
-                                      &error);
-            if (error)
-                goto failed;
-            g_debug("Check file %s, group %s, key %s, value: %s",
-                    file, KF_GROUP_ITEMS, key, data->text);
-            g_free(key);
-            break;
-        case DATE:
-            /* no error if the date_format is not present */
-            key = g_strdup_printf("%s_%d", KF_KEY_DATE_FORMAT, item_num);
-            bval = g_key_file_get_boolean(key_file, KF_GROUP_ITEMS, key, &error);
-            if (!error)
-            {
-                g_debug("Check file %s, group %s, key %s, value: %d",
-                        file, KF_GROUP_ITEMS, key, bval);
-                data->print_date_format = bval;
-            }
-            else
-            {
-                if (!((error->domain == G_KEY_FILE_ERROR)
-                        && (error->code == G_KEY_FILE_ERROR_KEY_NOT_FOUND)))
-                    g_warning("Check file %s, group %s, key %s, error: %s",
-                              file, KF_GROUP_ITEMS, key, error->message);
-                data->print_date_format = format->print_date_format;
-                g_clear_error(&error);
-            }
-            g_free(key);
-            break;
-        default:
-            break;
-        }
-
-        list = g_slist_append(list, data);
-        data = NULL;
-    }
-
-    /* Should never be reached. */
-    return list;
-
-failed:
-    g_warning("Check file %s, group %s, key %s, error: %s",
-              file, KF_GROUP_ITEMS, key, error->message);
-cleanup:
-    if (error)
-        g_error_free(error);
-    if (data)
-        g_free(data);
-    if (key)
-        g_free(key);
-    return list;
-}
-
-
-/* Free the data describing the placement of a single item on a check.
- */
-static void
-format_free_item_placement(check_item_t *data)
-{
-    if (data->font)
-        g_free(data->font);
-    if (data->text)
-        g_free(data->text);
-    if (data->filename)
-        g_free(data->filename);
-    g_free(data);
-}
-
-
-/* Read the information describing whether a page contains multiple checks or
- * a single check.  If there are multiple checks on a page, this functions
- * builds a linked list of the position names and their offsets (from the
- * upper left corner of the page).
- */
-static GSList *
-format_read_multicheck_info(const gchar *file,
-                            GKeyFile *key_file, check_format_t *format)
-{
-    GError *error = NULL;
-    GSList *list = NULL;
-    gchar *key, **names;
-    gsize length;
-    gint i;
-
-    key = g_strdup_printf("%s", KF_KEY_HEIGHT);
-    format->height = g_key_file_get_double(key_file, KF_GROUP_POS, key, &error);
-    if (error)
-    {
-        if ((error->domain == G_KEY_FILE_ERROR)
-                && ((error->code == G_KEY_FILE_ERROR_GROUP_NOT_FOUND)
-                    || (error->code == G_KEY_FILE_ERROR_KEY_NOT_FOUND)))
-        {
-            g_clear_error(&error);
-            format->height = 0.0;
-        }
-        else
-        {
-            g_warning("Check file %s, error reading group %s, key %s: %s",
-                      file, KF_GROUP_POS, key, error->message);
-            g_free(key);
-            return NULL;
-        }
-    }
-
-    names = g_key_file_get_string_list(key_file, KF_GROUP_POS, KF_KEY_NAMES,
-                                       &length, &error);
-    if (error)
-    {
-        if ((error->domain == G_KEY_FILE_ERROR)
-                && ((error->code == G_KEY_FILE_ERROR_GROUP_NOT_FOUND)
-                    || (error->code == G_KEY_FILE_ERROR_KEY_NOT_FOUND)))
-        {
-            /* This is the expected exit from this function. */
-            g_free(key);
-            return NULL;
-        }
-        g_warning("Check file %s, error reading group %s, key %s: %s",
-                  file, KF_GROUP_POS, key, error->message);
-        g_free(key);
-        return list;
-    }
-
-    for (i = 0; i < length; i++)
-        list = g_slist_append(list, g_strdup(names[i]));
-
-    g_strfreev(names);
-    return list;
-}
-
-
-/* Free the data describing the placement of multiple checks on a page.
- */
-static void
-free_check_position(gchar *name)
-{
-    g_free(name);
-}
-
-
-/* Read the information describing the general layout of a page of checks.
- * All items in this section are optional except or the name of the check
- * style.
- */
-static gboolean
-format_read_general_info(const gchar *file,
-                         GKeyFile *key_file, check_format_t *format)
-{
-    GError *error = NULL;
-    gchar **parts;
-    gchar *value;
-    double *dd;
-    gsize dd_len;
-
-    value = g_key_file_get_string(key_file, KF_GROUP_TOP, KF_KEY_GUID, &error);
-    if (error)
-    {
-        g_warning("Check file %s, group %s, key %s, error: %s",
-                  file, KF_GROUP_TOP, KF_KEY_GUID, error->message);
-        g_error_free(error);
-        return FALSE;
-    }
-    parts = g_strsplit(value, "-", -1);
-    format->guid = g_strjoinv("", parts);
-    g_strfreev(parts);
-    g_debug("Check file %s, group %s, key %s, value: %s",
-            file, KF_GROUP_TOP, KF_KEY_GUID, format->guid);
-
-    format->title =
-        g_key_file_get_string(key_file, KF_GROUP_TOP, KF_KEY_TITLE, &error);
-    if (!error)
-    {
-        g_debug("Check file %s, group %s, key %s, value: %s",
-                file, KF_GROUP_TOP, KF_KEY_TITLE, format->title);
-    }
-    else
-    {
-        g_warning("Check file %s, group %s, key %s, error: %s",
-                  file, KF_GROUP_TOP, KF_KEY_TITLE, error->message);
-        return FALSE;
-    }
-
-    format->blocking =
-        g_key_file_get_boolean(key_file, KF_GROUP_TOP, KF_KEY_BLOCKING,
-                               &error);
-    if (!error)
-    {
-        g_debug("Check file %s, group %s, key %s, value: %d",
-                file, KF_GROUP_TOP, KF_KEY_BLOCKING, format->blocking);
-    }
-    else
-    {
-        if (!((error->domain == G_KEY_FILE_ERROR)
-                && (error->code == G_KEY_FILE_ERROR_KEY_NOT_FOUND)))
-            g_warning("Check file %s, group %s, key %s, error: %s",
-                      file, KF_GROUP_TOP, KF_KEY_BLOCKING, error->message);
-        if ( gnc_prefs_get_bool(GNC_PREFS_GROUP, GNC_PREF_BLOCKING_CHARS) )
-        {
-            format->blocking = TRUE;
-        }
-        else
-        {
-            format->blocking = FALSE;
-        }
-        g_clear_error(&error);
-    }
-
-    format->print_date_format =
-        g_key_file_get_boolean(key_file, KF_GROUP_TOP, KF_KEY_DATE_FORMAT,
-                               &error);
-    if (!error)
-    {
-        g_debug("Check file %s, group %s, key %s, value: %d",
-                file, KF_GROUP_TOP, KF_KEY_DATE_FORMAT, format->print_date_format);
-    }
-    else
-    {
-        if (!((error->domain == G_KEY_FILE_ERROR)
-                && (error->code == G_KEY_FILE_ERROR_KEY_NOT_FOUND)))
-            g_warning("Check file %s, group %s, key %s, error: %s",
-                      file, KF_GROUP_TOP, KF_KEY_DATE_FORMAT, error->message);
-        if ( gnc_prefs_get_bool(GNC_PREFS_GROUP, GNC_PREF_PRINT_DATE_FMT) )
-        {
-            format->print_date_format = TRUE;
-        }
-        else
-        {
-            format->print_date_format = FALSE;
-        }
-        g_clear_error(&error);
-    }
-
-    format->show_grid =
-        g_key_file_get_boolean(key_file, KF_GROUP_TOP, KF_KEY_SHOW_GRID,
-                               &error);
-    if (!error)
-    {
-        g_debug("Check file %s, group %s, key %s, value: %d",
-                file, KF_GROUP_TOP, KF_KEY_SHOW_GRID, format->show_grid);
-    }
-    else
-    {
-        if (!((error->domain == G_KEY_FILE_ERROR)
-                && (error->code == G_KEY_FILE_ERROR_KEY_NOT_FOUND)))
-            g_warning("Check file %s, group %s, key %s, error: %s",
-                      file, KF_GROUP_TOP, KF_KEY_SHOW_GRID, error->message);
-        format->show_grid = FALSE;
-        g_clear_error(&error);
-    }
-
-    format->show_boxes =
-        g_key_file_get_boolean(key_file, KF_GROUP_TOP, KF_KEY_SHOW_BOXES,
-                               &error);
-    if (!error)
-    {
-        g_debug("Check file %s, group %s, key %s, value: %d",
-                file, KF_GROUP_TOP, KF_KEY_SHOW_BOXES, format->show_boxes);
-    }
-    else
-    {
-        if (!((error->domain == G_KEY_FILE_ERROR)
-                && (error->code == G_KEY_FILE_ERROR_KEY_NOT_FOUND)))
-            g_warning("Check file %s, group %s, key %s, error: %s",
-                      file, KF_GROUP_TOP, KF_KEY_SHOW_BOXES, error->message);
-        format->show_boxes = FALSE;
-        g_clear_error(&error);
-    }
-
-    format->font =
-        g_key_file_get_string(key_file, KF_GROUP_TOP, KF_KEY_FONT, &error);
-    if (!error)
-    {
-        g_debug("Check file %s, group %s, key %s, value: %s",
-                file, KF_GROUP_TOP, KF_KEY_FONT, format->font);
-    }
-    else
-    {
-        if (!((error->domain == G_KEY_FILE_ERROR)
-                && (error->code == G_KEY_FILE_ERROR_KEY_NOT_FOUND)))
-            g_warning("Check file %s, group %s, key %s, error: %s",
-                      file, KF_GROUP_TOP, KF_KEY_FONT, error->message);
-        g_clear_error(&error);
-    }
-
-    format->rotation =
-        g_key_file_get_double(key_file, KF_GROUP_TOP, KF_KEY_ROTATION, &error);
-    if (!error)
-    {
-        g_debug("Check file %s, group %s, key %s, value: %f",
-                file, KF_GROUP_TOP, KF_KEY_ROTATION, format->rotation);
-    }
-    else
-    {
-        if (!((error->domain == G_KEY_FILE_ERROR)
-                && (error->code == G_KEY_FILE_ERROR_KEY_NOT_FOUND)))
-            g_warning("Check file %s, group %s, key %s, error: %s",
-                      file, KF_GROUP_TOP, KF_KEY_ROTATION, error->message);
-        format->rotation = 0.0;
-        g_clear_error(&error);
-    }
-
-    dd = g_key_file_get_double_list(key_file, KF_GROUP_TOP, KF_KEY_TRANSLATION,
-                                    &dd_len, &error);
-    if (!error)
-    {
-        value = doubles_to_string(dd, dd_len);
-        g_debug("Check file %s, group %s, key %s, length %"G_GSIZE_FORMAT"; values: %s",
-                file, KF_GROUP_TOP, KF_KEY_TRANSLATION, dd_len, value);
-        g_free(value);
-
-        if (dd_len == 2)
-        {
-            format->trans_x = dd[0];
-            format->trans_y = dd[1];
-        }
-        else
-        {
-            g_warning("Check file %s, error top %s, key %s: 2 values only",
-                      file, KF_GROUP_TOP, KF_KEY_TRANSLATION);
-        }
-        g_free(dd);
-    }
-    else
-    {
-        if (!((error->domain == G_KEY_FILE_ERROR)
-                && (error->code == G_KEY_FILE_ERROR_KEY_NOT_FOUND)))
-            g_warning("Check file %s, group top %s, key %s: %s",
-                      file, KF_GROUP_ITEMS, KF_KEY_TRANSLATION, error->message);
-        g_clear_error(&error);
-    }
-
-    return TRUE;
-}
-
-
-/* Free all of the information describing a page of checks.
- */
-static void
-free_check_format(check_format_t *data)
-{
-    g_free(data->guid);
-    g_free(data->filename);
-    g_free(data->title);
-    g_free(data->font);
-    g_slist_foreach(data->positions, (GFunc) free_check_position, NULL);
-    g_slist_free(data->positions);
-    g_slist_foreach(data->items, (GFunc) format_free_item_placement, NULL);
-    g_slist_free(data->items);
-    g_free(data);
-}
-
-
-/* Read a single check format file and append the resulting format to the
- * list of all known formats.  This function calls other functions to read
- * each section of the data file.
- */
-static check_format_t *
-read_one_check_format(PrintCheckDialog *pcd, const gchar *groupname,
-                      const gchar *dirname, const gchar *file)
-{
-    gchar *pathname;
-    GKeyFile *key_file;
-    check_format_t *format;
-
-    pathname = g_build_filename(dirname, file, (char *)NULL);
-    key_file = gnc_key_file_load_from_file(pathname, FALSE, FALSE, NULL);
-    g_free(pathname);
-    if (!key_file)
-    {
-        g_warning("Check file %s, cannot load file", file);
-        return NULL;
-    }
-
-    format = g_new0(check_format_t, 1);
-    format->group = groupname;
-    format->filename = g_strdup(file);
-    if (format_read_general_info(file, key_file, format))
-    {
-        format->positions = format_read_multicheck_info(file, key_file, format);
-        format->items = format_read_item_placement(file, key_file, format);
-    }
-
-    g_key_file_free(key_file);
-    if ((NULL == format->title) || (NULL == format->items))
-    {
-        g_warning("Check file %s, no items read. Dropping file.", file);
-        free_check_format(format);
-        return NULL;
-    }
-
-    return format;
-}
-
-
-/* Iterate over a single check directory, throwing out any backup files and
- * then calling a helper function to read and parse the check format withing
- * the file.
- */
-static void
-read_one_check_directory(PrintCheckDialog *pcd, GtkListStore *store,
-                         const gchar *groupname, const gchar *dirname)
-{
-    check_format_t *format, *existing;
-    GDir *dir;
-    const gchar *filename;
-    GtkTreeIter iter;
-    GtkWidget *dialog;
-    gboolean found = FALSE;
-
-    dir = g_dir_open(dirname, 0, NULL);
-    if (dir == NULL)
-        return;
-
-    while ((filename = g_dir_read_name(dir)) != NULL)
-    {
-        if (g_str_has_prefix(filename, "#"))
-            continue;
-        if (!g_str_has_suffix(filename, ".chk"))
-            continue;
-
-        format = read_one_check_format(pcd, groupname, dirname, filename);
-        if (NULL == format)
-            continue;
-
-        existing = find_existing_format(store, format->guid, NULL);
-        if (existing)
-        {
-            dialog = gtk_message_dialog_new
-                     (GTK_WINDOW(pcd->dialog),
-                      GTK_DIALOG_DESTROY_WITH_PARENT,
-                      GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "%s",
-                      _("There is a duplicate check format file."));
-            gtk_message_dialog_format_secondary_text
-            (GTK_MESSAGE_DIALOG(dialog),
-             /* Translators: %1$s is the type of the first check
-              * format (user defined or application defined); %2$s
-              * is the filename of that format; %3$s the type of
-              * the other check format; and %4$s the filename of
-              * that other format. */
-             _("The GUIDs in the %s check format file '%s' and "
-               "the %s check format file '%s' match."),
-             existing->group, existing->filename,
-             format->group, format->filename);
-            gtk_dialog_run(GTK_DIALOG(dialog));
-            gtk_widget_destroy(dialog);
-        }
-        else
-        {
-            gtk_list_store_append(store, &iter);
-            gtk_list_store_set(store, &iter, COL_NAME, format->title,
-                               COL_DATA, format, -1);
-            found = TRUE;
-        }
-    }
-    g_dir_close(dir);
-
-    /* If any files were added to the list, add a separator between
-     *  this group and the next. */
-    if (found)
-    {
-        gtk_list_store_append(store, &iter);
-        gtk_list_store_set(store, &iter, COL_SEP, TRUE, -1);
-    }
-}
-
-
-/* Read all check formats.  This function first looks in the system directory
- * for check files, and then looks in the user's .gnucash directory for any
- * custom check files.
- */
-static void
-read_formats(PrintCheckDialog *pcd, GtkListStore *store)
-{
-    gchar *dirname, *pkgdatadir;
-
-    pkgdatadir = gnc_path_get_pkgdatadir();
-    dirname = g_build_filename(pkgdatadir, CHECK_FMT_DIR, (char *)NULL);
-    /* Translators: This is a directory name. It may be presented to
-     * the user to indicate that some data file was defined by the
-     * gnucash application. */
-    read_one_check_directory(pcd, store, _("application"), dirname);
-    g_free(dirname);
-    g_free(pkgdatadir);
-
-    dirname = gnc_build_dotgnucash_path(CHECK_FMT_DIR);
-    /* Translators: This is a directory name. It may be presented to
-     * the user to indicate that some data file was defined by a
-     * user herself. */
-    read_one_check_directory(pcd, store, _("user"), dirname);
-    g_free(dirname);
-}
-
-
-static gboolean
-format_is_a_separator (GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
-{
-    gboolean separator;
-
-    gtk_tree_model_get(model, iter, COL_SEP, &separator, -1);
-    return separator;
-}
-
-
-static void
-initialize_format_combobox (PrintCheckDialog *pcd)
-{
-    GtkListStore *store;
-    GtkTreeIter iter;
-
-    store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_BOOLEAN);
-    read_formats(pcd, store);
-    gtk_list_store_append(store, &iter);
-    gtk_list_store_set(store, &iter, COL_NAME, _("Custom"), -1);
-    pcd->format_max = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), NULL);
-    gtk_combo_box_set_model(GTK_COMBO_BOX(pcd->format_combobox),
-                            GTK_TREE_MODEL(store));
-    gtk_combo_box_set_row_separator_func(GTK_COMBO_BOX(pcd->format_combobox),
-                                         format_is_a_separator, NULL, NULL);
-}
-
-
-/*****************************************************
- * gnc_ui_print_check_dialog_create2                  *
- * make a new print check dialog and wait for it.    *
- *****************************************************/
-void
-gnc_ui_print_check_dialog_create2(GncPluginPageRegister2 *plugin_page,
-                                  GList *splits)
-{
-    PrintCheckDialog *pcd;
-    GtkBuilder *builder;
-    GtkWidget *table;
-    GtkWindow *window;
-    gchar *font;
-    Transaction *trans = NULL;
-
-    pcd = g_new0(PrintCheckDialog, 1);
-    pcd->plugin_page = plugin_page;
-    pcd->splits = g_list_copy(splits);
-
-    builder = gtk_builder_new();
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "adjustment1");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "adjustment2");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "adjustment3");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "adjustment4");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "adjustment5");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "adjustment6");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "adjustment7");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "adjustment8");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "adjustment9");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "adjustment10");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "adjustment11");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "adjustment12");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "adjustment13");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "adjustment14");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "adjustment15");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "adjustment16");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "adjustment17");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "adjustment18");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "adjustment19");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "adjustment20");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "adjustment21");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "adjustment22");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "adjustment23");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "adjustment24");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "liststore1");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "liststore2");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "liststore3");
-    gnc_builder_add_from_file (builder, "dialog-print-check.glade", "Print Check Dialog");
-
-    gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, pcd);
-
-    pcd->builder = builder;
-    pcd->dialog = GTK_WIDGET(gtk_builder_get_object (builder, "Print Check Dialog"));
-
-    /* now pick out the relevant child widgets */
-    pcd->format_combobox = GTK_WIDGET(gtk_builder_get_object (builder, "check_format_combobox"));
-    pcd->position_combobox = GTK_WIDGET(gtk_builder_get_object (builder, "check_position_combobox"));
-    pcd->first_page_count = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "first_page_count_entry"));
-
-    pcd->custom_table = GTK_WIDGET(gtk_builder_get_object (builder, "custom_table"));
-    pcd->payee_x = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "payee_x_entry"));
-    pcd->payee_y = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "payee_y_entry"));
-    pcd->date_x = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "date_x_entry"));
-    pcd->date_y = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "date_y_entry"));
-    pcd->words_x = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "amount_words_x_entry"));
-    pcd->words_y = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "amount_words_y_entry"));
-    pcd->number_x = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "amount_numbers_x_entry"));
-    pcd->number_y = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "amount_numbers_y_entry"));
-    pcd->notes_x = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "notes_x_entry"));
-    pcd->notes_y = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "notes_y_entry"));
-    pcd->memo_x = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "memo_x_entry"));
-    pcd->memo_y = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "memo_y_entry"));
-    pcd->address_x = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "address_x_entry"));
-    pcd->address_y = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "address_y_entry"));
-    pcd->splits_amount_x = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "splits_amount_x_entry"));
-    pcd->splits_amount_y = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "splits_amount_y_entry"));
-    pcd->splits_memo_x = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "splits_memo_x_entry"));
-    pcd->splits_memo_y = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "splits_memo_y_entry"));
-    pcd->splits_account_x = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "splits_account_x_entry"));
-    pcd->splits_account_y = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "splits_account_y_entry"));
-    pcd->translation_x = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "translation_x_entry"));
-    pcd->translation_y = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "translation_y_entry"));
-    pcd->translation_label = GTK_WIDGET(gtk_builder_get_object (builder, "translation_label"));
-    pcd->check_rotation = GTK_SPIN_BUTTON(gtk_builder_get_object (builder, "check_rotation_entry"));
-    pcd->units_combobox = GTK_WIDGET(gtk_builder_get_object (builder, "units_combobox"));
-
-    window = GTK_WINDOW(GNC_PLUGIN_PAGE(plugin_page)->window);
-    gtk_window_set_transient_for(GTK_WINDOW(pcd->dialog), window);
-    pcd->caller_window = GTK_WINDOW(window);
-
-    /* Create and attach the date-format chooser */
-    table = GTK_WIDGET(gtk_builder_get_object (builder, "options_table"));
-    pcd->date_format = gnc_date_format_new_without_label();
-    gtk_table_attach_defaults(GTK_TABLE(table), pcd->date_format, 1, 3, 4, 7);
-
-    /* Default font (set in preferences) */
-    font = gnc_prefs_get_string(GNC_PREFS_GROUP, GNC_PREF_DEFAULT_FONT);
-    pcd->default_font = font ? font : g_strdup(DEFAULT_FONT);
-
-    /* Update the combo boxes bases on the available check formats */
-    initialize_format_combobox(pcd);
-
-    /* address */
-    pcd->check_address_name = GTK_WIDGET(gtk_builder_get_object (builder, "check_address_name"));
-    pcd->check_address_1 = GTK_WIDGET(gtk_builder_get_object (builder, "check_address_1"));
-    pcd->check_address_2 = GTK_WIDGET(gtk_builder_get_object (builder, "check_address_2"));
-    pcd->check_address_3 = GTK_WIDGET(gtk_builder_get_object (builder, "check_address_3"));
-    pcd->check_address_4 = GTK_WIDGET(gtk_builder_get_object (builder, "check_address_4"));
-    /* fill in any available address data */
-    /* Can't access business objects e.g. Customer,Vendor,Employee because
-     * it would create build problems */
-    if (g_list_length(pcd->splits) == 1)
-        trans = xaccSplitGetParent((Split *)(pcd->splits->data));
-    else
-        trans = NULL;
-    if ( trans )
-    {
-        gtk_entry_set_text(GTK_ENTRY(pcd->check_address_name), xaccTransGetDescription(trans));
-    }
-    else
-    {
-        /* nothing to do - defaults to blank */
-    }
-
-    gtk_widget_destroy(GTK_WIDGET(gtk_builder_get_object (builder, "lower_left")));
-
-    gnc_ui_print_restore_dialog(pcd);
-    gnc_restore_window_size(GNC_PREFS_GROUP, GTK_WINDOW(pcd->dialog));
-
-    g_object_unref(G_OBJECT(builder));
-    gtk_widget_show_all(pcd->dialog);
-}
-
-
-/**************************************
- * Print check contents to the page.  *
- **************************************/
-
-/* Draw a grid pattern on the page to be printed.  This grid is helpful when
- * figuring out the offsets for where to print various items on the page.
- */
-static void
-draw_grid(GtkPrintContext *context, gint width, gint height, const gchar *font)
-{
-    const double dash_pattern[2] = { 1.0, 5.0 };
-    PangoFontDescription *desc;
-    PangoLayout *layout;
-    cairo_t *cr;
-    gchar *text;
-    gint i;
-
-    /* Initialize for printing text */
-    layout = gtk_print_context_create_pango_layout(context);
-    desc = pango_font_description_from_string(font);
-    pango_layout_set_font_description(layout, desc);
-    pango_font_description_free(desc);
-    pango_layout_set_alignment(layout, PANGO_ALIGN_LEFT);
-    pango_layout_set_width(layout, -1);
-
-    /* Set up the line to draw with. */
-    cr = gtk_print_context_get_cairo_context(context);
-    cairo_save(cr);
-    cairo_set_line_width(cr, 1.0);
-    cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND);
-    cairo_set_dash(cr, dash_pattern, 2, 0);
-
-    /* Draw horizontal lines */
-    for (i = -200; i < (height + 200); i += 50)
-    {
-        text = g_strdup_printf("%d", (int)i);
-        cairo_move_to(cr, -200, i);
-        cairo_line_to(cr, width + 200, i);
-        cairo_stroke(cr);
-        pango_layout_set_text(layout, text, -1);
-        cairo_move_to(cr, 0, i);
-        pango_cairo_show_layout(cr, layout);
-        g_free(text);
-    }
-
-    /* Draw vertical lines */
-    for (i = -200; i < (width + 200); i += 50)
-    {
-        text = g_strdup_printf("%d", (int)i);
-        cairo_move_to(cr, i, -200);
-        cairo_line_to(cr, i, height + 200);
-        cairo_stroke(cr);
-        pango_layout_set_text(layout, text, -1);
-        cairo_move_to(cr, i, 0);
-        pango_cairo_show_layout(cr, layout);
-        g_free(text);
-    }
-
-    /* Clean up after ourselves */
-    cairo_restore(cr);
-    g_object_unref(layout);
-}
-
-
-/* Print a single line of text to the printed page.  If a width and height
- * are specified, the line will be wrapped at the specified width, and the
- * resulting text will be clipped if it does not fit in the space
- * available.
- */
-static gdouble
-draw_text(GtkPrintContext *context, const gchar *text, check_item_t *data,
-          PangoFontDescription *default_desc)
-{
-    PangoFontDescription *desc;
-    PangoLayout *layout;
-    cairo_t *cr;
-    gint layout_height, layout_width;
-    gdouble width, height;
-    gchar *new_text;
-
-    if ((NULL == text) || (strlen(text) == 0))
-        return 0.0;
-
-    /* Initialize for printing text */
-    layout = gtk_print_context_create_pango_layout(context);
-    if (data->font)
-    {
-        desc = pango_font_description_from_string(data->font);
-        pango_layout_set_font_description(layout, desc);
-        pango_font_description_free(desc);
-    }
-    else
-    {
-        pango_layout_set_font_description(layout, default_desc);
-    }
-    pango_layout_set_alignment(layout,
-                               data->w ? data->align : PANGO_ALIGN_LEFT);
-    pango_layout_set_width(layout, data->w ? data->w * PANGO_SCALE : -1);
-    pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_END);
-    if ( data->blocking )
-    {
-        new_text = g_strdup_printf("***%s***", text);
-        pango_layout_set_text(layout, new_text, -1);
-        g_free(new_text);
-    }
-    else
-    {
-        pango_layout_set_text(layout, text, -1);
-    }
-    pango_layout_get_size(layout, &layout_width, &layout_height);
-    width = (gdouble) layout_width / PANGO_SCALE;
-    height = (gdouble) layout_height / PANGO_SCALE;
-
-    cr = gtk_print_context_get_cairo_context(context);
-    cairo_save(cr);
-
-    /* Clip text to the enclosing rectangle */
-    if (data->w && data->h)
-    {
-        g_debug("Text clip rectangle, coords %f,%f, size %f,%f",
-                data->x, data->y - data->h, data->w, data->h);
-        cairo_rectangle(cr, data->x, data->y - data->h, data->w, data->h);
-        cairo_clip_preserve(cr);
-    }
-
-    /* Draw the text */
-    g_debug("Text move to %f,%f, print '%s'", data->x, data->y,
-            text ? text : "(null)");
-    cairo_move_to(cr, data->x, data->y - height);
-    pango_cairo_show_layout(cr, layout);
-
-    /* Clean up after ourselves */
-    cairo_restore(cr);
-    g_object_unref(layout);
-    return width;
-
-}
-
-
-/* Find and load the specified image.  If the specified filename isn't an
- * absolute path name, this code will also look in the gnucash system check
- * format directory, and then in the user's private check format
- * directory.
- *
- * NOTE: The gtk_image_new_from_file() function never fails.  If it can't
- * find the specified file, it returns the "broken image" icon.  This function
- * takes advantage of that.
-*/
-static GtkWidget *
-read_image (const gchar *filename)
-{
-    GtkWidget *image;
-    gchar *pkgdatadir, *dirname, *tmp_name;
-
-    if (g_path_is_absolute(filename))
-        return gtk_image_new_from_file(filename);
-
-    pkgdatadir = gnc_path_get_pkgdatadir();
-    tmp_name = g_build_filename(pkgdatadir, CHECK_FMT_DIR, filename, (char *)NULL);
-    if (!g_file_test(tmp_name, G_FILE_TEST_EXISTS))
-    {
-        g_free(tmp_name);
-        dirname = gnc_build_dotgnucash_path(CHECK_FMT_DIR);
-        tmp_name = g_build_filename(dirname, filename, (char *)NULL);
-        g_free(dirname);
-    }
-    image = gtk_image_new_from_file(tmp_name);
-    g_free(tmp_name);
-    return image;
-}
-
-
-/* Print a single image to the printed page.  This picture will be scaled
- * down to fit in the specified size rectangle.  Scaling is done with the
- * proportions locked 1:1 so as not to distort the image.
- */
-static void
-draw_picture(GtkPrintContext *context, check_item_t *data)
-{
-    cairo_t *cr;
-    GdkPixbuf *pixbuf, *scaled_pixbuf;
-    GtkImage *image;
-    gint pix_w, pix_h;
-    gdouble scale_w, scale_h, scale;
-
-    cr = gtk_print_context_get_cairo_context(context);
-    cairo_save(cr);
-
-    /* Get the picture. */
-    image = GTK_IMAGE(read_image(data->filename));
-    pixbuf = gtk_image_get_pixbuf(image);
-    if (pixbuf)
-    {
-        g_object_ref(pixbuf);
-    }
-    else
-    {
-        g_warning("Filename '%s' cannot be read or understood.",
-                  data->filename);
-        pixbuf = gtk_widget_render_icon(GTK_WIDGET(image),
-                                        GTK_STOCK_MISSING_IMAGE,
-                                        -1, NULL);
-    }
-    pix_w = gdk_pixbuf_get_width(pixbuf);
-    pix_h = gdk_pixbuf_get_height(pixbuf);
-
-    /* Draw the enclosing rectangle */
-    if (data->w && data->h)
-    {
-        cairo_rectangle(cr, data->x, data->y - data->h, data->w, data->h);
-        g_debug("Picture clip rectangle, user coords %f,%f, user size %f,%f",
-                data->x, data->y - data->h, data->w, data->h);
-    }
-    else
-    {
-        cairo_rectangle(cr, data->x, data->y - pix_h, pix_w, pix_h);
-        g_debug("Picture clip rectangle, user coords %f,%f, pic size %d,%d",
-                data->x, data->y - data->h, pix_w, pix_h);
-    }
-    cairo_clip_preserve(cr);
-
-    /* Scale down to fit.  Never scale up. */
-    scale_w = scale_h = 1;
-    if (data->w && (pix_w > data->w))
-        scale_w = data->w / pix_w;
-    if (data->h && (pix_h > data->h))
-        scale_h = data->h / pix_h;
-    scale = MIN(scale_w, scale_h);
-
-    if (scale != 1)
-    {
-        scaled_pixbuf = gdk_pixbuf_scale_simple(pixbuf, pix_w * scale,
-                                                pix_h * scale,
-                                                GDK_INTERP_BILINEAR);
-        pix_h = gdk_pixbuf_get_height(scaled_pixbuf);
-        gdk_cairo_set_source_pixbuf(cr, scaled_pixbuf, data->x,
-                                    data->y - pix_h);
-
-        g_object_unref(scaled_pixbuf);
-    }
-    else
-    {
-        gdk_cairo_set_source_pixbuf(cr, pixbuf, data->x, data->y - pix_h);
-    }
-    g_object_unref(pixbuf);
-    cairo_paint(cr);
-
-    /* Clean up after ourselves */
-    cairo_restore(cr);
-    gtk_widget_destroy(GTK_WIDGET(image));
-}
-
-
-#define DATE_FMT_HEIGHT 8
-#define DATE_FMT_SLOP   2
-
-/* There is a new Canadian requirement that all software that prints the date
- * on a check must also print the format of that date underneath using a 6-8
- * point font.  This function implements that requirement.  It requires the
- * font description used in printing the date so that it can print in the same
- * font using a smaller point size.  It also requires width of the printed
- * date as an argument, allowing it to center the format string under the
- * date.
- *
- * Note: This code only prints a date if the user has explicitly requested it
- * via a preference setting.  This is because gnucash has no way of
- * knowing if the user's checks already have a date format printed on them.
- */
-static void
-draw_date_format(GtkPrintContext *context, const gchar *date_format,
-                 check_item_t *data, PangoFontDescription *default_desc,
-                 gdouble width)
-{
-    PangoFontDescription *date_desc;
-    check_item_t date_item;
-    gchar *text = NULL, *expanded = NULL;
-    const gchar *c;
-    GString *cdn_fmt;
-
-    setlocale(LC_ALL, NULL);
-    if ( !data->print_date_format ) return;
-
-    date_desc = pango_font_description_copy_static(default_desc);
-    pango_font_description_set_size(date_desc, DATE_FMT_HEIGHT * PANGO_SCALE);
-    date_item = *data;
-    date_item.y += (DATE_FMT_HEIGHT + DATE_FMT_SLOP);
-    date_item.w = width;
-    date_item.h = DATE_FMT_HEIGHT + DATE_FMT_SLOP;
-    date_item.align = PANGO_ALIGN_CENTER;
-
-    /* This is a date format string. It should only contain ascii. */
-    cdn_fmt = g_string_new_len(NULL, 50);
-    for (c = date_format; c && *c; )
-    {
-        if ((c[0] != '%') || (c[1] == '\0'))
-        {
-            c += 1;
-            continue;
-        }
-        switch (c[1])
-        {
-        case 'F':
-            cdn_fmt = g_string_append(cdn_fmt, "YYYYMMDD");
-            break;
-        case 'Y':
-            cdn_fmt = g_string_append(cdn_fmt, "YYYY");
-            break;
-        case 'y':
-            cdn_fmt = g_string_append(cdn_fmt, "YY");
-            break;
-        case 'm':
-            cdn_fmt = g_string_append(cdn_fmt, "MM");
-            break;
-        case 'd':
-        case 'e':
-            cdn_fmt = g_string_append(cdn_fmt, "DD");
-            break;
-        case 'x':
-            expanded = g_strdup_printf("%s%s",
-                                       qof_date_format_get_string(QOF_DATE_FORMAT_LOCALE),
-                                       c + 2);
-            c = expanded;
-            continue;
-        default:
-            break;
-        }
-        c += 2;
-    }
-
-    text = g_string_free(cdn_fmt, FALSE);
-    draw_text(context, text, &date_item, date_desc);
-    g_free(text);
-    if (expanded)
-        g_free(expanded);
-    pango_font_description_free(date_desc);
-}
-
-
-/* Print each of the items that in the description of a single check.  This
- * function uses helper functions to print text based and picture based items.
- */
-static void
-draw_page_items(GtkPrintContext *context,
-                check_format_t *format, gpointer user_data)
-{
-    PrintCheckDialog *pcd = (PrintCheckDialog *) user_data;
-    PangoFontDescription *default_desc;
-    Transaction *trans;
-    gnc_numeric amount;
-    GNCPrintAmountInfo info;
-    const gchar *date_format;
-    gchar *text = NULL, buf[100];
-    GSList *elem;
-    check_item_t *item;
-    gdouble width;
-    gchar *address = NULL;
-
-    trans = xaccSplitGetParent(pcd->split);
-    /* This was valid when the check printing dialog was instantiated. */
-    g_return_if_fail(trans);
-    amount = gnc_numeric_abs(xaccSplitGetAmount(pcd->split));
-
-    if (format->font)
-        default_desc = pango_font_description_from_string(format->font);
-    else
-        default_desc = pango_font_description_from_string(pcd->default_font);
-
-    /* Now put the actual data onto the page. */
-    for (elem = format->items; elem; elem = g_slist_next(elem))
-    {
-        item = elem->data;
-
-        switch (item->type)
-        {
-        case DATE:
-        {
-            GDate date;
-            g_date_clear (&date, 1);
-            gnc_gdate_set_time64 (&date, xaccTransGetDate(trans));
-            date_format =
-                gnc_date_format_get_custom(GNC_DATE_FORMAT
-                                           (pcd->date_format));
-            g_date_strftime(buf, 100, date_format, &date);
-            width = draw_text(context, buf, item, default_desc);
-            draw_date_format(context, date_format, item, default_desc, width);
-            break;
-        }
-
-        case PAYEE:
-            draw_text(context, xaccTransGetDescription(trans), item, default_desc);
-            break;
-
-        case NOTES:
-            draw_text(context, xaccTransGetNotes(trans), item, default_desc);
-            break;
-
-        case MEMO:
-            draw_text(context, xaccSplitGetMemo(pcd->split), item, default_desc);
-            break;
-
-        case ACTION:
-            draw_text(context, gnc_get_action_num(trans, pcd->split), item,
-                      default_desc);
-            break;
-
-        case CHECK_NUMBER:
-            draw_text(context, gnc_get_num_action(trans, pcd->split), item,
-                      default_desc);
-            break;
-
-        case AMOUNT_NUMBER:
-            info = gnc_default_print_info(FALSE);
-            draw_text(context, xaccPrintAmount(amount, info),
-                      item, default_desc);
-            break;
-
-        case AMOUNT_WORDS:
-            text = numeric_to_words(amount);
-            draw_text(context, text, item, default_desc);
-            g_free(text);
-            break;
-
-        case TEXT:
-            draw_text(context, item->text, item, default_desc);
-            break;
-
-        case ADDRESS:
-            address = get_check_address2(pcd);
-            draw_text(context, address, item, default_desc);
-            g_free(address);
-            break;
-
-        case SPLITS_AMOUNT:
-            text = get_check_splits_amount2(pcd);
-            draw_text(context, text, item, default_desc);
-            g_free(text);
-            break;
-
-        case SPLITS_MEMO:
-            text = get_check_splits_memo2(pcd);
-            draw_text(context, text, item, default_desc);
-            g_free(text);
-            break;
-
-        case SPLITS_ACCOUNT:
-            text = get_check_splits_account2(pcd);
-            draw_text(context, text, item, default_desc);
-            g_free(text);
-            break;
-
-        case PICTURE:
-            draw_picture(context, item);
-            break;
-
-        default:
-            text = g_strdup_printf("(unknown check field, type %d)", item->type);
-            draw_text(context, text, item, default_desc);
-            g_free(text);
-            break;
-        }
-    }
-
-    pango_font_description_free(default_desc);
-}
-
-
-/* Print each of the items that in the description of a single check.  This
- * function uses helper functions to print text based and picture based items.
- */
-static void
-draw_page_boxes(GtkPrintContext *context,
-                check_format_t *format, gpointer user_data)
-{
-    cairo_t *cr;
-    GSList *elem;
-    check_item_t *item;
-
-    cr = gtk_print_context_get_cairo_context(context);
-
-    /* Now put the actual data onto the page. */
-    for (elem = format->items; elem; elem = g_slist_next(elem))
-    {
-        item = elem->data;
-        if (!item->w || !item->h)
-            continue;
-        cairo_rectangle(cr, item->x, item->y - item->h, item->w, item->h);
-        cairo_stroke(cr);
-    }
-}
-
-
-/* Print an entire page based upon the layout in a check description file. This
- * function takes care of translating/rotating the page, calling the function to
- * print the grid pattern (if requested), and calls a helper function to print
- * all check items.
- */
-static void
-draw_check_format(GtkPrintContext *context, gint position,
-                  check_format_t *format, gpointer user_data)
-{
-    PrintCheckDialog *pcd = (PrintCheckDialog *) user_data;
-    cairo_t *cr;
-    gdouble x, y, r, multip;
-
-    cr = gtk_print_context_get_cairo_context(context);
-    cairo_translate(cr, format->trans_x, format->trans_y);
-    g_debug("Page translated by %f,%f", format->trans_x, format->trans_y);
-    cairo_rotate(cr, format->rotation * DEGREES_TO_RADIANS);
-    g_debug("Page rotated by %f degrees", format->rotation);
-
-    /* The grid is useful when determining check layouts */
-    if (format->show_grid)
-    {
-        draw_grid(context,
-                  gtk_print_context_get_width(context),
-                  gtk_print_context_get_height(context),
-                  pcd->default_font);
-    }
-
-    /* Translate all subsequent check items if requested.
-     * For check position 0, no translation is needed. */
-    if ((position > 0) && (position < pcd->position_max))
-    {
-        /* Standard positioning is used.
-         * Note that the first check on the page (position 0) doesn't
-         * need to be moved (hence the test for position > 0 above. */
-        cairo_translate(cr, 0, format->height);
-        g_debug("Position %d translated by %f (pre-defined)", position, format->height);
-    }
-    else if (position == pcd->position_max)
-    {
-        /* Custom positioning is used. */
-        multip = pcd_get_custom_multip(pcd);
-        x = multip * gtk_spin_button_get_value(pcd->translation_x);
-        y = multip * gtk_spin_button_get_value(pcd->translation_y);
-        cairo_translate(cr, x, y);
-        g_debug("Position translated by %f,%f (custom)", x, y);
-        r = gtk_spin_button_get_value(pcd->check_rotation);
-        cairo_rotate(cr, r * DEGREES_TO_RADIANS);
-        g_debug("Position rotated by %f degrees (custom)", r);
-    }
-
-    /* Draw layout boxes if requested. Also useful when determining check
-     * layouts. */
-    if (format->show_boxes)
-        draw_page_boxes(context, format, user_data);
-
-    /* Draw the actual check data. */
-    draw_page_items(context, format, user_data);
-}
-
-
-static void
-draw_check_custom(GtkPrintContext *context, gpointer user_data)
-{
-    PrintCheckDialog *pcd = (PrintCheckDialog *) user_data;
-    GNCPrintAmountInfo info;
-    PangoFontDescription *desc;
-    Transaction *trans;
-    gnc_numeric amount;
-    cairo_t *cr;
-    const gchar *date_format;
-    gchar *text = NULL, buf[100];
-    check_item_t item = { 0 };
-    gdouble x, y, multip, degrees;
-    GDate date;
-    gchar *address;
-
-    trans = xaccSplitGetParent(pcd->split);
-    /* This was valid when the check printing dialog was instantiated. */
-    g_return_if_fail(trans);
-
-    desc = pango_font_description_from_string(pcd->default_font);
-
-    multip = pcd_get_custom_multip(pcd);
-    degrees = gtk_spin_button_get_value(pcd->check_rotation);
-    cr = gtk_print_context_get_cairo_context(context);
-    cairo_rotate(cr, degrees * DEGREES_TO_RADIANS);
-    g_debug("Page rotated by %f degrees", degrees);
-
-    x = multip * gtk_spin_button_get_value(pcd->translation_x);
-    y = multip * gtk_spin_button_get_value(pcd->translation_y);
-    cairo_translate(cr, x, y);
-    g_debug("Page translated by %f,%f", x, y);
-
-    item.x = multip * gtk_spin_button_get_value(pcd->payee_x);
-    item.y = multip * gtk_spin_button_get_value(pcd->payee_y);
-    draw_text(context, xaccTransGetDescription(trans), &item, desc);
-
-    item.x = multip * gtk_spin_button_get_value(pcd->date_x);
-    item.y = multip * gtk_spin_button_get_value(pcd->date_y);
-    g_date_clear (&date, 1);
-    gnc_gdate_set_time64 (&date, xaccTransGetDate(trans));
-    date_format = gnc_date_format_get_custom(GNC_DATE_FORMAT(pcd->date_format));
-    g_date_strftime(buf, 100, date_format, &date);
-    draw_text(context, buf, &item, desc);
-
-    item.x = multip * gtk_spin_button_get_value(pcd->number_x);
-    item.y = multip * gtk_spin_button_get_value(pcd->number_y);
-    info = gnc_default_print_info(FALSE);
-    amount = gnc_numeric_abs(xaccSplitGetAmount(pcd->split));
-    draw_text(context, xaccPrintAmount(amount, info), &item, desc);
-
-    item.x = multip * gtk_spin_button_get_value(pcd->words_x);
-    item.y = multip * gtk_spin_button_get_value(pcd->words_y);
-    text = numeric_to_words(amount);
-    draw_text(context, text, &item, desc);
-    g_free(text);
-
-    item.x = multip * gtk_spin_button_get_value(pcd->address_x);
-    item.y = multip * gtk_spin_button_get_value(pcd->address_y);
-    address = get_check_address2(pcd);
-    draw_text(context, address, &item, desc);
-    g_free(address);
-
-    item.x = multip * gtk_spin_button_get_value(pcd->splits_amount_x);
-    item.y = multip * gtk_spin_button_get_value(pcd->splits_amount_y);
-    text = get_check_splits_amount2(pcd);
-    draw_text(context, text, &item, desc);
-    g_free(text);
-
-    item.x = multip * gtk_spin_button_get_value(pcd->splits_memo_x);
-    item.y = multip * gtk_spin_button_get_value(pcd->splits_memo_y);
-    text = get_check_splits_memo2(pcd);
-    draw_text(context, text, &item, desc);
-    g_free(text);
-
-    item.x = multip * gtk_spin_button_get_value(pcd->splits_account_x);
-    item.y = multip * gtk_spin_button_get_value(pcd->splits_account_y);
-    text = get_check_splits_account2(pcd);
-    draw_text(context, text, &item, desc);
-    g_free(text);
-
-    item.x = multip * gtk_spin_button_get_value(pcd->notes_x);
-    item.y = multip * gtk_spin_button_get_value(pcd->notes_y);
-    draw_text(context, xaccTransGetNotes(trans), &item, desc);
-
-    item.x = multip * gtk_spin_button_get_value(pcd->memo_x);
-    item.y = multip * gtk_spin_button_get_value(pcd->memo_y);
-    draw_text(context, xaccSplitGetMemo(pcd->split), &item, desc);
-
-    pango_font_description_free(desc);
-}
-
-
-/* Print a page of checks. This takes into account the number of checks to print,
- * the number of checks on a page, and the starting check position on the page.
- * This function is called once by the GtkPrint code once for each page to be printed.
- */
-static void
-draw_page(GtkPrintOperation *operation,
-          GtkPrintContext *context, gint page_nr, gpointer user_data)
-{
-    PrintCheckDialog *pcd = (PrintCheckDialog *) user_data;
-    check_format_t *format;
-
-    format = pcd->selected_format;
-    if (format)
-    {
-        gint    first_check, last_check;
-        gint    first_page_count;
-        guint   check_count = g_list_length(pcd->splits);
-        gint    check_number;
-        gint    position = gtk_combo_box_get_active(GTK_COMBO_BOX(pcd->position_combobox));
-        gint    checks_per_page;
-        GList   *next_split;
-
-        if (position == pcd->position_max)
-        {
-            /* Custom position, one check per page */
-            checks_per_page = 1;
-            first_page_count = 1;
-        }
-        else
-        {
-            checks_per_page = pcd->position_max;
-            first_page_count = gtk_spin_button_get_value_as_int(pcd->first_page_count);
-        }
-
-        if (page_nr == 0)
-        {
-            first_check = 0;
-            last_check = first_page_count - 1;
-            next_split = pcd->splits;
-        }
-        else
-        {
-            first_check = first_page_count + (page_nr - 1) * checks_per_page;
-            last_check = MIN(check_count - 1, first_check + checks_per_page - 1);
-            next_split = g_list_nth(pcd->splits, first_check);
-            /* If position is not "custom" reset it to top */
-            if (position < pcd->position_max)
-                position = 0;
-        }
-
-        for (check_number = first_check; check_number <= last_check;
-                check_number++, position++)
-        {
-            pcd->split = (Split *) next_split->data;
-            next_split = g_list_next(next_split);
-            draw_check_format(context, position, format, user_data);
-        }
-    }
-    else
-    {
-        /* Custom check format */
-        pcd->split = (Split *) g_list_nth_data(pcd->splits, page_nr);
-        g_return_if_fail(pcd->split);
-        draw_check_custom(context, user_data);
-    }
-}
-
-
-/* Compute the number of pages required to complete this print operation.
- * This function is called once by the GtkPrint code to determine the number
- * of pages required to complete the print operation.
- */
-static void
-begin_print(GtkPrintOperation *operation,
-            GtkPrintContext *context, gpointer user_data)
-{
-    PrintCheckDialog *pcd = (PrintCheckDialog *) user_data;
-    guint check_count = g_list_length(pcd->splits);
-    gint first_page_count;
-    gint pages;
-    gint position = gtk_combo_box_get_active(GTK_COMBO_BOX(pcd->position_combobox));
-
-    if (pcd->selected_format && pcd->position_max > 1 && position < pcd->position_max)
-    {
-        first_page_count = gtk_spin_button_get_value_as_int(pcd->first_page_count);
-        pages = ((check_count - first_page_count) + pcd->position_max - 1) /
-                pcd->position_max + 1;
-    }
-    else
-        pages = check_count;
-    gtk_print_operation_set_n_pages(operation, pages);
-}
-
-
-/************************************
- * gnc_ui_print_check_dialog_ok_cb  *
- ************************************/
-static void
-gnc_ui_print_check_dialog_ok_cb(PrintCheckDialog *pcd)
-{
-    GtkPrintOperation *print;
-    GtkPrintOperationResult res;
-
-    print = gtk_print_operation_new();
-
-    gnc_print_operation_init(print, "GnuCash-Checks");
-    gtk_print_operation_set_unit(print, GTK_UNIT_POINTS);
-    gtk_print_operation_set_use_full_page(print, TRUE);
-    g_signal_connect(print, "begin_print", G_CALLBACK(begin_print), pcd);
-    g_signal_connect(print, "draw_page", G_CALLBACK(draw_page), pcd);
-
-    res = gtk_print_operation_run(print,
-                                  GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
-                                  pcd->caller_window, NULL);
-
-    if (res == GTK_PRINT_OPERATION_RESULT_APPLY)
-        gnc_print_operation_save_print_settings(print);
-
-    g_object_unref(print);
-}
-
-
-static void
-gnc_print_check_set_sensitive (GtkWidget *widget, gpointer data)
-{
-    gboolean sensitive;
-    if (GTK_IS_LABEL(widget) || GTK_IS_SEPARATOR(widget))
-        return;
-    sensitive = GPOINTER_TO_INT(data);
-    gtk_widget_set_sensitive(widget, sensitive);
-}
-
-
-void
-gnc_print_check_format_changed2 (GtkComboBox *widget,
-                                 PrintCheckDialog *pcd)
-{
-    GtkListStore *p_store;
-    GtkTreeModel *f_model;
-    GtkTreeIter f_iter, iter;
-    gboolean sensitive;
-    gint pnum;
-    check_format_t *format;
-    gboolean separator;
-    GSList *elem;
-
-    if (!gtk_combo_box_get_active_iter(GTK_COMBO_BOX(pcd->format_combobox), &f_iter))
-        return;
-    f_model = gtk_combo_box_get_model(GTK_COMBO_BOX(pcd->format_combobox));
-    gtk_tree_model_get(f_model, &f_iter, COL_DATA, &format, COL_SEP, &separator, -1);
-    if (separator)
-        return;
-
-    pnum = gtk_combo_box_get_active(GTK_COMBO_BOX(pcd->position_combobox));
-
-    /* Update the positions combobox */
-    pcd->selected_format = format;
-    p_store = gtk_list_store_new (1, G_TYPE_STRING);
-    gtk_combo_box_set_model(GTK_COMBO_BOX(pcd->position_combobox),
-                            GTK_TREE_MODEL(p_store));
-    if (format)
-    {
-        if (format->positions)
-        {
-            pcd->position_max = g_slist_length(format->positions); /* -1 for 0 base, +1 for custom entry */
-            for (elem = format->positions; elem; elem = g_slist_next(elem))
-            {
-                gtk_list_store_append(GTK_LIST_STORE(p_store), &iter);
-                gtk_list_store_set (GTK_LIST_STORE(p_store), &iter, 0, elem->data, -1);
-            }
-        }
-        else
-        {
-            /* Invent a "Top" position if format has no positions */
-            pcd->position_max = 1;
-            gtk_list_store_append(GTK_LIST_STORE(p_store), &iter);
-            gtk_list_store_set (GTK_LIST_STORE(p_store), &iter, 0, _("Top"), -1);
-        }
-    }
-    else
-    {
-        pcd->position_max = 0;
-    }
-    gtk_list_store_append(GTK_LIST_STORE(p_store), &iter);
-    gtk_list_store_set (GTK_LIST_STORE(p_store), &iter, 0, _("Custom"), -1);
-
-    /* If there's only one thing in the position combobox, make it insensitive */
-    sensitive = (pcd->position_max > 0);
-    gtk_widget_set_sensitive(GTK_WIDGET(pcd->position_combobox), sensitive);
-
-    /* Update the custom page, this must be done before setting the active
-       entry in the position combo box since gnc_print_check_position_changed2
-       will adjust these settings in some cases. */
-    sensitive = (!separator && !format);
-    gtk_container_foreach(GTK_CONTAINER(pcd->custom_table),
-                          gnc_print_check_set_sensitive,
-                          GINT_TO_POINTER(sensitive));
-
-    /* Set the active entry in the position combo box, this will trigger a
-       call to gnc_print_check_position_changed2 */
-    pnum = MAX(MIN(pnum, pcd->position_max), 0);
-    gtk_combo_box_set_active(GTK_COMBO_BOX(pcd->position_combobox), pnum);
-
-    /* Update address fields */
-    sensitive = check_format_has_address(pcd);
-    gtk_widget_set_sensitive(pcd->check_address_name, sensitive);
-    gtk_widget_set_sensitive(pcd->check_address_1, sensitive);
-    gtk_widget_set_sensitive(pcd->check_address_2, sensitive);
-    gtk_widget_set_sensitive(pcd->check_address_3, sensitive);
-    gtk_widget_set_sensitive(pcd->check_address_4, sensitive);
-}
-
-
-void
-gnc_print_check_position_changed2 (GtkComboBox *widget,
-                                   PrintCheckDialog *pcd)
-{
-    gboolean sensitive;
-    gint pnum;
-    guint check_count;
-    gint first_page_max, first_page_min, first_page_value;
-
-    pnum = gtk_combo_box_get_active(GTK_COMBO_BOX(pcd->position_combobox));
-
-    /* Make the translation and rotation fields active if the position is "custom" */
-    sensitive = pnum == pcd->position_max;
-    gtk_widget_set_sensitive(GTK_WIDGET(pcd->translation_x), sensitive);
-    gtk_widget_set_sensitive(GTK_WIDGET(pcd->translation_y), sensitive);
-    gtk_widget_set_sensitive(GTK_WIDGET(pcd->check_rotation), sensitive);
-    gtk_widget_set_sensitive(GTK_WIDGET(pcd->units_combobox), sensitive);
-
-    /* Set up the first page check count spin box */
-    check_count = g_list_length(pcd->splits);
-    first_page_max = MAX(1, MIN(pcd->position_max - pnum, check_count));
-    first_page_min = 1;
-    pnum = gtk_spin_button_get_value_as_int(pcd->first_page_count);
-    first_page_value = MAX(MIN(pnum, first_page_max), first_page_min);
-    gtk_spin_button_set_range(pcd->first_page_count, (gdouble)first_page_min, (gdouble)first_page_max);
-    gtk_spin_button_set_value(pcd->first_page_count, (gdouble)first_page_value);
-    sensitive = first_page_max > 1;
-    gtk_widget_set_sensitive(GTK_WIDGET(pcd->first_page_count), sensitive);
-}
-
-
-void
-gnc_ui_print_check_response_cb2(GtkDialog *dialog,
-                                gint response,
-                                PrintCheckDialog *pcd)
-{
-    switch (response)
-    {
-    case GTK_RESPONSE_HELP:
-        gnc_gnome_help(HF_HELP, HL_PRINTCHECK);
-        return;
-
-    case GTK_RESPONSE_OK:
-        gnc_ui_print_check_dialog_ok_cb(pcd);
-        gnc_ui_print_save_dialog(pcd);
-        gnc_save_window_size(GNC_PREFS_GROUP, GTK_WINDOW(dialog));
-        break;
-
-    case GTK_RESPONSE_CANCEL:
-        gnc_save_window_size(GNC_PREFS_GROUP, GTK_WINDOW(dialog));
-        break;
-    }
-
-    gtk_widget_destroy(pcd->dialog);
-    g_free(pcd->default_font);
-    g_list_free(pcd->splits);
-    g_free(pcd);
-}
diff --git a/src/gnome/dialog-print-check2.h b/src/gnome/dialog-print-check2.h
deleted file mode 100644
index 8adea88..0000000
--- a/src/gnome/dialog-print-check2.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/********************************************************************\
- * dialog-print-check2.h : dialog to control check printing          *
- * Copyright (C) 2000 Bill Gribble <grib at billgribble.com>           *
- * Copyright (C) 2006 David Hampton <hampton at employees.org>         *
- *                                                                  *
- * This program 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 (at your option) any later version.              *
- *                                                                  *
- * This program 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, contact:                        *
- *                                                                  *
- * Free Software Foundation           Voice:  +1-617-542-5942       *
- * 51 Franklin Street, Fifth Floor    Fax:    +1-617-542-2652       *
- * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
-\********************************************************************/
-
-#ifndef DIALOG_PRINT_CHECK2_H
-#define DIALOG_PRINT_CHECK2_H
-
-#include "print-session.h"
-
-typedef struct _print_check_dialog PrintCheckDialog;
-
-void gnc_ui_print_check_dialog_create2 (GncPluginPageRegister2 *plugin_page,
-                                        GList *splits);
-
-#endif
diff --git a/src/gnome/gnc-plugin-page-register.c b/src/gnome/gnc-plugin-page-register.c
index 8ddce64..950b526 100644
--- a/src/gnome/gnc-plugin-page-register.c
+++ b/src/gnome/gnc-plugin-page-register.c
@@ -2705,6 +2705,7 @@ gnc_plugin_page_register_cmd_print_check (GtkAction *action,
     GList         * splits = NULL, *item;
     GNCLedgerDisplayType ledger_type;
     Account       * account;
+    GtkWidget     * window;
 
     ENTER("(action %p, plugin_page %p)", action, plugin_page);
 
@@ -2713,6 +2714,7 @@ gnc_plugin_page_register_cmd_print_check (GtkAction *action,
     priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page);
     reg = gnc_ledger_display_get_split_register (priv->ledger);
     ledger_type = gnc_ledger_display_type(priv->ledger);
+    window = gnc_plugin_page_get_window(GNC_PLUGIN_PAGE(plugin_page));
     if (ledger_type == LD_SINGLE || ledger_type == LD_SUBACCOUNT)
     {
         account  = gnc_plugin_page_register_get_account (plugin_page);
@@ -2724,7 +2726,7 @@ gnc_plugin_page_register_cmd_print_check (GtkAction *action,
             if (xaccSplitGetAccount(split) == account)
             {
                 splits = g_list_append(splits, split);
-                gnc_ui_print_check_dialog_create(plugin_page, splits);
+                gnc_ui_print_check_dialog_create(window, splits);
                 g_list_free(splits);
             }
             else
@@ -2735,7 +2737,7 @@ gnc_plugin_page_register_cmd_print_check (GtkAction *action,
                 if (split)
                 {
                     splits = g_list_append(splits, split);
-                    gnc_ui_print_check_dialog_create(plugin_page, splits);
+                    gnc_ui_print_check_dialog_create(window, splits);
                     g_list_free(splits);
                 }
             }
@@ -2757,14 +2759,13 @@ gnc_plugin_page_register_cmd_print_check (GtkAction *action,
             {
                 if (xaccSplitGetAccount(split) != common_acct)
                 {
-                    GtkWidget *dialog, *window;
+                    GtkWidget *dialog;
                     gint response;
                     const gchar *title = _("Print checks from multiple accounts?");
                     const gchar *message =
                         _("This search result contains splits from more than one account. "
                           "Do you want to print the checks even though they are not all "
                           "from the same account?");
-                    window = gnc_plugin_page_get_window(GNC_PLUGIN_PAGE(plugin_page));
                     dialog = gtk_message_dialog_new(GTK_WINDOW(window),
                                                     GTK_DIALOG_DESTROY_WITH_PARENT,
                                                     GTK_MESSAGE_WARNING,
@@ -2786,11 +2787,11 @@ gnc_plugin_page_register_cmd_print_check (GtkAction *action,
                 }
             }
         }
-        gnc_ui_print_check_dialog_create(plugin_page, splits);
+        gnc_ui_print_check_dialog_create(window, splits);
     }
     else
     {
-        gnc_error_dialog(gnc_plugin_page_get_window(GNC_PLUGIN_PAGE(plugin_page)), "%s",
+        gnc_error_dialog(window, "%s",
                          _("You can only print checks from a bank account register or search results."));
         LEAVE("Unsupported ledger type");
         return;
diff --git a/src/gnome/gnc-plugin-page-register2.c b/src/gnome/gnc-plugin-page-register2.c
index c5494e4..80761bc 100644
--- a/src/gnome/gnc-plugin-page-register2.c
+++ b/src/gnome/gnc-plugin-page-register2.c
@@ -56,7 +56,7 @@
 
 #include "dialog-account.h"
 #include "dialog-find-transactions2.h"
-#include "dialog-print-check2.h"
+#include "dialog-print-check.h"
 #include "dialog-transfer.h"
 #include "dialog-utils.h"
 #include "SX-book.h"
@@ -2544,6 +2544,7 @@ gnc_plugin_page_register2_cmd_print_check (GtkAction *action,
     GList         * splits = NULL, *item;
     GNCLedgerDisplay2Type ledger_type;
     Account       * account;
+    GtkWidget     * window;
 
     ENTER("(action %p, plugin_page %p)", action, plugin_page);
 
@@ -2553,6 +2554,7 @@ gnc_plugin_page_register2_cmd_print_check (GtkAction *action,
     view = gnc_ledger_display2_get_split_view_register (priv->ledger);
     model = gnc_ledger_display2_get_split_model_register (priv->ledger);
     ledger_type = gnc_ledger_display2_type (priv->ledger);
+    window = gnc_plugin_page_get_window (GNC_PLUGIN_PAGE (plugin_page));
 
     if (ledger_type == LD2_SINGLE || ledger_type == LD2_SUBACCOUNT)
     {
@@ -2592,7 +2594,7 @@ gnc_plugin_page_register2_cmd_print_check (GtkAction *action,
             if (xaccSplitGetAccount(split) == account)
             {
                 splits = g_list_append(splits, split);
-                gnc_ui_print_check_dialog_create2 (plugin_page, splits);
+                gnc_ui_print_check_dialog_create (window, splits);
                 g_list_free(splits);
             }
             else
@@ -2603,7 +2605,7 @@ gnc_plugin_page_register2_cmd_print_check (GtkAction *action,
                 if (split)
                 {
                     splits = g_list_append(splits, split);
-                    gnc_ui_print_check_dialog_create2 (plugin_page, splits);
+                    gnc_ui_print_check_dialog_create (window, splits);
                     g_list_free(splits);
                 }
             }           
@@ -2625,14 +2627,13 @@ gnc_plugin_page_register2_cmd_print_check (GtkAction *action,
             {
                 if (xaccSplitGetAccount (split) != common_acct)
                 {
-                    GtkWidget *dialog, *window;
+                    GtkWidget *dialog;
                     gint response;
                     const gchar *title = _("Print checks from multiple accounts?");
                     const gchar *message =
                         _("This search result contains splits from more than one account. "
                           "Do you want to print the checks even though they are not all "
                           "from the same account?");
-                    window = gnc_plugin_page_get_window (GNC_PLUGIN_PAGE (plugin_page));
                     dialog = gtk_message_dialog_new (GTK_WINDOW (window),
                                                     GTK_DIALOG_DESTROY_WITH_PARENT,
                                                     GTK_MESSAGE_WARNING,
@@ -2654,11 +2655,11 @@ gnc_plugin_page_register2_cmd_print_check (GtkAction *action,
                 }
             }
         }
-        gnc_ui_print_check_dialog_create2 (plugin_page, splits);
+        gnc_ui_print_check_dialog_create (window, splits);
     }
     else
     {
-        gnc_error_dialog (gnc_plugin_page_get_window (GNC_PLUGIN_PAGE (plugin_page)), "%s",
+        gnc_error_dialog (window, "%s",
                          _("You can only print checks from a bank account register or search results."));
         LEAVE("Unsupported ledger type");
         return;



Summary of changes:
 src/gnome/CMakeLists.txt              |    2 -
 src/gnome/Makefile.am                 |    2 -
 src/gnome/dialog-print-check.c        |    9 +-
 src/gnome/dialog-print-check.h        |    2 +-
 src/gnome/dialog-print-check2.c       | 2648 ---------------------------------
 src/gnome/dialog-print-check2.h       |   34 -
 src/gnome/gnc-plugin-page-register.c  |   13 +-
 src/gnome/gnc-plugin-page-register2.c |   15 +-
 8 files changed, 19 insertions(+), 2706 deletions(-)
 delete mode 100644 src/gnome/dialog-print-check2.c
 delete mode 100644 src/gnome/dialog-print-check2.h



More information about the gnucash-changes mailing list