[Gnucash-changes] r13019 - gnucash/trunk - HIG rework. Remove
newlines from dialog message strings. Give some
David Hampton
hampton at cvs.gnucash.org
Sun Jan 29 09:53:20 EST 2006
Author: hampton
Date: 2006-01-29 09:53:19 -0500 (Sun, 29 Jan 2006)
New Revision: 13019
Trac: http://svn.gnucash.org/trac/changeset/13019
Removed:
gnucash/trunk/src/app-utils/gnc-err-popup.c
gnucash/trunk/src/app-utils/gnc-err-popup.h
Modified:
gnucash/trunk/ChangeLog
gnucash/trunk/src/app-utils/Makefile.am
gnucash/trunk/src/app-utils/option-util.c
gnucash/trunk/src/business/business-gnome/gnc-plugin-business.c
gnucash/trunk/src/business/business-ledger/gncEntryLedger.c
gnucash/trunk/src/business/business-ledger/gncEntryLedgerControl.c
gnucash/trunk/src/gnc-ui.h
gnucash/trunk/src/gnome-utils/dialog-utils.c
gnucash/trunk/src/gnome-utils/dialog-utils.h
gnucash/trunk/src/gnome-utils/gnc-file.c
gnucash/trunk/src/gnome-utils/gnc-file.h
gnucash/trunk/src/gnome-utils/gnc-gnome-utils.c
gnucash/trunk/src/gnome-utils/gnc-gui-query.c
gnucash/trunk/src/gnome-utils/gnc-gui-query.h
gnucash/trunk/src/gnome-utils/gnc-main-window.c
gnucash/trunk/src/gnome-utils/gncmod-gnome-utils.c
gnucash/trunk/src/gnome-utils/gw-gnome-utils-spec.scm
gnucash/trunk/src/gnome/dialog-chart-export.c
gnucash/trunk/src/gnome/dialog-commodities.c
gnucash/trunk/src/gnome/dialog-price-edit-db.c
gnucash/trunk/src/gnome/gnc-split-reg.c
gnucash/trunk/src/gnome/schemas/apps_gnucash_warnings.schemas.in
gnucash/trunk/src/import-export/hbci/dialog-pass.c
gnucash/trunk/src/register/ledger-core/split-register-control.c
gnucash/trunk/src/register/ledger-core/split-register-model.c
gnucash/trunk/src/register/ledger-core/split-register.c
Log:
HIG rework. Remove newlines from dialog message strings. Give some
dialogs more descriptive button labels. Clean up the code around the
file save query dialog.
Modified: gnucash/trunk/ChangeLog
===================================================================
--- gnucash/trunk/ChangeLog 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/ChangeLog 2006-01-29 14:53:19 UTC (rev 13019)
@@ -1,3 +1,33 @@
+2006-01-28 David Hampton <hampton at employees.org>
+
+ * src/gnome-utils/gncmod-gnome-utils.c:
+ * src/app-utils/gnc-err-popup.[ch]:
+ * src/app-utils/Makefile.am: Remove deprecated files
+
+ * src/register/ledger-core/split-register-model.c:
+ * src/register/ledger-core/split-register.c:
+ * src/register/ledger-core/split-register-control.c:
+ * src/import-export/hbci/dialog-pass.c:
+ * src/business/business-ledger/gncEntryLedger.c:
+ * src/business/business-ledger/gncEntryLedgerControl.c:
+ * src/business/business-gnome/gnc-plugin-business.c:
+ * src/gnome-utils/gnc-gnome-utils.c:
+ * src/gnome-utils/gw-gnome-utils-spec.scm:
+ * src/gnome-utils/gnc-file.[ch]:
+ * src/gnome-utils/gnc-main-window.c:
+ * src/gnome-utils/dialog-utils.[ch]:
+ * src/gnome-utils/gnc-gui-query.[ch]:
+ * src/gnome/gnc-split-reg.c:
+ * src/gnome/dialog-chart-export.c:
+ * src/gnome/schemas/apps_gnucash_warnings.schemas.in:
+ * src/gnome/dialog-commodities.c:
+ * src/gnome/dialog-price-edit-db.c:
+ * src/gnc-ui.h:
+ * src/app-utils/option-util.c: HIG rework. Remove newlines from
+ dialog message strings. Give some dialogs more descriptive button
+ labels. Clean up the code around the file save query dialog.
+
+
2006-01-28 Joshua Sled <jsled at asynchronous.org>
* src/report/report-system/html-style-sheet.scm
Modified: gnucash/trunk/src/app-utils/Makefile.am
===================================================================
--- gnucash/trunk/src/app-utils/Makefile.am 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/app-utils/Makefile.am 2006-01-29 14:53:19 UTC (rev 13019)
@@ -30,7 +30,6 @@
gnc-druid-provider-desc-file.c \
gnc-druid-provider-desc-multifile.c \
gnc-druid-provider-file-cb.c \
- gnc-err-popup.c \
gnc-euro.c \
gnc-exp-parser.c \
gnc-gettext-util.c \
@@ -56,7 +55,6 @@
gnc-druid-provider-desc-file.h \
gnc-druid-provider-desc-multifile.h \
gnc-druid-provider-file-cb.h \
- gnc-err-popup.h \
gnc-euro.h \
gnc-exp-parser.h \
gnc-gettext-util.h \
Deleted: gnucash/trunk/src/app-utils/gnc-err-popup.c
===================================================================
--- gnucash/trunk/src/app-utils/gnc-err-popup.c 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/app-utils/gnc-err-popup.c 2006-01-29 14:53:19 UTC (rev 13019)
@@ -1,79 +0,0 @@
-/********************************************************************\
- * gnc-err-popup.c -- GnuCash error GUI popups *
- * Copyright (c) 2001 Linux Developers Group, Inc. *
- * *
- * 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 *
-\********************************************************************/
-
-#include "config.h"
-
-#include <glib.h>
-#include <stdarg.h>
-#include <string.h>
-
-#include "gnc-err-popup.h"
-
-
-/********************************************************************\
- Callbacks so that app can display gui messages.
-\********************************************************************/
-
-static GNCGuiMessage gnc_gui_warning_func = NULL;
-static GNCGuiMessage gnc_gui_error_func = NULL;
-
-void
-gnc_set_warning_message (GNCGuiMessage func)
-{
- gnc_gui_warning_func = func;
-}
-
-void
-gnc_set_error_message (GNCGuiMessage func)
-{
- gnc_gui_error_func = func;
-}
-
-gboolean
-gnc_send_gui_warning(const gchar *format, ...)
-{
- va_list args;
-
- if (!gnc_gui_warning_func) return FALSE;
-
- va_start (args, format);
- gnc_gui_warning_func(format, args);
- va_end(args);
- return(TRUE);
-}
-
-gboolean
-gnc_send_gui_error(const gchar *format, ...)
-{
- va_list args;
-
- if (!gnc_gui_error_func) return(FALSE);
-
- va_start (args, format);
- gnc_gui_error_func(format, args);
- va_end(args);
- return(TRUE);
-}
-
-
-/************************* END OF FILE ******************************\
-\********************************************************************/
Deleted: gnucash/trunk/src/app-utils/gnc-err-popup.h
===================================================================
--- gnucash/trunk/src/app-utils/gnc-err-popup.h 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/app-utils/gnc-err-popup.h 2006-01-29 14:53:19 UTC (rev 13019)
@@ -1,50 +0,0 @@
-/********************************************************************\
- * gnc-err-popup.h -- GnuCash GUI Error Popup *
- * *
- * 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 gnc-err-popup.h @brief GnuCash GUI error loging facility
- * Copyright (c) 2001 Linux Developers Group, Inc.
- */
-
-#ifndef GNC_ERR_POPUP_H
-#define GNC_ERR_POPUP_H
-
-#include <glib.h>
-#include <stdarg.h>
-#include <stdio.h>
-
-/* -------------------------------------------------------- */
-/* Infrastructure to send messages go to GUI popups, not to stderr!
- * Incompletely implemented, needs work.
- * XXX This probably duplicates some popup code elswwhere in the
- * code and should be trashed at earliest convenience.
- */
-typedef void (*GNCGuiMessage) (const char *format, va_list args);
-void gnc_set_warning_message (GNCGuiMessage func);
-void gnc_set_error_message (GNCGuiMessage func);
-
-gboolean gnc_send_gui_warning (const char *format, ...) G_GNUC_PRINTF(1,2);
-gboolean gnc_send_gui_error (const char *format, ...) G_GNUC_PRINTF(1,2);
-
-#define PWARN_GUI(format, args...) { \
- gnc_send_gui_error(format, ## args); \
-}
-
-#endif /* GNC_ERR_POPUP_H */
Modified: gnucash/trunk/src/app-utils/option-util.c
===================================================================
--- gnucash/trunk/src/app-utils/option-util.c 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/app-utils/option-util.c 2006-01-29 14:53:19 UTC (rev 13019)
@@ -22,7 +22,7 @@
#include "config.h"
-#include <glib.h>
+#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include <time.h>
#include <string.h>
@@ -32,7 +32,6 @@
#include "glib-helpers.h"
#include "guile-util.h"
#include "qof.h"
-#include "gnc-err-popup.h"
#include "guile-mappings.h"
#include <g-wrap-wct.h>
@@ -1730,7 +1729,9 @@
{
SCM oops;
char *section, *name;
+ GtkWidget *dialog;
const gchar *message;
+ const gchar *format = _("There is a problem with option %s:%s.\n%s");
/* Second element is error message */
oops = SCM_CADR(result);
@@ -1744,10 +1745,16 @@
name = gnc_option_name(option);
section = gnc_option_section(option);
- gnc_send_gui_error(_("There is a problem with option %s:%s.\n%s"),
- section ? section : "(null)",
- name ? name : "(null)",
- message ? message : "(null)");
+ dialog = gtk_message_dialog_new(NULL,
+ 0,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ format,
+ section ? section : "(null)",
+ name ? name : "(null)",
+ message ? message : "(null)");
+ gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
if (name != NULL)
free(name);
Modified: gnucash/trunk/src/business/business-gnome/gnc-plugin-business.c
===================================================================
--- gnucash/trunk/src/business/business-gnome/gnc-plugin-business.c 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/business/business-gnome/gnc-plugin-business.c 2006-01-29 14:53:19 UTC (rev 13019)
@@ -735,7 +735,8 @@
qof_session_save(chart_session, NULL);
}
}
- show_session_error(qof_session_get_error(chart_session), filename);
+ show_session_error(qof_session_get_error(chart_session), filename,
+ GNC_FILE_DIALOG_EXPORT);
g_free(filename);
qof_session_end(chart_session);
qof_session_set_current_session(current_session);
@@ -766,7 +767,8 @@
qof_session_save(chart_session, NULL);
}
}
- show_session_error(qof_session_get_error(chart_session), filename);
+ show_session_error(qof_session_get_error(chart_session), filename,
+ GNC_FILE_DIALOG_EXPORT);
qof_session_end(chart_session);
g_free(filename);
qof_session_set_current_session(current_session);
@@ -797,7 +799,8 @@
qof_session_save(chart_session, NULL);
}
}
- show_session_error(qof_session_get_error(chart_session), filename);
+ show_session_error(qof_session_get_error(chart_session), filename,
+ GNC_FILE_DIALOG_EXPORT);
qof_session_end(chart_session);
g_free(filename);
qof_session_set_current_session(current_session);
@@ -828,7 +831,8 @@
qof_session_save(chart_session, NULL);
}
}
- show_session_error(qof_session_get_error(chart_session), filename);
+ show_session_error(qof_session_get_error(chart_session), filename,
+ GNC_FILE_DIALOG_EXPORT);
qof_session_end(chart_session);
g_free(filename);
qof_session_set_current_session(current_session);
Modified: gnucash/trunk/src/business/business-ledger/gncEntryLedger.c
===================================================================
--- gnucash/trunk/src/business/business-ledger/gncEntryLedger.c 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/business/business-ledger/gncEntryLedger.c 2006-01-29 14:53:19 UTC (rev 13019)
@@ -25,11 +25,12 @@
#include "config.h"
-#include <glib.h>
+#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include "Account.h"
#include "dialog-account.h"
+#include "dialog-utils.h"
#include "gnc-ui-util.h"
#include "combocell.h"
#include "pricecell.h"
@@ -801,13 +802,29 @@
/* If the cursor has been edited, we are going to have to commit
* it before we can duplicate. Make sure the user wants to do that. */
if (changed) {
- const char *message = _("The current entry has been changed.\n"
- "Would you like to save it?");
- gint result;
+ const char *title = _("Save the current entry?");
+ const char *message =
+ _("The current transaction has been changed. Would you like to "
+ "record the changes before duplicating this entry, or "
+ "cancel the duplication?");
+ GtkWidget *dialog;
+ gint response;
- result = gnc_ok_cancel_dialog (ledger->parent, GTK_RESPONSE_OK, message);
+ dialog = gtk_message_dialog_new(GTK_WINDOW(ledger->parent),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_NONE,
+ "%s", title);
+ gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
+ "%s", message);
+ gtk_dialog_add_buttons(GTK_DIALOG(dialog),
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ _("_Record"), GTK_RESPONSE_ACCEPT,
+ NULL);
+ response = gnc_dialog_run(GTK_DIALOG(dialog), "invoice_entry_duplicated");
+ gtk_widget_destroy(dialog);
- if (result != GTK_RESPONSE_OK) {
+ if (response != GTK_RESPONSE_ACCEPT) {
gnc_resume_gui_refresh ();
return;
}
Modified: gnucash/trunk/src/business/business-ledger/gncEntryLedgerControl.c
===================================================================
--- gnucash/trunk/src/business/business-ledger/gncEntryLedgerControl.c 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/business/business-ledger/gncEntryLedgerControl.c 2006-01-29 14:53:19 UTC (rev 13019)
@@ -31,6 +31,7 @@
#include "Account.h"
#include "combocell.h"
#include "dialog-account.h"
+#include "dialog-utils.h"
#include "gnc-component-manager.h"
#include "gnc-ui.h"
#include "gnc-ui-util.h"
@@ -272,7 +273,7 @@
{
GncEntryLedger *ledger = user_data;
GncEntry *entry, *new_entry;
- gint result;
+ gint response;
VirtualLocation virt_loc;
int changed;
char const *cell_name;
@@ -482,35 +483,46 @@
* limited cases -- usually just let the change go through.
*/
{
- const char *message;
+ GtkWidget *dialog;
+ const char *title = _("Save the current entry?");
+ const char *message =
+ _("The current entry has been changed. However, this entry is "
+ "part of an existing order. Would you like to record the change "
+ "and effectively change your order?");
switch (ledger->type) {
case GNCENTRY_INVOICE_ENTRY:
if (gncEntryGetOrder (entry) != NULL) {
- message = _("The current entry has been changed.\n"
- "However, this entry is part of an existing order.\n"
- "Would you like to record the change and\n"
- "effectively change your order?");
+ dialog = gtk_message_dialog_new(GTK_WINDOW(ledger->parent),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_NONE,
+ "%s", title);
+ gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
+ "%s", message);
+ gtk_dialog_add_buttons(GTK_DIALOG(dialog),
+ _("_Don't Record"), GTK_RESPONSE_REJECT,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ _("_Record"), GTK_RESPONSE_ACCEPT,
+ NULL);
+ response = gnc_dialog_run(GTK_DIALOG(dialog), "invoice_entry_changed");
+ gtk_widget_destroy(dialog);
break;
}
/* FALLTHROUGH */
default:
- result = GTK_RESPONSE_YES;
- goto dontask;
+ response = GTK_RESPONSE_ACCEPT;
+ break;
}
-
- result = gnc_verify_cancel_dialog(ledger->parent, GTK_RESPONSE_YES, message);
}
-dontask:
-
- switch (result)
+ switch (response)
{
- case GTK_RESPONSE_YES:
+ case GTK_RESPONSE_ACCEPT:
break;
- case GTK_RESPONSE_NO:
+ case GTK_RESPONSE_REJECT:
{
VirtualCellLocation vcell_loc;
GncEntry *new_entry;
@@ -531,10 +543,8 @@
break;
case GTK_RESPONSE_CANCEL:
+ default:
return TRUE;
-
- default:
- break;
}
return FALSE;
Modified: gnucash/trunk/src/gnc-ui.h
===================================================================
--- gnucash/trunk/src/gnc-ui.h 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/gnc-ui.h 2006-01-29 14:53:19 UTC (rev 13019)
@@ -63,24 +63,11 @@
/* Dialog windows ***************************************************/
-extern gint
-gnc_verify_cancel_dialog(gncUIWidget parent,
- gint default_result,
- const char *format, ...) G_GNUC_PRINTF (3,4);
-
-
-
extern gboolean
gnc_verify_dialog(gncUIWidget parent,
gboolean yes_is_default,
const char *format, ...) G_GNUC_PRINTF (3, 4);
-gint
-gnc_verify_remember_dialog(gncUIWidget parent, const gchar *gconf_key,
- const gchar *yes_label, const gchar *no_label,
- const gchar *format, ...) G_GNUC_PRINTF (5,6);
-
-
extern gint
gnc_ok_cancel_dialog(gncUIWidget parent,
gint default_result,
@@ -94,12 +81,6 @@
-gint
-gnc_warning_remember_dialog(gncUIWidget parent, const gchar *gconf_key,
- const gchar *yes_label, const gchar *no_label,
- const gchar *format, ...) G_GNUC_PRINTF (5,6);
-
-
extern void
gnc_error_dialog(GtkWidget *parent,
const char *forrmat, ...) G_GNUC_PRINTF (2, 3);
Modified: gnucash/trunk/src/gnome/dialog-chart-export.c
===================================================================
--- gnucash/trunk/src/gnome/dialog-chart-export.c 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/gnome/dialog-chart-export.c 2006-01-29 14:53:19 UTC (rev 13019)
@@ -256,7 +256,8 @@
qof_object_foreach(GNC_ID_SPLIT, book, chart_reference_cb, data);
g_list_free(data->param_ref_list);
qof_session_save(chart_session, NULL);
- show_session_error(qof_session_get_error(chart_session), filename);
+ show_session_error(qof_session_get_error(chart_session),
+ filename, GNC_FILE_DIALOG_EXPORT);
gnc_engine_resume_events();
gnc_unset_busy_cursor(NULL);
}
Modified: gnucash/trunk/src/gnome/dialog-commodities.c
===================================================================
--- gnucash/trunk/src/gnome/dialog-commodities.c 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/gnome/dialog-commodities.c 2006-01-29 14:53:19 UTC (rev 13019)
@@ -96,6 +96,9 @@
gboolean do_delete;
gboolean can_delete;
gnc_commodity *commodity;
+ GtkWidget *dialog;
+ const gchar *message, *warning;
+ gint response;
commodity = gnc_tree_view_commodity_get_selected_commodity (cd->commodity_tree);
if (commodity == NULL)
@@ -134,21 +137,31 @@
prices = gnc_pricedb_get_prices(pdb, commodity, NULL);
if (prices)
{
- const char *message = _("This commodity has price quotes. Are\n"
- "you sure you want to delete the selected\n"
- "commodity and its price quotes?");
-
- do_delete = gnc_verify_dialog (cd->dialog, TRUE, message);
+ message = _("This commodity has price quotes. Are "
+ "you sure you want to delete the selected "
+ "commodity and its price quotes?");
+ warning = "delete_commodity2";
+ } else {
+ message = _("Are you sure you want to delete the "
+ "selected commodity?");
+ warning = "delete_commodity";
}
- else
- {
- const char *message = _("Are you sure you want to delete the\n"
- "selected commodity?");
- do_delete = gnc_verify_dialog (cd->dialog, TRUE, message);
- }
+ dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(cd->dialog),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_NONE,
+ "<b>%s</b>\n\n%s",
+ _("Delete commodity?"),
+ message);
+ gtk_dialog_add_buttons(GTK_DIALOG(dialog),
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_DELETE, GTK_RESPONSE_OK,
+ (gchar *)NULL);
+ response = gnc_dialog_run(GTK_DIALOG(dialog), warning);
+ gtk_widget_destroy(dialog);
- if (do_delete)
+ if (response == GTK_RESPONSE_OK)
{
gnc_commodity_table *ct;
Modified: gnucash/trunk/src/gnome/dialog-price-edit-db.c
===================================================================
--- gnucash/trunk/src/gnome/dialog-price-edit-db.c 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/gnome/dialog-price-edit-db.c 2006-01-29 14:53:19 UTC (rev 13019)
@@ -37,6 +37,7 @@
#include "gnc-currency-edit.h"
#include "gnc-date-edit.h"
#include "gnc-engine.h"
+#include "gnc-gui-query.h"
#include "gnc-pricedb.h"
#include "gnc-tree-view-price.h"
#include "gnc-ui.h"
@@ -146,7 +147,8 @@
{
PricesDialog *pdb_dialog = data;
GList *price_list;
- gint length;
+ gint length, response;
+ GtkWidget *dialog;
ENTER(" ");
price_list = gnc_tree_view_price_get_selected_prices(pdb_dialog->price_tree);
@@ -156,15 +158,37 @@
}
length = g_list_length(price_list);
- if (gnc_verify_dialog (pdb_dialog->dialog, TRUE,
- /* Translators: %d is the number of prices. This is a
- ngettext(3) message. */
- ngettext("Are you sure you want to delete the %d "
- "selected price?",
- "Are you sure you want to delete the %d "
- "selected prices?", length),
- length))
- {
+ if (length > 1) {
+ gchar *message;
+
+ message = g_strdup_printf
+ (/* Translators: %d is the number of prices. This
+ is a ngettext(3) message. */
+ ngettext("Are you sure you want to delete the selected price?",
+ "Are you sure you want to delete the %d selected prices?",
+ length),
+ length);
+ dialog = gtk_message_dialog_new_with_markup
+ (GTK_WINDOW(pdb_dialog->dialog),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_NONE,
+ "<b>%s</b>\n\n%s",
+ _("Delete prices?"),
+ message);
+ g_free(message);
+ gtk_dialog_add_buttons(GTK_DIALOG(dialog),
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_DELETE, GTK_RESPONSE_YES,
+ (gchar *)NULL);
+ gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_YES);
+ response = gnc_dialog_run(GTK_DIALOG(dialog), "pricedb_remove_multiple");
+ gtk_widget_destroy(dialog);
+ } else {
+ response = GTK_RESPONSE_YES;
+ }
+
+ if (response == GTK_RESPONSE_YES) {
GNCBook *book = gnc_get_current_book ();
GNCPriceDB *pdb = gnc_book_get_pricedb (book);
Modified: gnucash/trunk/src/gnome/gnc-split-reg.c
===================================================================
--- gnucash/trunk/src/gnome/gnc-split-reg.c 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/gnome/gnc-split-reg.c 2006-01-29 14:53:19 UTC (rev 13019)
@@ -44,7 +44,6 @@
#include "gnc-component-manager.h"
#include "gnc-date-edit.h"
#include "gnc-engine.h"
-#include "gnc-err-popup.h"
#include "gnc-euro.h"
#include "gnc-gconf-utils.h"
#include "gnc-gui-query.h"
@@ -702,30 +701,48 @@
gboolean
gnc_split_reg_check_close( GNCSplitReg *gsr )
{
- gint result;
+ GtkWidget *dialog;
+ gint response;
gboolean pending_changes;
SplitRegister *reg;
- const char *message = _("The current transaction has been changed.\n"
- "Would you like to record it?");
+ const char *title = _("Save transaction before closing?");
+ const char *message =
+ _("The current transaction has been changed. Would you like to "
+ "record the changes before closing this page, close the page "
+ "without recording the changes, or cancel the close?");
reg = gnc_ledger_display_get_split_register( gsr->ledger );
pending_changes = gnc_split_register_changed( reg );
if ( !pending_changes )
return TRUE;
- result = gnc_verify_cancel_dialog(gsr->window, GTK_RESPONSE_YES, message);
- switch (result)
+ dialog = gtk_message_dialog_new(GTK_WINDOW(gsr->window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_NONE,
+ "%s", title);
+ gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
+ "%s", message);
+ gtk_dialog_add_buttons(GTK_DIALOG(dialog),
+ _("_Don't Record"), GTK_RESPONSE_REJECT,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ _("_Record"), GTK_RESPONSE_ACCEPT,
+ NULL);
+ response = gnc_dialog_run(GTK_DIALOG(dialog), "transaction_changed");
+ gtk_widget_destroy(dialog);
+
+ switch (response)
{
- case GTK_RESPONSE_YES:
- case GTK_RESPONSE_OK:
+ case GTK_RESPONSE_ACCEPT:
gnc_split_reg_record_trans_cb( gsr->window, gsr );
return TRUE;
- case GTK_RESPONSE_NO:
+ case GTK_RESPONSE_REJECT:
gnc_split_register_cancel_cursor_trans_changes( reg );
return TRUE;
case GTK_RESPONSE_CANCEL:
+ default:
return FALSE;
}
return TRUE;
@@ -931,15 +948,24 @@
static gboolean
xaccTransWarnReadOnly (const Transaction *trans)
{
+ GtkWidget *dialog;
const gchar *reason;
+ const gchar *format =
+ _("Cannot modify or delete this transaction. This transaction is "
+ "marked read-only because:\n\n'%s'");
if (!trans) return FALSE;
reason = xaccTransGetReadOnly (trans);
if (reason) {
- gnc_send_gui_error(_("Cannot modify or delete this transaction.\n"
- "This transaction is marked read-only because:\n\n'%s'"),
- reason);
+ dialog = gtk_message_dialog_new(NULL,
+ 0,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ format,
+ reason);
+ gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
return TRUE;
}
return FALSE;
@@ -954,7 +980,8 @@
Transaction *trans;
Split *split;
GtkWidget *dialog;
- gint result;
+ gint response;
+ const gchar *warning;
const char *message = _("Remove the splits from this transaction?");
const char *recn_warn = _("This transaction contains reconciled splits. "
@@ -975,6 +1002,7 @@
GTK_BUTTONS_NONE,
"<b>%s</b>\n\n%s",
message, recn_warn);
+ warning = "register_remove_all_splits2";
} else {
dialog =
gtk_message_dialog_new_with_markup(GTK_WINDOW(gsr->window),
@@ -983,15 +1011,16 @@
GTK_MESSAGE_QUESTION,
GTK_BUTTONS_NONE,
"<b>%s</b>", message);
+ warning = "register_remove_all_splits";
}
gtk_dialog_add_button(GTK_DIALOG(dialog),
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
gnc_gtk_dialog_add_button(dialog, N_("_Remove Splits"),
GTK_STOCK_DELETE, GTK_RESPONSE_ACCEPT);
- result = gtk_dialog_run(GTK_DIALOG(dialog));
+ response = gnc_dialog_run(GTK_DIALOG(dialog), warning);
gtk_widget_destroy (dialog);
- if (result != GTK_RESPONSE_ACCEPT)
+ if (response != GTK_RESPONSE_ACCEPT)
return;
/*
@@ -1025,7 +1054,8 @@
Transaction *trans;
Split *split;
GtkWidget *dialog;
- gint result;
+ gint response;
+ const gchar *warning;
reg = gnc_ledger_display_get_split_register( gsr->ledger );
@@ -1110,6 +1140,7 @@
GTK_MESSAGE_WARNING,
GTK_BUTTONS_NONE,
"<b>%s</b>\n\n%s", buf, recn_warn);
+ warning = "register_delete_split2";
} else {
dialog =
gtk_message_dialog_new_with_markup(GTK_WINDOW(gsr->window),
@@ -1118,6 +1149,7 @@
GTK_MESSAGE_QUESTION,
GTK_BUTTONS_NONE,
"<b>%s</b>", buf);
+ warning = "register_delete_split";
}
g_free(buf);
@@ -1125,9 +1157,9 @@
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
gnc_gtk_dialog_add_button(dialog, _("_Delete Split"),
GTK_STOCK_DELETE, GTK_RESPONSE_ACCEPT);
- result = gtk_dialog_run(GTK_DIALOG(dialog));
+ response = gnc_dialog_run(GTK_DIALOG(dialog), warning);
gtk_widget_destroy (dialog);
- if (result != GTK_RESPONSE_ACCEPT)
+ if (response != GTK_RESPONSE_ACCEPT)
return;
gnc_split_register_delete_current_split (reg);
@@ -1153,6 +1185,7 @@
GTK_MESSAGE_WARNING,
GTK_BUTTONS_NONE,
"<b>%s</b>\n\n%s", message, recn_warn);
+ warning = "register_delete_trans2";
} else {
dialog =
gtk_message_dialog_new_with_markup(GTK_WINDOW(gsr->window),
@@ -1161,14 +1194,15 @@
GTK_MESSAGE_QUESTION,
GTK_BUTTONS_NONE,
"<b>%s</b>", message);
+ warning = "register_delete_trans";
}
gtk_dialog_add_button(GTK_DIALOG(dialog),
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
gnc_gtk_dialog_add_button(dialog, _("_Delete Transaction"),
GTK_STOCK_DELETE, GTK_RESPONSE_ACCEPT);
- result = gtk_dialog_run(GTK_DIALOG(dialog));
+ response = gnc_dialog_run(GTK_DIALOG(dialog), warning);
gtk_widget_destroy (dialog);
- if (result != GTK_RESPONSE_ACCEPT)
+ if (response != GTK_RESPONSE_ACCEPT)
return;
gnc_split_register_delete_current_trans (reg);
@@ -1908,7 +1942,7 @@
"<b>%s</b>\n\n%s",
read_only,
args->string);
- gtk_dialog_run(GTK_DIALOG(dialog));
+ gnc_dialog_run(GTK_DIALOG(dialog), "register_read_only");
gtk_widget_destroy(dialog);
g_free(args);
return FALSE;
Modified: gnucash/trunk/src/gnome/schemas/apps_gnucash_warnings.schemas.in
===================================================================
--- gnucash/trunk/src/gnome/schemas/apps_gnucash_warnings.schemas.in 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/gnome/schemas/apps_gnucash_warnings.schemas.in 2006-01-29 14:53:19 UTC (rev 13019)
@@ -37,5 +37,233 @@
</locale>
</schema>
+ <schema>
+ <key>/schemas/apps/gnucash/general/warnings/register_read_only</key>
+ <applyto>/apps/gnucash/general/warnings/permanent/register_read_only</applyto>
+ <applyto>/apps/gnucash/general/warnings/temporary/register_read_only</applyto>
+ <owner>gnucash</owner>
+ <type>int</type>
+ <default>0</default>
+ <locale name="C">
+ <short>Read only register.</short>
+ <long>
+ This dialog is presented when a read-only register is opened.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/gnucash/general/warnings/register_delete_trans</key>
+ <applyto>/apps/gnucash/general/warnings/permanent/register_delete_trans</applyto>
+ <applyto>/apps/gnucash/general/warnings/temporary/register_delete_trans</applyto>
+ <owner>gnucash</owner>
+ <type>int</type>
+ <default>0</default>
+ <locale name="C">
+ <short>Delete a transaction.</short>
+ <long>
+ This dialog is presented before allowing you to delete a transaction.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/gnucash/general/warnings/register_delete_trans2</key>
+ <applyto>/apps/gnucash/general/warnings/permanent/register_delete_trans2</applyto>
+ <applyto>/apps/gnucash/general/warnings/temporary/register_delete_trans2</applyto>
+ <owner>gnucash</owner>
+ <type>int</type>
+ <default>0</default>
+ <locale name="C">
+ <short>Delete a transaction.</short>
+ <long>
+ This dialog is presented before allowing you to delete a
+ transaction that contains reconciled splits. Doing so will
+ throw off the reconciled value of the register and can make
+ it hard to perform future reconciliations.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/gnucash/general/warnings/register_delete_split</key>
+ <applyto>/apps/gnucash/general/warnings/permanent/register_delete_split</applyto>
+ <applyto>/apps/gnucash/general/warnings/temporary/register_delete_split</applyto>
+ <owner>gnucash</owner>
+ <type>int</type>
+ <default>0</default>
+ <locale name="C">
+ <short>Remove a splits from a transaction.</short>
+ <long>
+ This dialog is presented before allowing you to remove a
+ splits from a transaction.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/gnucash/general/warnings/register_delete_split2</key>
+ <applyto>/apps/gnucash/general/warnings/permanent/register_delete_split2</applyto>
+ <applyto>/apps/gnucash/general/warnings/temporary/register_delete_split2</applyto>
+ <owner>gnucash</owner>
+ <type>int</type>
+ <default>0</default>
+ <locale name="C">
+ <short>Remove a splits from a transaction.</short>
+ <long>
+ This dialog is presented before allowing you to remove a
+ reconciled splits from a transaction. Doing so will throw
+ off the reconciled value of the register and can make it
+ hard to perform future reconciliations.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/gnucash/general/warnings/register_remove_all_splits</key>
+ <applyto>/apps/gnucash/general/warnings/permanent/register_remove_all_splits</applyto>
+ <applyto>/apps/gnucash/general/warnings/temporary/register_remove_all_splits</applyto>
+ <owner>gnucash</owner>
+ <type>int</type>
+ <default>0</default>
+ <locale name="C">
+ <short>Remove all the splits from a transaction.</short>
+ <long>
+ This dialog is presented before allowing you to remove all
+ splits from a transaction.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/gnucash/general/warnings/register_remove_all_splits2</key>
+ <applyto>/apps/gnucash/general/warnings/permanent/register_remove_all_splits2</applyto>
+ <applyto>/apps/gnucash/general/warnings/temporary/register_remove_all_splits2</applyto>
+ <owner>gnucash</owner>
+ <type>int</type>
+ <default>0</default>
+ <locale name="C">
+ <short>Remove all the splits from a transaction.</short>
+ <long>
+ This dialog is presented before allowing you to remove all
+ splits (including some reconciled splits) from a transaction.
+ Doing so will throw off the reconciled value of the register
+ and can make it hard to perform future reconciliations.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/gnucash/general/warnings/transaction_changed</key>
+ <applyto>/apps/gnucash/general/warnings/permanent/transaction_changed</applyto>
+ <applyto>/apps/gnucash/general/warnings/temporary/transaction_changed</applyto>
+ <owner>gnucash</owner>
+ <type>int</type>
+ <default>0</default>
+ <locale name="C">
+ <short>Commit changes to a transaction.</short>
+ <long>
+ This dialog is presented when you attempt to move out of a modified
+ transaction. The changed data must be either saved or discarded.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/gnucash/general/warnings/transaction_duplicated</key>
+ <applyto>/apps/gnucash/general/warnings/permanent/transaction_duplicated</applyto>
+ <applyto>/apps/gnucash/general/warnings/temporary/transaction_duplicated</applyto>
+ <owner>gnucash</owner>
+ <type>int</type>
+ <default>0</default>
+ <locale name="C">
+ <short>Duplicating a changed transaction.</short>
+ <long>
+ This dialog is presented when you attempt to duplicate a modified
+ transaction. The changed data must be saved or the duplication canceled.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/gnucash/general/warnings/invoice_entry_changed</key>
+ <applyto>/apps/gnucash/general/warnings/permanent/invoice_entry_changed</applyto>
+ <applyto>/apps/gnucash/general/warnings/temporary/invoice_entry_changed</applyto>
+ <owner>gnucash</owner>
+ <type>int</type>
+ <default>0</default>
+ <locale name="C">
+ <short>Commit changes to a invoice_entry.</short>
+ <long>
+ This dialog is presented when you attempt to move out of a modified
+ invoice entry. The changed data must be either saved or discarded.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/gnucash/general/warnings/invoice_entry_duplicated</key>
+ <applyto>/apps/gnucash/general/warnings/permanent/invoice_entry_duplicated</applyto>
+ <applyto>/apps/gnucash/general/warnings/temporary/invoice_entry_duplicated</applyto>
+ <owner>gnucash</owner>
+ <type>int</type>
+ <default>0</default>
+ <locale name="C">
+ <short>Duplicating a changed invoice_entry.</short>
+ <long>
+ This dialog is presented when you attempt to duplicate a modified
+ invoice entry. The changed data must be saved or the duplication canceled.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/gnucash/general/warnings/delete_commodity</key>
+ <applyto>/apps/gnucash/general/warnings/permanent/delete_commodity</applyto>
+ <applyto>/apps/gnucash/general/warnings/temporary/delete_commodity</applyto>
+ <owner>gnucash</owner>
+ <type>int</type>
+ <default>0</default>
+ <locale name="C">
+ <short>Delete a commodity.</short>
+ <long>
+ This dialog is presented before allowing you to delete a commodity.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/gnucash/general/warnings/delete_commodity2</key>
+ <applyto>/apps/gnucash/general/warnings/permanent/delete_commodity2</applyto>
+ <applyto>/apps/gnucash/general/warnings/temporary/delete_commodity2</applyto>
+ <owner>gnucash</owner>
+ <type>int</type>
+ <default>0</default>
+ <locale name="C">
+ <short>Delete a commodity and prices.</short>
+ <long>
+ This dialog is presented before allowing you to delete a commodity
+ that has price quotes attached. Deleting the commodity will delete
+ the quotes as well.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/gnucash/general/warnings/pricedb_remove_multiple</key>
+ <applyto>/apps/gnucash/general/warnings/permanent/pricedb_remove_multiple</applyto>
+ <applyto>/apps/gnucash/general/warnings/temporary/pricedb_remove_multiple</applyto>
+ <owner>gnucash</owner>
+ <type>int</type>
+ <default>0</default>
+ <locale name="C">
+ <short>Delete multiple price quotes.</short>
+ <long>
+ This dialog is presented before allowing you to delete multiple price
+ quotes at one time.
+ </long>
+ </locale>
+ </schema>
+
</schemalist>
</gconfschemafile>
Modified: gnucash/trunk/src/gnome-utils/dialog-utils.c
===================================================================
--- gnucash/trunk/src/gnome-utils/dialog-utils.c 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/gnome-utils/dialog-utils.c 2006-01-29 14:53:19 UTC (rev 13019)
@@ -944,3 +944,126 @@
gtk_widget_show_all(button);
gtk_dialog_add_action_widget(GTK_DIALOG(dialog), button, response);
}
+
+static void
+gnc_perm_button_cb (GtkButton *perm, gpointer user_data)
+{
+ gboolean perm_active;
+
+ perm_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(perm));
+ gtk_widget_set_sensitive(user_data, !perm_active);
+}
+
+gint
+gnc_dialog_run (GtkDialog *dialog, const gchar *gconf_key)
+{
+ GtkWidget *perm, *temp;
+ gboolean ask = TRUE;
+ gint response;
+
+ /* Does the user want to see this question? If not, return the
+ * previous answer. */
+ response = gnc_gconf_get_int(GCONF_WARNINGS_PERM, gconf_key, NULL);
+ if (response != 0)
+ return response;
+ response = gnc_gconf_get_int(GCONF_WARNINGS_TEMP, gconf_key, NULL);
+ if (response != 0)
+ return response;
+
+ /* Add in the checkboxes to find out if the answer should be remembered. */
+#if 0
+ if (GTK_IS_MESSAGE_DIALOG(dialog)) {
+ GtkMessageType type;
+ g_object_get(dialog, "message-type", &type, (gchar*)NULL);
+ ask = (type == GTK_MESSAGE_QUESTION);
+ } else {
+ ask = FALSE;
+ }
+#endif
+ perm = gtk_check_button_new_with_mnemonic
+ (ask
+ ? _("Remember and don't _ask me again.")
+ : _("Don't _tell me again."));
+ temp = gtk_check_button_new_with_mnemonic
+ (ask
+ ? _("Remember and don't ask me again this _session.")
+ : _("Don't tell me again this _session."));
+ gtk_widget_show(perm);
+ gtk_widget_show(temp);
+ gtk_box_pack_start_defaults(GTK_BOX(dialog->vbox), perm);
+ gtk_box_pack_start_defaults(GTK_BOX(dialog->vbox), temp);
+ g_signal_connect(perm, "clicked", G_CALLBACK(gnc_perm_button_cb), temp);
+
+ /* OK. Present the dialog. */
+ response = gtk_dialog_run(dialog);
+ if ((response == GTK_RESPONSE_NONE) || (response == GTK_RESPONSE_DELETE_EVENT)) {
+ return GTK_RESPONSE_NO;
+ }
+
+ /* Save the answer? */
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(perm))) {
+ gnc_gconf_set_int(GCONF_WARNINGS_PERM, gconf_key, response, NULL);
+ } else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(temp))) {
+ gnc_gconf_set_int(GCONF_WARNINGS_TEMP, gconf_key, response, NULL);
+ }
+
+ return response;
+}
+
+#ifndef HAVE_GLIB26
+
+/** Find the first GtkLabel in a container. When called on a gtk2.4
+ * message dialog, there is only one label in the dialog so theis
+ * should return it. */
+static void
+find_label (GtkWidget *widget, gpointer data)
+{
+ GtkWidget **label = data;
+
+ if (*label)
+ return;
+
+ if (GTK_IS_LABEL(widget)) {
+ *label = widget;
+ return;
+ }
+
+ if (GTK_IS_CONTAINER(widget)) {
+ gtk_container_foreach(GTK_CONTAINER(widget), find_label, data);
+ }
+}
+
+/** Mimic the gtk2.6 function to add secondary information to a
+ * message dialog. */
+void
+gtk_message_dialog_format_secondary_text(GtkMessageDialog *dialog,
+ const gchar *format,
+ ...)
+{
+ GtkWidget *label = NULL;
+ const gchar *current;
+ gchar *primary, *secondary;
+ va_list args;
+
+ gtk_container_foreach(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),
+ find_label, &label);
+ if (!label)
+ return;
+
+ /* Get the current markup. */
+ current = gtk_label_get_label(GTK_LABEL(label));
+
+ /* Format the text to be added. */
+ va_start(args, format);
+ secondary = g_strdup_vprintf(format, args);
+ va_end(args);
+
+ /* Append the two strings, making the first one bold. */
+ primary = g_strdup_printf("<b>%s</b>\n\n%s", current, secondary);
+ gtk_label_set_markup(GTK_LABEL(label), primary);
+
+ g_free(primary);
+ g_free(secondary);
+}
+
+#endif
Modified: gnucash/trunk/src/gnome-utils/dialog-utils.h
===================================================================
--- gnucash/trunk/src/gnome-utils/dialog-utils.h 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/gnome-utils/dialog-utils.h 2006-01-29 14:53:19 UTC (rev 13019)
@@ -150,4 +150,17 @@
const gchar *stock_id,
guint response);
+
+/** Note: This dialog is modal! (It calls gtk_dialog_run() which is modal.)
+ */
+gint
+gnc_dialog_run(GtkDialog *dialog, const gchar *gconf_key);
+
+#ifndef HAVE_GLIB26
+void
+gtk_message_dialog_format_secondary_text(GtkMessageDialog *dialog,
+ const gchar *message_format,
+ ...) G_GNUC_PRINTF (2, 3);
#endif
+
+#endif
Modified: gnucash/trunk/src/gnome-utils/gnc-file.c
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-file.c 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/gnome-utils/gnc-file.c 2006-01-29 14:53:19 UTC (rev 13019)
@@ -52,7 +52,6 @@
/* This static indicates the debugging module that this .o belongs to. */
static QofLogModule log_module = GNC_MOD_GUI;
-static GNCCanCancelSaveCB can_cancel_cb = NULL;
static GNCShutdownCB shutdown_cb = NULL;
@@ -181,11 +180,15 @@
gboolean
-show_session_error (QofBackendError io_error, const char *newfile)
+show_session_error (QofBackendError io_error,
+ const char *newfile,
+ GNCFileDialogType type)
{
GtkWidget *parent = gnc_ui_get_toplevel();
+ GtkWidget *dialog;
gboolean uh_oh = TRUE;
- const char *fmt;
+ const char *fmt, *label;
+ gint response;
gnc_destroy_splash_screen(); /* Just in case */
if (NULL == newfile) { newfile = _("(null)"); }
@@ -197,206 +200,244 @@
break;
case ERR_BACKEND_NO_HANDLER: {
- fmt = _("No suitable backend was found for\n%s.");
+ fmt = _("No suitable backend was found for %s.");
gnc_error_dialog(parent, fmt, newfile);
break;
}
case ERR_BACKEND_NO_BACKEND:
- fmt = _("The URL \n %s\n"
- "is not supported by this version of GnuCash.");
+ fmt = _("The URL %s is not supported by this version of GnuCash.");
gnc_error_dialog (parent, fmt, newfile);
break;
case ERR_BACKEND_BAD_URL:
- fmt = _("Can't parse the URL\n %s\n");
+ fmt = _("Can't parse the URL %s.");
gnc_error_dialog (parent, fmt, newfile);
break;
case ERR_BACKEND_CANT_CONNECT:
- fmt = _("Can't connect to\n %s\n"
+ fmt = _("Can't connect to %s. "
"The host, username or password were incorrect.");
gnc_error_dialog (parent, fmt, newfile);
break;
case ERR_BACKEND_CONN_LOST:
- fmt = _("Can't connect to\n %s\n"
+ fmt = _("Can't connect to %s. "
"Connection was lost, unable to send data.");
gnc_error_dialog (parent, fmt, newfile);
break;
case ERR_BACKEND_TOO_NEW:
- fmt = _("This file/URL appears to be from a newer version\n"
- "of GnuCash. You must upgrade your version of GnuCash\n"
+ fmt = _("This file/URL appears to be from a newer version "
+ "of GnuCash. You must upgrade your version of GnuCash "
"to work with this data.");
gnc_error_dialog (parent, fmt);
break;
case ERR_BACKEND_NO_SUCH_DB:
- fmt = _("The database\n"
- " %s\n"
- "doesn't seem to exist. Do you want to create it?\n");
+ fmt = _("The database %s doesn't seem to exist. "
+ "Do you want to create it?");
if (gnc_verify_dialog (parent, TRUE, fmt, newfile)) { uh_oh = FALSE; }
break;
case ERR_BACKEND_LOCKED:
- fmt = _("GnuCash could not obtain the lock for\n"
- " %s.\n"
- "That database may be in use by another user,\n"
- "in which case you should not open the database.\n"
- "\nDo you want to proceed with opening the database?");
- if (gnc_verify_dialog (parent, TRUE, fmt, newfile)) { uh_oh = FALSE; }
+ switch (type){
+ case GNC_FILE_DIALOG_OPEN:
+ default:
+ label = GTK_STOCK_OPEN;
+ fmt = _("GnuCash could not obtain the lock for %s."
+ "That database may be in use by another user, "
+ "in which case you should not open the database. "
+ "Do you want to proceed with opening the database?");
+ break;
+
+ case GNC_FILE_DIALOG_IMPORT:
+ label = _("Import");
+ fmt = _("GnuCash could not obtain the lock for %s."
+ "That database may be in use by another user, "
+ "in which case you should not import the database. "
+ "Do you want to proceed with importing the database?");
+ break;
+
+ case GNC_FILE_DIALOG_SAVE:
+ label = GTK_STOCK_SAVE;
+ fmt = _("GnuCash could not obtain the lock for %s."
+ "That database may be in use by another user, "
+ "in which case you should not save the database. "
+ "Do you want to proceed with saving the database?");
+ break;
+
+ case GNC_FILE_DIALOG_EXPORT:
+ label = _("Export");
+ fmt = _("GnuCash could not obtain the lock for %s."
+ "That database may be in use by another user, "
+ "in which case you should not export the database. "
+ "Do you want to proceed with exporting the database?");
+ break;
+ }
+
+ dialog = gtk_message_dialog_new(GTK_WINDOW(parent),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_NONE,
+ fmt,
+ newfile);
+ gtk_dialog_add_buttons(GTK_DIALOG(dialog),
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ label, GTK_RESPONSE_YES,
+ NULL);
+ response = gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
+ uh_oh = (response != GTK_RESPONSE_YES);
break;
case ERR_BACKEND_READONLY:
- fmt = _("GnuCash could not write to\n"
- " %s.\n"
- "That database may be on a read-only file system,\n"
- "or you may not have write permission for the directory.\n");
+ fmt = _("GnuCash could not write to %s. "
+ "That database may be on a read-only file system, "
+ "or you may not have write permission for the directory.");
gnc_error_dialog (parent, fmt, newfile);
break;
case ERR_BACKEND_DATA_CORRUPT:
- fmt = _("The file/URL \n %s\n"
+ fmt = _("The file/URL %s"
"does not contain GnuCash data or the data is corrupt.");
gnc_error_dialog (parent, fmt, newfile);
break;
case ERR_BACKEND_SERVER_ERR:
- fmt = _("The server at URL \n %s\n"
+ fmt = _("The server at URL %s "
"experienced an error or encountered bad or corrupt data.");
gnc_error_dialog (parent, fmt, newfile);
break;
case ERR_BACKEND_PERM:
- fmt = _("You do not have permission to access\n %s\n");
+ fmt = _("You do not have permission to access %s.");
gnc_error_dialog (parent, fmt, newfile);
break;
case ERR_BACKEND_MISC:
- fmt = _("An error occurred while processing\n %s\n");
+ fmt = _("An error occurred while processing %s.");
gnc_error_dialog (parent, fmt, newfile);
break;
- /* QSF additions */
- case ERR_QSF_INVALID_OBJ: {
- fmt = _("Invalid QSF Object file!\n"
- "The QSF object file\n%s\n failed to validate"
- " against the QSF object schema.\nThe XML structure of the file"
- " is either not well-formed or contains illegal data.");
- gnc_error_dialog(parent, fmt, newfile);
- break;
- }
- case ERR_QSF_INVALID_MAP: {
- fmt = _("Invalid QSF Map file!\n"
- "The QSF map file\n%s\n failed to validate "
- " against the QSF map schema.\nThe XML structure of the file"
- " is either not well-formed or contains illegal data.");
- gnc_error_dialog(parent, fmt, newfile);
- break;
- }
- case ERR_QSF_BAD_QOF_VERSION: {
- fmt = _("The QSF Map file\n%s\nwas written for a different version of QOF.\n"
- "It may need to be modified to work with your current QOF installation.");
- gnc_error_dialog(parent, fmt, newfile);
- break;
- }
- case ERR_QSF_BAD_MAP: {
- fmt = _("The selected QSF map\n%s\ncontains unusable data. "
- "This is usually because not all the required parameters for "
- "the defined objects have calculations described in the map.");
- gnc_error_dialog(parent, fmt, newfile);
- break;
- }
- case ERR_QSF_BAD_OBJ_GUID: {
- fmt = _("The selected QSF object file\n%s\n contains one or more invalid GUIDs. "
- "The file cannot be processed - please check the source of the file "
- "and try again.");
- gnc_error_dialog(parent, fmt, newfile);
- break;
- }
- case ERR_QSF_NO_MAP: {
- fmt = _("The selected QSF Object file\n%s\nrequires a map but it was not provided.");
- gnc_error_dialog(parent, fmt, newfile);
- break;
- }
- case ERR_QSF_WRONG_MAP: {
- fmt = _("Wrong QSF map selected.\n"
- "The selected map,\n%s\n validates but was written "
- "for different QOF objects.\n The list of objects defined in "
- "this map does not include all the objects described in "
- "the current QSF object file.");
- gnc_error_dialog(parent, fmt, newfile);
- break;
- }
- case ERR_QSF_MAP_NOT_OBJ: {
- fmt = _("The selected file \n %s\n is a QSF map and cannot be "
- "opened as a QSF object.");
- gnc_error_dialog(parent, fmt, newfile);
- break;
- }
- case ERR_QSF_OVERFLOW : {
- fmt = _("When converting XML strings into numbers, an overflow "
- "has been detected. The QSF object file\n %s\ncontains invalid "
- "data in a field that is meant to hold a number.");
- gnc_error_dialog(parent, fmt, newfile);
- break;
- }
- case ERR_QSF_OPEN_NOT_MERGE : {
- fmt = _("The QSF object file\n %s\nis valid and contains GnuCash "
- "objects. However, GnuCash cannot open the file directly because "
- "the data needs to be merged into an existing GnuCash data book. "
- "Please open a GnuCash file or create a new one, then import "
- "this QSF object file so that the data can be merged into the "
- "main data book.");
- gnc_error_dialog(parent, fmt, newfile);
- break;
- }
+ /* QSF additions */
+ case ERR_QSF_INVALID_OBJ:
+ fmt = _("Invalid QSF Object file! The QSF object file %s failed to"
+ " validate against the QSF object schema. The XML structure of"
+ " the file is either not well-formed or contains illegal data.");
+ gnc_error_dialog(parent, fmt, newfile);
+ break;
+
+ case ERR_QSF_INVALID_MAP:
+ fmt = _("Invalid QSF Map file! The QSF map file %s failed to validate"
+ " against the QSF map schema. The XML structure of the file"
+ " is either not well-formed or contains illegal data.");
+ gnc_error_dialog(parent, fmt, newfile);
+ break;
+
+ case ERR_QSF_BAD_QOF_VERSION:
+ fmt = _("The QSF Map file %s was written for a different version of"
+ " QOF. It may need to be modified to work with your current"
+ " QOF installation.");
+ gnc_error_dialog(parent, fmt, newfile);
+ break;
+
+ case ERR_QSF_BAD_MAP:
+ fmt = _("The selected QSF map %s contains unusable data. "
+ "This is usually because not all the required parameters for "
+ "the defined objects have calculations described in the map.");
+ gnc_error_dialog(parent, fmt, newfile);
+ break;
+
+ case ERR_QSF_BAD_OBJ_GUID:
+ fmt = _("The selected QSF object file %s contains one or more invalid "
+ "GUIDs. The file cannot be processed - please check the source "
+ "of the file and try again.");
+ gnc_error_dialog(parent, fmt, newfile);
+ break;
+
+ case ERR_QSF_NO_MAP:
+ fmt = _("The selected QSF Object file %s requires a map but it was "
+ "not provided.");
+ gnc_error_dialog(parent, fmt, newfile);
+ break;
+
+ case ERR_QSF_WRONG_MAP:
+ fmt = _("Wrong QSF map selected. The selected map %s validates but was "
+ "written for different QOF objects. The list of objects defined "
+ "in this map does not include all the objects described in "
+ "the current QSF object file.");
+ gnc_error_dialog(parent, fmt, newfile);
+ break;
+
+ case ERR_QSF_MAP_NOT_OBJ:
+ fmt = _("The selected file %s is a QSF map and cannot be "
+ "opened as a QSF object.");
+ gnc_error_dialog(parent, fmt, newfile);
+ break;
+
+ case ERR_QSF_OVERFLOW:
+ fmt = _("When converting XML strings into numbers, an overflow "
+ "has been detected. The QSF object file %s contains invalid "
+ "data in a field that is meant to hold a number.");
+ gnc_error_dialog(parent, fmt, newfile);
+ break;
+
+ case ERR_QSF_OPEN_NOT_MERGE:
+ fmt = _("The QSF object file %s is valid and contains GnuCash "
+ "objects. However, GnuCash cannot open the file directly because "
+ "the data needs to be merged into an existing GnuCash data book. "
+ "Please open a GnuCash file or create a new one, then import "
+ "this QSF object file so that the data can be merged into the "
+ "main data book.");
+ gnc_error_dialog(parent, fmt, newfile);
+ break;
+
case ERR_FILEIO_FILE_BAD_READ:
- fmt = _("There was an error reading the file.\n"
+ fmt = _("There was an error reading the file. "
"Do you want to continue?");
if (gnc_verify_dialog (parent, TRUE, fmt)) { uh_oh = FALSE; }
break;
case ERR_FILEIO_PARSE_ERROR:
- fmt = _("There was an error parsing the file\n %s");
+ fmt = _("There was an error parsing the file %s.");
gnc_error_dialog (parent, fmt, newfile);
break;
case ERR_FILEIO_FILE_EMPTY:
- fmt = _("The file \n %s\nis empty.");
+ fmt = _("The file %s is empty.");
gnc_error_dialog (parent, fmt, newfile);
break;
case ERR_FILEIO_FILE_NOT_FOUND:
- fmt = _("The file \n %s\ncould not be found.");
+ fmt = _("The file %s could not be found.");
gnc_error_dialog (parent, fmt, newfile);
break;
case ERR_FILEIO_FILE_TOO_OLD:
- fmt = _("This file is from an older version of GnuCash.\n"
+ fmt = _("This file is from an older version of GnuCash. "
"Do you want to continue?");
if (gnc_verify_dialog (parent, TRUE, fmt)) { uh_oh = FALSE; }
break;
case ERR_FILEIO_UNKNOWN_FILE_TYPE:
- fmt = _("The file type of file\n %s\nis unknown.");
+ fmt = _("The file type of file %s is unknown.");
gnc_error_dialog(parent, fmt, newfile);
break;
case ERR_FILEIO_BACKUP_ERROR:
- fmt = _("Could not make a backup of the file\n %s");
+ fmt = _("Could not make a backup of the file %s");
gnc_error_dialog(parent, fmt, newfile);
break;
case ERR_FILEIO_WRITE_ERROR:
- fmt = _("Could not write to file\n %s\nCheck that you have "
+ fmt = _("Could not write to file %s Check that you have "
"permission to write to this file and that "
"there is sufficient space to create it.");
gnc_error_dialog(parent, fmt, newfile);
break;
case ERR_SQL_DB_TOO_OLD:
- fmt = _("This database is from an older version of GnuCash.\n"
+ fmt = _("This database is from an older version of GnuCash. "
"Do you want to want to upgrade the database "
"to the current version?");
if (gnc_verify_dialog (parent, TRUE, fmt)) { uh_oh = FALSE; }
@@ -404,17 +445,17 @@
case ERR_SQL_DB_BUSY:
fmt = _("The SQL database is in use by other users, "
- "and the upgrade cannot be performed until they logoff.\n"
- "If there are currently no other users, consult the \n"
- "documentation to learn how to clear out dangling login\n"
+ "and the upgrade cannot be performed until they logoff. "
+ "If there are currently no other users, consult the "
+ "documentation to learn how to clear out dangling login "
"sessions.");
gnc_error_dialog (parent, fmt);
break;
default:
PERR("FIXME: Unhandled error %d", io_error);
- fmt = _("An unknown I/O error occurred.");
- gnc_error_dialog (parent, fmt);
+ fmt = _("An unknown I/O error (%d) occurred.");
+ gnc_error_dialog (parent, fmt, io_error);
break;
}
@@ -456,7 +497,7 @@
/* If user attempts to start a new session before saving results of
* the last one, prompt them to clean up their act. */
- if (!gnc_file_query_save ())
+ if (!gnc_file_query_save (TRUE))
return;
session = qof_session_get_current_session ();
@@ -485,7 +526,7 @@
}
gboolean
-gnc_file_query_save (void)
+gnc_file_query_save (gboolean can_cancel)
{
GtkWidget *parent = gnc_ui_get_toplevel();
@@ -497,26 +538,46 @@
*/
while (qof_book_not_saved(qof_session_get_book (qof_session_get_current_session ())))
{
- gint result;
- const char *message = _("Changes have been made since the last "
- "Save. Save the data to file?");
+ GtkWidget *dialog;
+ gint response;
+ const char *title = _("Save changes to the file?");
+ const char *message =
+ _("Changes have been made since the last time it was saved. If "
+ "you continue without saving these changes will be discarded.");
- if (can_cancel_cb && can_cancel_cb ())
- result = gnc_verify_cancel_dialog (parent, GTK_RESPONSE_YES, message);
- else
- {
- gboolean do_save = gnc_verify_dialog (parent, TRUE, message);
+ dialog = gtk_message_dialog_new(GTK_WINDOW(parent),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_NONE,
+ "%s", title);
+ gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
+ "%s", message);
+ gtk_dialog_add_button(GTK_DIALOG(dialog),
+ _("Continue _Without Saving"), GTK_RESPONSE_OK);
- result = do_save ? GTK_RESPONSE_YES : GTK_RESPONSE_NO;
- }
+ if (can_cancel)
+ gtk_dialog_add_button(GTK_DIALOG(dialog),
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
+ gtk_dialog_add_button(GTK_DIALOG(dialog),
+ GTK_STOCK_SAVE, GTK_RESPONSE_YES);
+ response = gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
- if (result == GTK_RESPONSE_CANCEL)
- return FALSE;
+ switch (response) {
+ case GTK_RESPONSE_YES:
+ gnc_file_save ();
+ /* Go check the loop condition. */
+ break;
- if (result == GTK_RESPONSE_NO)
- return TRUE;
-
- gnc_file_save ();
+ case GTK_RESPONSE_CANCEL:
+ default:
+ if (can_cancel)
+ return FALSE;
+ /* No cancel function available. Fall through. */
+
+ case GTK_RESPONSE_OK:
+ return TRUE;
+ }
}
return TRUE;
@@ -541,7 +602,8 @@
newfile = xaccResolveURL (filename);
if (!newfile)
{
- show_session_error (ERR_FILEIO_FILE_NOT_FOUND, filename);
+ show_session_error (ERR_FILEIO_FILE_NOT_FOUND, filename,
+ GNC_FILE_DIALOG_OPEN);
return FALSE;
}
@@ -586,27 +648,13 @@
gnc_destroy_splash_screen(); /* Just in case */
-#ifdef HAVE_GLIB26
dialog = gtk_message_dialog_new(NULL,
0,
GTK_MESSAGE_WARNING,
GTK_BUTTONS_NONE,
fmt1, newfile);
gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), fmt2);
-#else
- {
- gchar *tmp;
- tmp = g_strdup_printf("<b>%s</b>\n\n%s", fmt1, fmt2);
- dialog = gtk_message_dialog_new_with_markup(NULL,
- 0,
- GTK_MESSAGE_WARNING,
- GTK_BUTTONS_NONE,
- tmp, newfile);
- g_free(tmp);
- }
-#endif
-
gnc_gtk_dialog_add_button(dialog, _("_Open Anyway"),
GTK_STOCK_OPEN, RESPONSE_OPEN);
gnc_gtk_dialog_add_button(dialog, _("_Create New File"),
@@ -649,7 +697,7 @@
else if ((ERR_BACKEND_NO_SUCH_DB == io_err) ||
(ERR_SQL_DB_TOO_OLD == io_err))
{
- if (FALSE == show_session_error (io_err, newfile))
+ if (FALSE == show_session_error (io_err, newfile, GNC_FILE_DIALOG_OPEN))
{
/* user told us to create a new database. Do it. */
qof_session_begin (new_session, newfile, FALSE, TRUE);
@@ -669,7 +717,7 @@
}
else
{
- uh_oh = show_session_error (io_err, newfile);
+ uh_oh = show_session_error (io_err, newfile, GNC_FILE_DIALOG_OPEN);
}
if (!uh_oh)
@@ -688,7 +736,7 @@
/* check for i/o error, put up appropriate error dialog */
io_err = qof_session_get_error (new_session);
- uh_oh = show_session_error (io_err, newfile);
+ uh_oh = show_session_error (io_err, newfile, GNC_FILE_DIALOG_OPEN);
new_group = gnc_book_get_group (qof_session_get_book (new_session));
if (uh_oh) new_group = NULL;
@@ -697,7 +745,8 @@
* The backend forgot to set an error. So make one up. */
if (!uh_oh && !new_group)
{
- uh_oh = show_session_error (ERR_BACKEND_MISC, newfile);
+ uh_oh = show_session_error (ERR_BACKEND_MISC, newfile,
+ GNC_FILE_DIALOG_OPEN);
}
}
@@ -754,7 +803,7 @@
char *lastfile;
gboolean result;
- if (!gnc_file_query_save ())
+ if (!gnc_file_query_save (TRUE))
return FALSE;
lastfile = gnc_history_get_last();
@@ -777,7 +826,7 @@
{
if (!newfile) return FALSE;
- if (!gnc_file_query_save ())
+ if (!gnc_file_query_save (TRUE))
return FALSE;
return gnc_post_file_open (newfile);
@@ -820,7 +869,7 @@
/* if file appears to be locked, ask the user ... */
if (ERR_BACKEND_LOCKED == io_err || ERR_BACKEND_READONLY == io_err)
{
- if (FALSE == show_session_error (io_err, newfile))
+ if (FALSE == show_session_error (io_err, newfile, GNC_FILE_DIALOG_EXPORT))
{
/* user told us to ignore locks. So ignore them. */
qof_session_begin (new_session, newfile, TRUE, FALSE);
@@ -901,7 +950,7 @@
io_err = qof_session_get_error (session);
if (ERR_BACKEND_NO_ERR != io_err)
{
- show_session_error (io_err, newfile);
+ show_session_error (io_err, newfile, GNC_FILE_DIALOG_SAVE);
if (been_here_before) return;
been_here_before = TRUE;
@@ -947,7 +996,8 @@
newfile = xaccResolveURL (filename);
if (!newfile)
{
- show_session_error (ERR_FILEIO_FILE_NOT_FOUND, filename);
+ show_session_error (ERR_FILEIO_FILE_NOT_FOUND, filename,
+ GNC_FILE_DIALOG_SAVE);
return;
}
@@ -970,7 +1020,7 @@
/* if file appears to be locked, ask the user ... */
if (ERR_BACKEND_LOCKED == io_err || ERR_BACKEND_READONLY == io_err)
{
- if (FALSE == show_session_error (io_err, newfile))
+ if (FALSE == show_session_error (io_err, newfile, GNC_FILE_DIALOG_SAVE))
{
/* user told us to ignore locks. So ignore them. */
qof_session_begin (new_session, newfile, TRUE, FALSE);
@@ -981,7 +1031,7 @@
else if ((ERR_BACKEND_NO_SUCH_DB == io_err) ||
(ERR_SQL_DB_TOO_OLD == io_err))
{
- if (FALSE == show_session_error (io_err, newfile))
+ if (FALSE == show_session_error (io_err, newfile, GNC_FILE_DIALOG_SAVE))
{
/* user told us to create a new database. Do it. */
qof_session_begin (new_session, newfile, FALSE, TRUE);
@@ -995,7 +1045,7 @@
io_err = qof_session_get_error (new_session);
if (ERR_BACKEND_NO_ERR != io_err)
{
- show_session_error (io_err, newfile);
+ show_session_error (io_err, newfile, GNC_FILE_DIALOG_SAVE);
xaccLogDisable();
qof_session_destroy (new_session);
xaccLogEnable();
@@ -1067,12 +1117,6 @@
}
void
-gnc_file_set_can_cancel_callback (GNCCanCancelSaveCB cb)
-{
- can_cancel_cb = cb;
-}
-
-void
gnc_file_set_shutdown_callback (GNCShutdownCB cb)
{
shutdown_cb = cb;
Modified: gnucash/trunk/src/gnome-utils/gnc-file.h
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-file.h 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/gnome-utils/gnc-file.h 2006-01-29 14:53:19 UTC (rev 13019)
@@ -132,7 +132,9 @@
/** Tell the user about errors in the backends
*/
-gboolean show_session_error (QofBackendError io_error, const char *newfile);
+gboolean show_session_error (QofBackendError io_error,
+ const char *newfile,
+ GNCFileDialogType type);
char * gnc_file_dialog (const char * title,
const char * filter,
@@ -142,13 +144,10 @@
gboolean gnc_file_open_file (const char *filename);
void gnc_file_export_file(const char * filename);
-gboolean gnc_file_query_save (void);
+gboolean gnc_file_query_save (gboolean can_cancel);
void gnc_file_quit (void);
-typedef gboolean (*GNCCanCancelSaveCB) (void);
-void gnc_file_set_can_cancel_callback (GNCCanCancelSaveCB cb);
-
typedef void (*GNCShutdownCB) (int);
void gnc_file_set_shutdown_callback (GNCShutdownCB cb);
Modified: gnucash/trunk/src/gnome-utils/gnc-gnome-utils.c
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-gnome-utils.c 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/gnome-utils/gnc-gnome-utils.c 2006-01-29 14:53:19 UTC (rev 13019)
@@ -449,7 +449,7 @@
{
if (gnucash_ui_is_running()) {
if (!gnome_is_terminating) {
- if (gnc_file_query_save()) {
+ if (gnc_file_query_save(FALSE)) {
gnc_hook_run(HOOK_UI_SHUTDOWN, NULL);
gnc_gui_shutdown();
}
Modified: gnucash/trunk/src/gnome-utils/gnc-gui-query.c
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-gui-query.c 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/gnome-utils/gnc-gui-query.c 2006-01-29 14:53:19 UTC (rev 13019)
@@ -36,96 +36,6 @@
/* This static indicates the debugging module that this .o belongs to. */
/* static short module = MOD_GUI; */
-void gnc_remember_all_toggled (GtkToggleButton *togglebutton, gpointer user_data);
-
-
-void
-gnc_remember_all_toggled (GtkToggleButton *togglebutton,
- gpointer user_data)
-{
- GtkWidget *other_button;
- gboolean active;
-
- active = gtk_toggle_button_get_active(togglebutton);
- other_button = gnc_glade_lookup_widget(GTK_WIDGET(togglebutton),
- "remember_one");
- gtk_widget_set_sensitive(other_button, !active);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(other_button), FALSE);
-}
-
-
-static gint
-gnc_remember_common(gncUIWidget parent, const gchar *dialog_name,
- const gchar *message, const gchar *gconf_key,
- const gchar *first_button_text, ...)
-{
- GladeXML *xml;
- GtkWidget *dialog, *label, *box, *checkbox;
- gint response;
- const gchar *text;
- va_list args;
-
- /* Does the user want to see this question? If not, return the
- * previous answer. */
- response = gnc_gconf_get_int(GCONF_WARNINGS_PERM, gconf_key, NULL);
- if (response != 0)
- return response;
- response = gnc_gconf_get_int(GCONF_WARNINGS_TEMP, gconf_key, NULL);
- if (response != 0)
- return response;
-
- /* Find the glade page layout */
- xml = gnc_glade_xml_new ("gnc-gui-query.glade", dialog_name);
- dialog = glade_xml_get_widget (xml, dialog_name);
- glade_xml_signal_autoconnect_full(xml, gnc_glade_autoconnect_full_func,
- dialog);
-
- /* Insert the message. */
- label = glade_xml_get_widget (xml, "label");
- gtk_label_set_markup(GTK_LABEL(label), message);
-
- /* Hide the checkboxes if there's no key */
- box = glade_xml_get_widget (xml, "remember_vbox");
- if (gconf_key == NULL)
- gtk_widget_hide(box);
-
- /* Set the buttons */
- va_start(args, first_button_text);
- for (text = first_button_text; text != NULL; ) {
- response = va_arg(args, gint);
- gtk_dialog_add_button(GTK_DIALOG(dialog), text, response);
- text = va_arg(args, gchar *);
- }
- va_end(args);
-// gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_YES);
-
- /* Tell the window manager if there's a parent window. */
- if (parent)
- gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW (parent));
-
- /* Get a response */
- response = gtk_dialog_run(GTK_DIALOG(dialog));
- if ((response == GTK_RESPONSE_NONE) || (response == GTK_RESPONSE_DELETE_EVENT)) {
- gtk_widget_destroy(GTK_WIDGET(dialog));
- return GTK_RESPONSE_NO;
- }
-
- /* Save the answer? */
- checkbox = glade_xml_get_widget (xml, "remember_all");
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbox))) {
- gnc_gconf_set_int(GCONF_WARNINGS_PERM, gconf_key, response, NULL);
- } else {
- checkbox = glade_xml_get_widget (xml, "remember_one");
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbox))) {
- gnc_gconf_set_int(GCONF_WARNINGS_TEMP, gconf_key, response, NULL);
- }
- }
-
- gtk_widget_destroy(GTK_WIDGET(dialog));
- return response;
-}
-
-
/********************************************************************\
* gnc_ok_cancel_dialog *
* display a message, and asks the user to press "Ok" or "Cancel" *
@@ -174,59 +84,6 @@
/********************************************************************\
- * gnc_verify_cancel_dialog *
- * display a message, and asks the user to press "Yes", "No", or *
- * "Cancel" *
- * *
- * NOTE: This function does not return until the dialog is closed *
- * *
- * Args: parent - the parent window *
- * default - the button that will be the default *
- * format - the format string for the message to display *
- * This is a standard 'printf' style string. *
- * args - a pointer to the first argument for the format *
- * string. *
- * Return: the result the user selected *
-\********************************************************************/
-
-gint
-gnc_verify_cancel_dialog(GtkWidget *parent,
- gint default_result,
- const gchar *format, ...)
-{
- GtkWidget *dialog;
- gint result;
- gchar *buffer;
- va_list args;
-
- if (parent == NULL)
- parent = gnc_ui_get_toplevel();
-
- va_start(args, format);
- buffer = g_strdup_vprintf(format, args);
- dialog = gtk_message_dialog_new (GTK_WINDOW(parent),
- GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_QUESTION,
- GTK_BUTTONS_NONE,
- "%s",
- buffer);
- g_free(buffer);
- va_end(args);
-
- gtk_dialog_add_buttons (GTK_DIALOG(dialog),
- GTK_STOCK_YES, GTK_RESPONSE_YES,
- GTK_STOCK_NO, GTK_RESPONSE_NO,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- NULL);
-
- gtk_dialog_set_default_response(GTK_DIALOG(dialog), default_result);
- result = gtk_dialog_run(GTK_DIALOG(dialog));
- gtk_widget_destroy (dialog);
- return(result);
-}
-
-
-/********************************************************************\
* gnc_verify_dialog *
* display a message, and asks the user to press "Yes" or "No" *
* *
@@ -271,27 +128,6 @@
}
-gint
-gnc_verify_remember_dialog(gncUIWidget parent, const gchar *gconf_key,
- const gchar *yes_label, const gchar *no_label,
- const gchar *format, ...)
-{
- gchar *buffer;
- gint response;
- va_list args;
-
- va_start(args, format);
- buffer = g_strdup_vprintf(format, args);
- response = gnc_remember_common(parent, "Question Dialog", buffer, gconf_key,
- yes_label, GTK_RESPONSE_YES,
- no_label, GTK_RESPONSE_NO,
- NULL);
- g_free(buffer);
- va_end(args);
- return response;
-}
-
-
/********************************************************************\
* gnc_info_dialog *
* displays an information dialog box *
@@ -363,12 +199,6 @@
}
void
-gnc_warning_dialog_va(const gchar *format, va_list args)
-{
- gnc_warning_dialog_common(NULL, format, args);
-}
-
-void
gnc_warning_dialog(GtkWidget *parent, const gchar *format, ...)
{
va_list args;
@@ -379,28 +209,6 @@
}
-gint
-gnc_warning_remember_dialog(gncUIWidget parent, const gchar *gconf_key,
- const gchar *yes_label, const gchar *no_label,
- const gchar *format, ...)
-{
- gchar *buffer;
- gint response;
- va_list args;
-
- va_start(args, format);
- buffer = g_strdup_vprintf(format, args);
- response = gnc_remember_common(parent, "Warning Dialog", buffer, gconf_key,
- yes_label, GTK_RESPONSE_YES,
- no_label, GTK_RESPONSE_NO,
- NULL);
- g_free(buffer);
- va_end(args);
- return response;
-}
-
-
-
/********************************************************************\
* gnc_error_dialog_common *
* displays an error dialog box *
@@ -435,12 +243,6 @@
}
void
-gnc_error_dialog_va(const gchar *format, va_list args)
-{
- gnc_error_dialog_common(NULL, format, args);
-}
-
-void
gnc_error_dialog(GtkWidget *parent, const gchar *format, ...)
{
va_list args;
Modified: gnucash/trunk/src/gnome-utils/gnc-gui-query.h
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-gui-query.h 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/gnome-utils/gnc-gui-query.h 2006-01-29 14:53:19 UTC (rev 13019)
@@ -29,13 +29,6 @@
extern void
-gnc_warning_dialog_va(const char *format, va_list args);
-
-
-extern void
-gnc_error_dialog_va(const char *format, va_list args);
-
-extern void
gnc_error_dialog(GtkWidget *parent,
const char *format, ...) G_GNUC_PRINTF (2, 3);
Modified: gnucash/trunk/src/gnome-utils/gnc-main-window.c
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-main-window.c 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/gnome-utils/gnc-main-window.c 2006-01-29 14:53:19 UTC (rev 13019)
@@ -839,13 +839,16 @@
GTK_MESSAGE_WARNING,
GTK_BUTTONS_NONE,
_("<b>Save changes to file %s before "
- "closing?</b>\n\nIf you don't save, "
- "changes will be discarded."),
+ "closing?</b>\n\nChanges have been "
+ "made since the last time it was "
+ "saved. If you continue without "
+ "saving these changes will be "
+ "discarded."),
filename);
#endif
gtk_dialog_add_buttons(GTK_DIALOG(dialog),
- _("Close _without Saving"), GTK_RESPONSE_CLOSE,
+ _("Close _Without Saving"), GTK_RESPONSE_CLOSE,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_SAVE, GTK_RESPONSE_APPLY,
NULL);
Modified: gnucash/trunk/src/gnome-utils/gncmod-gnome-utils.c
===================================================================
--- gnucash/trunk/src/gnome-utils/gncmod-gnome-utils.c 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/gnome-utils/gncmod-gnome-utils.c 2006-01-29 14:53:19 UTC (rev 13019)
@@ -17,7 +17,6 @@
#include "dialog-options.h"
#include "gnc-html.h"
#include "qof.h"
-#include "gnc-err-popup.h"
#include "gnc-gui-query.h"
#include "gnc-druid-gnome.h"
@@ -96,15 +95,11 @@
gnc_druid_provider_multifile_gnome_register();
}
- gnc_set_warning_message(gnc_warning_dialog_va);
- gnc_set_error_message(gnc_error_dialog_va);
return TRUE;
}
int
libgncmod_gnome_utils_LTX_gnc_module_end(int refcount)
{
- gnc_set_warning_message(NULL);
- gnc_set_error_message(NULL);
return TRUE;
}
Modified: gnucash/trunk/src/gnome-utils/gw-gnome-utils-spec.scm
===================================================================
--- gnucash/trunk/src/gnome-utils/gw-gnome-utils-spec.scm 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/gnome-utils/gw-gnome-utils-spec.scm 2006-01-29 14:53:19 UTC (rev 13019)
@@ -431,15 +431,6 @@
(gw:wrap-function
ws
- 'gnc:file-query-save
- '<gw:bool>
- "gnc_file_query_save"
- '()
- "Query the user whether to save the current file, and save
-if they say 'Yes'. The return is false if the user says 'Cancel'.")
-
- (gw:wrap-function
- ws
'gnc:file-quit
'<gw:void>
"gnc_file_quit"
Modified: gnucash/trunk/src/import-export/hbci/dialog-pass.c
===================================================================
--- gnucash/trunk/src/import-export/hbci/dialog-pass.c 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/import-export/hbci/dialog-pass.c 2006-01-29 14:53:19 UTC (rev 13019)
@@ -142,7 +142,7 @@
/* strings didn't match */
if (gnc_ok_cancel_dialog (parent, GTK_RESPONSE_OK,
- _("The two passwords didn't match. \n"
+ _("The two passwords didn't match. "
"Please try again."))
!= GTK_RESPONSE_OK)
break;
Modified: gnucash/trunk/src/register/ledger-core/split-register-control.c
===================================================================
--- gnucash/trunk/src/register/ledger-core/split-register-control.c 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/register/ledger-core/split-register-control.c 2006-01-29 14:53:19 UTC (rev 13019)
@@ -32,11 +32,12 @@
#include "gnc-ui.h"
#include "pricecell.h"
#include "datecell.h"
+#include "dialog-transfer.h"
+#include "dialog-utils.h"
#include "split-register-control.h"
#include "split-register-model-save.h"
#include "split-register-p.h"
#include "table-allgui.h"
-#include "dialog-transfer.h"
/* This static indicates the debugging module that this .o belongs to. */
@@ -1252,7 +1253,7 @@
Transaction *pending_trans;
VirtualLocation virt_loc;
Transaction *trans, *new_trans;
- gint result;
+ gint response;
gboolean changed;
SRInfo *info;
Split *split;
@@ -1468,22 +1469,36 @@
/* Ok, we are changing transactions and the current transaction has
* changed. See what the user wants to do. */
{
- const char *message;
+ GtkWidget *dialog, *window;
+ const char *title = _("Save the current transaction?");
+ const char *message =
+ _("The current transaction has been changed. Would you like to "
+ "record the changes before moving to a new transaction, move "
+ "without recording the changes, or cancel the move?");
- message = _("The current transaction has been changed.\n"
- "Would you like to record it?");
-
- result = gnc_verify_cancel_dialog
- (gnc_split_register_get_parent (reg),
- GTK_RESPONSE_YES, message);
+ window = gnc_split_register_get_parent(reg);
+ dialog = gtk_message_dialog_new(GTK_WINDOW(window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_NONE,
+ "%s", title);
+ gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
+ "%s", message);
+ gtk_dialog_add_buttons(GTK_DIALOG(dialog),
+ _("_Don't Record"), GTK_RESPONSE_REJECT,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ _("_Record"), GTK_RESPONSE_ACCEPT,
+ NULL);
+ response = gnc_dialog_run(GTK_DIALOG(dialog), "transaction_changed");
+ gtk_widget_destroy(dialog);
}
- switch (result)
+ switch (response)
{
- case GTK_RESPONSE_YES:
+ case GTK_RESPONSE_ACCEPT:
break;
- case GTK_RESPONSE_NO:
+ case GTK_RESPONSE_REJECT:
{
VirtualCellLocation vcell_loc;
Split *new_split;
@@ -1512,10 +1527,8 @@
break;
case GTK_RESPONSE_CANCEL:
+ default:
return TRUE;
-
- default:
- break;
}
return FALSE;
@@ -1538,6 +1551,7 @@
gnc_split_register_recn_cell_confirm (char old_flag, gpointer data)
{
SplitRegister *reg = data;
+ GtkWidget *dialog, *window;
gint response;
const gchar *title = _("Mark split as unreconciled?");
const gchar *message =
@@ -1549,11 +1563,17 @@
return TRUE;
/* Does the user want to be warned? */
- response = gnc_warning_remember_dialog(gnc_split_register_get_parent(reg),
- "mark_split_unreconciled",
- "_Unreconcile", GTK_STOCK_CANCEL,
- "<b>%s</b>\n\n%s\n",
- title, message);
-
+ window = gnc_split_register_get_parent(reg);
+ dialog =
+ gtk_message_dialog_new_with_markup(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), _("_Unreconcile"), GTK_RESPONSE_YES);
+ response = gnc_dialog_run(GTK_DIALOG(dialog), "mark_split_unreconciled");
+ gtk_widget_destroy(dialog);
return (response == GTK_RESPONSE_YES);
}
Modified: gnucash/trunk/src/register/ledger-core/split-register-model.c
===================================================================
--- gnucash/trunk/src/register/ledger-core/split-register-model.c 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/register/ledger-core/split-register-model.c 2006-01-29 14:53:19 UTC (rev 13019)
@@ -27,9 +27,9 @@
#include "Group.h"
#include "datecell.h"
+#include "dialog-utils.h"
#include "gnc-engine.h"
#include "gnc-gconf-utils.h"
-#include "gnc-err-popup.h"
#include "gnc-ui.h"
#include "pricecell.h"
#include "recncell.h"
@@ -1783,15 +1783,24 @@
static gboolean
xaccTransWarnReadOnly (const Transaction *trans)
{
+ GtkWidget *dialog;
const gchar *reason;
+ const gchar *format =
+ _("Cannot modify or delete this transaction. This transaction is "
+ "marked read-only because:\n\n'%s'");
if (!trans) return FALSE;
reason = xaccTransGetReadOnly (trans);
if (reason) {
- gnc_send_gui_error(_("Cannot modify or delete this transaction.\n"
- "This transaction is marked read-only because:\n\n'%s'"),
- reason);
+ dialog = gtk_message_dialog_new(NULL,
+ 0,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ format,
+ reason);
+ gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
return TRUE;
}
return FALSE;
@@ -1827,17 +1836,25 @@
if (recn == YREC)
{
+ GtkWidget *dialog, *window;
gint response;
+ const gchar *title = _("Change reconciled split?");
+ const gchar *message = _("You are about to change a reconciled split. Doing so might make "
+ "future reconciliation difficult! Continue with this change?");
/* Does the user want to be warned? */
- response = gnc_warning_remember_dialog(gnc_split_register_get_parent(reg),
- "change_reconciled_split",
- _("Change _Split"), GTK_STOCK_CANCEL,
- "<b>%s</b>\n\n%s\n",
- _("Change reconciled split?"),
- _("You are about to change a reconciled split. Doing so might make "
- "future reconciliation difficult! Continue with this change?"));
-
+ window = gnc_split_register_get_parent(reg);
+ dialog =
+ gtk_message_dialog_new_with_markup(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), _("Change _Split"), GTK_RESPONSE_YES);
+ response = gnc_dialog_run(GTK_DIALOG(dialog), "change_reconciled_split");
+ gtk_widget_destroy(dialog);
if (response != GTK_RESPONSE_YES)
return FALSE;
Modified: gnucash/trunk/src/register/ledger-core/split-register.c
===================================================================
--- gnucash/trunk/src/register/ledger-core/split-register.c 2006-01-29 14:48:41 UTC (rev 13018)
+++ gnucash/trunk/src/register/ledger-core/split-register.c 2006-01-29 14:53:19 UTC (rev 13019)
@@ -32,6 +32,7 @@
#include "combocell.h"
#include "datecell.h"
+#include "dialog-utils.h"
#include "gnc-component-manager.h"
#include "gnc-gconf-utils.h"
#include "split-register-p.h"
@@ -414,15 +415,28 @@
* it before we can duplicate. Make sure the user wants to do that. */
if (changed)
{
- const char *message = _("The current transaction has been changed.\n"
- "Would you like to record it?");
- gint result;
+ GtkWidget *dialog, *window;
+ gint response;
+ const char *title = _("Save transaction before duplicating?");
+ const char *message =
+ _("The current transaction has been changed. Would you like to "
+ "record the changes before duplicating the transaction, or "
+ "cancel the duplication?");
- result = gnc_ok_cancel_dialog
- (gnc_split_register_get_parent (reg),
- GTK_RESPONSE_OK, message);
+ window = gnc_split_register_get_parent(reg);
+ dialog = gtk_message_dialog_new(GTK_WINDOW(window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_CANCEL,
+ "%s", title);
+ gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
+ "%s", message);
+ gtk_dialog_add_button(GTK_DIALOG(dialog),
+ _("_Record"), GTK_RESPONSE_ACCEPT);
+ response = gnc_dialog_run(GTK_DIALOG(dialog), "transaction_duplicated");
+ gtk_widget_destroy(dialog);
- if (result != GTK_RESPONSE_OK)
+ if (response != GTK_RESPONSE_ACCEPT)
{
gnc_resume_gui_refresh ();
return NULL;
More information about the gnucash-changes
mailing list