diff --git a/src/gnome/dialog-print-check.c b/src/gnome/dialog-print-check.c
index fd6b42607f..904e110ac8 100644
--- a/src/gnome/dialog-print-check.c
+++ b/src/gnome/dialog-print-check.c
@@ -63,6 +63,7 @@
#define KEY_CHECK_FORMAT_GUID "check_format_guid"
#define KEY_CHECK_FORMAT "check_format"
#define KEY_CHECK_POSITION "check_position"
+#define KEY_FIRST_PAGE_COUNT "first_page_count"
#define KEY_DATE_FORMAT_USER "date_format_custom"
#define KEY_CUSTOM_PAYEE "custom_payee"
#define KEY_CUSTOM_DATE "custom_date"
@@ -134,12 +135,13 @@ typedef enum format_combo_col_t
/* Used by glade_xml_signal_autoconnect_full */
void gnc_ui_print_check_response_cb(GtkDialog * dialog, gint response, PrintCheckDialog * pcd);
void gnc_print_check_format_changed(GtkComboBox *widget, PrintCheckDialog * pcd);
+void gnc_print_check_position_changed(GtkComboBox *widget, PrintCheckDialog * pcd);
void gnc_print_check_save_button_clicked(GtkButton *button, PrintCheckDialog *pcd);
void gnc_check_format_title_changed (GtkEditable *editable, GtkWidget *ok_button);
static void initialize_format_combobox (PrintCheckDialog * pcd);
gchar* get_check_address(PrintCheckDialog *pcd);
-gboolean check_format_has_address(PrintCheckDialog *pcd);
+static gboolean check_format_has_address(PrintCheckDialog *pcd);
gchar* get_check_splits_amount(PrintCheckDialog *pcd);
gchar* get_check_splits_memo(PrintCheckDialog *pcd);
gchar* get_check_splits_account(PrintCheckDialog *pcd);
@@ -271,11 +273,13 @@ struct _print_check_dialog
GncPluginPageRegister *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;
@@ -503,7 +507,7 @@ get_check_splits_account(PrintCheckDialog *pcd)
//@}
/** This function determines if an address item is present in the check format.*/
-gboolean
+static gboolean
check_format_has_address ( PrintCheckDialog *pcd )
{
/* check format for an ADDRESS item */
@@ -512,6 +516,11 @@ check_format_has_address ( PrintCheckDialog *pcd )
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;
@@ -545,6 +554,8 @@ gnc_ui_print_save_dialog(PrintCheckDialog * pcd)
}
active = gtk_combo_box_get_active(GTK_COMBO_BOX(pcd->position_combobox));
gnc_gconf_set_int(GCONF_SECTION, KEY_CHECK_POSITION, active, NULL);
+ active = gtk_spin_button_get_value_as_int(pcd->first_page_count);
+ gnc_gconf_set_int(GCONF_SECTION, KEY_FIRST_PAGE_COUNT, active, NULL);
active = gnc_date_format_get_format (GNC_DATE_FORMAT(pcd->date_format));
gnc_gconf_set_int(GCONF_SECTION, KEY_DATE_FORMAT, active, NULL);
if (active == QOF_DATE_FORMAT_CUSTOM)
@@ -632,7 +643,13 @@ gnc_ui_print_restore_dialog(PrintCheckDialog * pcd)
}
}
active = gnc_gconf_get_int(GCONF_SECTION, KEY_CHECK_POSITION, NULL);
+ /* 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_gconf_get_int(GCONF_SECTION, KEY_FIRST_PAGE_COUNT, NULL);
+ gtk_spin_button_set_value(pcd->first_page_count, (gdouble) active);
active = gnc_gconf_get_int(GCONF_SECTION, KEY_DATE_FORMAT, NULL);
gnc_date_format_set_format(GNC_DATE_FORMAT(pcd->date_format), active);
if (active == QOF_DATE_FORMAT_CUSTOM)
@@ -1584,18 +1601,19 @@ initialize_format_combobox (PrintCheckDialog * pcd)
void
gnc_ui_print_check_dialog_create(GncPluginPageRegister *plugin_page,
- Split *split)
+ GList *splits)
{
PrintCheckDialog * pcd;
GladeXML *xml;
GtkWidget *table;
GtkWindow *window;
gchar *font;
- Transaction *trans;
+ Transaction *trans = NULL;
+ Split *split;
pcd = g_new0(PrintCheckDialog, 1);
pcd->plugin_page = plugin_page;
- pcd->split = split;
+ pcd->splits = g_list_copy(splits);
xml = gnc_glade_xml_new ("print.glade", "Print Check Dialog");
glade_xml_signal_autoconnect_full(xml, gnc_glade_autoconnect_full_func, pcd);
@@ -1606,6 +1624,7 @@ gnc_ui_print_check_dialog_create(GncPluginPageRegister *plugin_page,
/* now pick out the relevant child widgets */
pcd->format_combobox = glade_xml_get_widget (xml, "check_format_combobox");
pcd->position_combobox = glade_xml_get_widget (xml, "check_position_combobox");
+ pcd->first_page_count = GTK_SPIN_BUTTON(glade_xml_get_widget (xml, "first_page_count_entry"));
pcd->custom_table = glade_xml_get_widget (xml, "custom_table");
pcd->payee_x = GTK_SPIN_BUTTON(glade_xml_get_widget (xml, "payee_x_entry"));
@@ -1646,7 +1665,7 @@ gnc_ui_print_check_dialog_create(GncPluginPageRegister *plugin_page,
/* Create and attach the date-format chooser */
table = glade_xml_get_widget (xml, "options_table");
pcd->date_format = gnc_date_format_new_without_label();
- gtk_table_attach_defaults(GTK_TABLE(table), pcd->date_format, 1, 3, 2, 7);
+ gtk_table_attach_defaults(GTK_TABLE(table), pcd->date_format, 1, 3, 3, 7);
/* Default font (set in preferences) */
font = gnc_gconf_get_string(GCONF_SECTION, KEY_DEFAULT_FONT, NULL);
@@ -1664,7 +1683,10 @@ gnc_ui_print_check_dialog_create(GncPluginPageRegister *plugin_page,
/* fill in any available address data */
/* Can't access business objects e.g. Customer,Vendor,Employee because
* it would create build problems */
- trans = xaccSplitGetParent(pcd->split);
+ 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));
@@ -2022,7 +2044,7 @@ draw_date_format(GncPrintContext * context, const gchar *date_format,
* items. */
static void
draw_page_items(GncPrintContext * context,
- gint page_nr, check_format_t * format, gpointer user_data)
+ check_format_t * format, gpointer user_data)
{
PrintCheckDialog *pcd = (PrintCheckDialog *) user_data;
PangoFontDescription *default_desc;
@@ -2146,7 +2168,7 @@ draw_page_items(GncPrintContext * context,
* items. */
static void
draw_page_boxes(GncPrintContext * context,
- gint page_nr, check_format_t * format, gpointer user_data)
+ check_format_t * format, gpointer user_data)
{
cairo_t *cr;
GSList *elem;
@@ -2170,15 +2192,15 @@ draw_page_boxes(GncPrintContext * context,
* 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_page_format(GncPrintContext * context,
- gint page_nr, check_format_t * format, gpointer user_data)
+draw_check_format(GncPrintContext * context, gint position,
+ check_format_t * format, gpointer user_data)
{
PrintCheckDialog *pcd = (PrintCheckDialog *) user_data;
cairo_t *cr;
- gint i;
- gdouble x, y, multip;
+ gdouble x, y, r, multip;
cr = gtk_print_context_get_cairo_context(context);
+ cairo_identity_matrix(cr);
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);
@@ -2194,10 +2216,9 @@ draw_page_format(GncPrintContext * context,
}
/* Translate all subsequent check items if requested. */
- i = gtk_combo_box_get_active(GTK_COMBO_BOX(pcd->position_combobox));
- if ((i >= 0) && (i < pcd->position_max))
+ if ((position >= 0) && (position < pcd->position_max))
{
- y = format->height * i;
+ y = format->height * position;
cairo_translate(cr, 0, y);
g_debug("Position translated by %f (pre-defined)", y);
}
@@ -2207,21 +2228,24 @@ draw_page_format(GncPrintContext * context,
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 (custom)", 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, page_nr, format, user_data);
+ draw_page_boxes(context, format, user_data);
/* Draw the actual check data. */
- draw_page_items(context, page_nr, format, user_data);
+ draw_page_items(context, format, user_data);
}
static void
-draw_page_custom(GncPrintContext * context, gint page_nr, gpointer user_data)
+draw_check_custom(GncPrintContext * context, gpointer user_data)
{
PrintCheckDialog *pcd = (PrintCheckDialog *) user_data;
GNCPrintAmountInfo info;
@@ -2313,11 +2337,9 @@ draw_page_custom(GncPrintContext * context, gint page_nr, gpointer user_data)
pango_font_description_free(desc);
}
-/* Print a page of checks. Today, check printing only prints one check at a
- * time. When its extended to print multiple checks, this will need to take
- * 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. */
+/* 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)
@@ -2327,23 +2349,84 @@ draw_page(GtkPrintOperation * operation,
format = pcd->selected_format;
if (format)
- draw_page_format(context, page_nr, format, user_data);
+ {
+ 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;
+
+ position = gtk_combo_box_get_active(GTK_COMBO_BOX(pcd->position_combobox));
+ 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
- draw_page_custom(context, page_nr, user_data);
+ {
+ /* 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.
- * Today, check printing only prints one check at a time. When its extended to
- * print multiple checks, this will need to take 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 to
- * determine the number of pages required to complete the 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)
{
- gtk_print_operation_set_n_pages(operation, 1);
+ 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);
}
/********************************************************************\
@@ -2361,7 +2444,7 @@ gnc_ui_print_check_dialog_ok_cb(PrintCheckDialog * pcd)
gnc_print_operation_init(print);
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), NULL);
+ 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,
@@ -2378,7 +2461,10 @@ gnc_ui_print_check_dialog_ok_cb(PrintCheckDialog * pcd)
static void
gnc_print_check_set_sensitive (GtkWidget *widget, gpointer data)
{
- gboolean sensitive = GPOINTER_TO_INT(data);
+ gboolean sensitive;
+ if (GTK_IS_LABEL(widget) || GTK_IS_SEPARATOR(widget))
+ return;
+ sensitive = GPOINTER_TO_INT(data);
gtk_widget_set_sensitive(widget, sensitive);
}
@@ -2411,10 +2497,19 @@ gnc_print_check_format_changed (GtkComboBox *widget,
GTK_TREE_MODEL(p_store));
if (format)
{
- 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))
+ 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_combo_box_append_text(GTK_COMBO_BOX(pcd->position_combobox), elem->data);
+ }
+ }
+ else
{
- gtk_combo_box_append_text(GTK_COMBO_BOX(pcd->position_combobox), elem->data);
+ /* Invent a "Top" position if format has no positions */
+ pcd->position_max = 1;
+ gtk_combo_box_append_text(GTK_COMBO_BOX(pcd->position_combobox), _("Top"));
}
}
else
@@ -2422,19 +2517,24 @@ gnc_print_check_format_changed (GtkComboBox *widget,
pcd->position_max = 0;
}
gtk_combo_box_append_text(GTK_COMBO_BOX(pcd->position_combobox), _("Custom"));
- pnum = MIN(pnum, pcd->position_max);
- gtk_combo_box_set_active(GTK_COMBO_BOX(pcd->position_combobox), pnum);
-
+
/* 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 */
+ /* Update the custom page, this must be done before setting the active
+ entry in the position combo box since gnc_print_check_position_changed
+ 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_changed */
+ 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);
@@ -2444,6 +2544,37 @@ gnc_print_check_format_changed (GtkComboBox *widget,
gtk_widget_set_sensitive(pcd->check_address_4, sensitive);
}
+void
+gnc_print_check_position_changed (GtkComboBox *widget,
+ PrintCheckDialog * pcd)
+{
+ gboolean sensitive;
+ gint pnum;
+ guint check_count;
+ gint first_page_max, first_page_min, first_page_value;
+ gdouble fpmin,fpmax;
+
+ 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_cb(GtkDialog * dialog,
gint response,
@@ -2469,5 +2600,6 @@ gnc_ui_print_check_response_cb(GtkDialog * dialog,
gtk_widget_destroy(pcd->dialog);
g_object_unref(pcd->xml);
g_free(pcd->default_font);
+ g_list_free(pcd->splits);
g_free(pcd);
}
diff --git a/src/gnome/dialog-print-check.h b/src/gnome/dialog-print-check.h
index 24d77ed50d..89df311f56 100644
--- a/src/gnome/dialog-print-check.h
+++ b/src/gnome/dialog-print-check.h
@@ -31,7 +31,6 @@
typedef struct _print_check_dialog PrintCheckDialog;
void gnc_ui_print_check_dialog_create(GncPluginPageRegister *plugin_page,
- Split *split);
-void gnc_ui_print_check_dialog_destroy(PrintCheckDialog * pcd);
+ GList *splits);
#endif
diff --git a/src/gnome/glade/print.glade b/src/gnome/glade/print.glade
index 0bb24ebd50..51458b8114 100644
--- a/src/gnome/glade/print.glade
+++ b/src/gnome/glade/print.glade
@@ -63,8 +63,8 @@
center
- 2
- 3
+ 3
+ 4
GTK_FILL
GTK_FILL
@@ -91,6 +91,7 @@ Custom
Middle
Bottom
Custom
+
1
@@ -241,10 +242,41 @@ to print an address on the check.
-
+
+ True
+ 0
+ Checks on first _page:
+ True
+ first_page_count_entry
+
+
+ 2
+ 3
+ GTK_FILL
+
+
-
+
+ True
+ True
+ •
+ 3
+ 1
+ False
+ 0 0 100 1 1 0
+ True
+ True
+ True
+
+
+ 1
+ 2
+ 2
+ 3
+
+
+
diff --git a/src/gnome/gnc-plugin-page-register.c b/src/gnome/gnc-plugin-page-register.c
index 6d653e2b15..3c74145015 100644
--- a/src/gnome/gnc-plugin-page-register.c
+++ b/src/gnome/gnc-plugin-page-register.c
@@ -173,7 +173,7 @@ static GtkActionEntry gnc_plugin_page_register_actions [] =
/* File menu */
{
- "FilePrintAction", GTK_STOCK_PRINT, N_("_Print Check..."), "p", NULL,
+ "FilePrintAction", GTK_STOCK_PRINT, N_("_Print Checks..."), "p", NULL,
G_CALLBACK (gnc_plugin_page_register_cmd_print_check)
},
@@ -2092,7 +2092,8 @@ gnc_plugin_page_register_cmd_print_check (GtkAction *action,
SplitRegister * reg;
Split * split;
Transaction * trans;
-
+ GList * splits = NULL, *item;
+ GNCLedgerDisplayType ledger_type;
ENTER("(action %p, plugin_page %p)", action, plugin_page);
@@ -2100,12 +2101,71 @@ 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);
- split = gnc_split_register_get_current_split(reg);
- trans = xaccSplitGetParent(split);
-
- if (split && trans)
+ ledger_type = gnc_ledger_display_type(priv->ledger);
+ if (ledger_type == LD_SINGLE || ledger_type == LD_SUBACCOUNT)
+ {
+ split = gnc_split_register_get_current_split(reg);
+ trans = xaccSplitGetParent(split);
+
+ if (split && trans)
+ {
+ splits = g_list_append(splits, split);
+ gnc_ui_print_check_dialog_create(plugin_page, splits);
+ g_list_free(splits);
+ }
+ }
+ else if (ledger_type == LD_GL && reg->type == SEARCH_LEDGER)
+ {
+ Account *common_acct = NULL, *account;
+ splits = xaccQueryGetSplits(gnc_ledger_display_get_query(priv->ledger));
+ /* Make sure each split is from the same account */
+ for (item = splits; item; item = g_list_next(item))
+ {
+ split = (Split *) item->data;
+ if (common_acct == NULL)
+ {
+ common_acct = xaccSplitGetAccount(split);
+ }
+ else
+ {
+ if (xaccSplitGetAccount(split) != common_acct)
+ {
+ GtkWidget *dialog, *window;
+ 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,
+ GTK_BUTTONS_CANCEL,
+ "%s", title);
+ gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
+ "%s", message);
+ gtk_dialog_add_button(GTK_DIALOG(dialog), _("_Print checks"),
+ GTK_RESPONSE_YES);
+ response = gnc_dialog_run(GTK_DIALOG(dialog), "print_multi_acct_checks");
+ gtk_widget_destroy(dialog);
+ if (response != GTK_RESPONSE_YES)
+ {
+ LEAVE("Multiple accounts");
+ return;
+ }
+ break;
+ }
+ }
+ }
+ gnc_ui_print_check_dialog_create(plugin_page, splits);
+ }
+ else
{
- gnc_ui_print_check_dialog_create(plugin_page, split);
+ gnc_error_dialog(gnc_plugin_page_get_window(GNC_PLUGIN_PAGE(plugin_page)), "%s",
+ _("You can only print checks from a bank account register or search results."));
+ LEAVE("Unsupported ledger type");
+ return;
}
LEAVE(" ");
}
diff --git a/src/gnome/schemas/apps_gnucash_warnings.schemas.in b/src/gnome/schemas/apps_gnucash_warnings.schemas.in
index c9db1583b5..616a15a058 100644
--- a/src/gnome/schemas/apps_gnucash_warnings.schemas.in
+++ b/src/gnome/schemas/apps_gnucash_warnings.schemas.in
@@ -210,5 +210,18 @@
+
+ /schemas/apps/gnucash/general/warnings/print_multi_acct_checks
+ /apps/gnucash/general/warnings/permanent/print_multi_acct_checks
+ /apps/gnucash/general/warnings/temporary/print_multi_acct_checks
+ gnucash
+ int
+ 0
+
+ Print checks from multiple accounts
+ This dialog is presented if you try to print checks from multiple accounts at the same time.
+
+
+