diff options
-rw-r--r-- | widgets/misc/ChangeLog | 9 | ||||
-rw-r--r-- | widgets/misc/Makefile.am | 20 | ||||
-rw-r--r-- | widgets/misc/e-error.c | 15 | ||||
-rw-r--r-- | widgets/misc/e-error.h | 23 | ||||
-rw-r--r-- | widgets/misc/e-system-errors.xml.in | 22 | ||||
-rw-r--r-- | widgets/misc/test-error.c | 64 |
6 files changed, 141 insertions, 12 deletions
diff --git a/widgets/misc/ChangeLog b/widgets/misc/ChangeLog index 53fd3deaf6..899e901ab0 100644 --- a/widgets/misc/ChangeLog +++ b/widgets/misc/ChangeLog @@ -1,3 +1,12 @@ +2004-04-28 Not Zed <NotZed@Ximian.com> + + * e-system-errors.xml.in: holder for system errors. + + * test-error.c: helper to show an error message/test it. + + * e-error.[ch]: Api for disk-based, hig-compliant error messages + and query boxes. + 2004-04-19 Jeffrey Stedfast <fejj@ximian.com> * e-info-label.c (e_info_label_new): Updated to sue E_ICON_SIZE enums. diff --git a/widgets/misc/Makefile.am b/widgets/misc/Makefile.am index 768f36cd9b..d1df5e467e 100644 --- a/widgets/misc/Makefile.am +++ b/widgets/misc/Makefile.am @@ -2,6 +2,7 @@ INCLUDES = \ -I$(top_srcdir) \ -I$(top_srcdir)/a11y/widgets/ \ -DMAP_DIR=\""$(imagesdir)"\" \ + -DEVOLUTION_PRIVDATADIR=\""$(privdatadir)"\" \ -DG_LOG_DOMAIN=__FILE__ \ $(SOURCE_SEL_CFLAGS) @@ -24,6 +25,7 @@ widgetsinclude_HEADERS = \ e-combo-button.h \ e-dateedit.h \ e-dropdown-button.h \ + e-error.h \ e-expander.h \ e-image-chooser.h \ e-info-label.h \ @@ -53,6 +55,7 @@ libemiscwidgets_la_SOURCES = \ e-combo-button.c \ e-dateedit.c \ e-dropdown-button.c \ + e-error.c \ e-expander.c \ e-image-chooser.c \ e-info-label.c \ @@ -69,6 +72,11 @@ libemiscwidgets_la_SOURCES = \ MARSHAL_GENERATED = e-util-marshal.c e-util-marshal.h @EVO_MARSHAL_RULE@ +error_in_files = e-system-errors.xml.in +error_DATA = $(error_in_files:.xml.in=.xml) +errordir = $(privdatadir)/errors +@INTLTOOL_XML_RULE@ + libemiscwidgets_la_LIBADD = $(top_builddir)/e-util/libeutil.la \ $(top_builddir)/a11y/widgets/libevolution-widgets-a11y.la \ $(SOURCE_SEL_LIBS) @@ -83,6 +91,7 @@ noinst_PROGRAMS = \ test-calendar \ test-dateedit \ test-dropdown-button \ + test-error \ test-multi-config-dialog \ test-source-option-menu \ test-source-selector \ @@ -135,7 +144,6 @@ test_title_bar_LDADD = \ ./libemiscwidgets.la \ $(GNOME_FULL_LIBS) - # test-source-selector test_source_selector_SOURCES = \ @@ -157,11 +165,19 @@ test_source_option_menu_LDADD = \ ./libemiscwidgets.la \ $(SOURCE_SEL_LIBS) +test_error_SOURCES = \ + test-error.c + +test_error_LDADD = \ + ./libemiscwidgets.la \ + $(GNOME_FULL_LIBS) + -BUILT_SOURCES = $(MARSHAL_GENERATED) +BUILT_SOURCES = $(MARSHAL_GENERATED) $(error_DATA) CLEANFILES = $(BUILT_SOURCES) EXTRA_DIST = \ + $(error_in_files) \ e-util-marshal.list \ ChangeLog.pre-1-4 diff --git a/widgets/misc/e-error.c b/widgets/misc/e-error.c index f7cc9ee7bf..d60d301cab 100644 --- a/widgets/misc/e-error.c +++ b/widgets/misc/e-error.c @@ -214,10 +214,15 @@ ee_load(const char *path) return; } - table = g_malloc0(sizeof(*table)); - table->domain = g_strdup(tmp); + table = g_hash_table_lookup(error_table, tmp); + if (table == NULL) { + table = g_malloc0(sizeof(*table)); + table->domain = g_strdup(tmp); + table->errors = g_hash_table_new(g_str_hash, g_str_equal); + g_hash_table_insert(error_table, table->domain, table); + } else + g_warning("Error file '%s', domain '%s' already used, merging", path, tmp); g_free(tmp); - table->errors = g_hash_table_new(g_str_hash, g_str_equal); for (error = root->children;error;error = error->next) { if (!strcmp(error->name, "error")) { @@ -304,8 +309,6 @@ ee_load(const char *path) } xmlFreeDoc(doc); - - g_hash_table_insert(error_table, table->domain, table); } static void @@ -324,7 +327,7 @@ ee_load_tables(void) /* setup system error types */ table = g_malloc0(sizeof(*table)); - table->domain = "system"; + table->domain = "builtin"; table->errors = g_hash_table_new(g_str_hash, g_str_equal); for (i=0;i<sizeof(default_errors)/sizeof(default_errors[0]);i++) g_hash_table_insert(table->errors, default_errors[i].id, &default_errors[i]); diff --git a/widgets/misc/e-error.h b/widgets/misc/e-error.h index 9da24e6004..2b0bded9bc 100644 --- a/widgets/misc/e-error.h +++ b/widgets/misc/e-error.h @@ -26,11 +26,26 @@ struct _GtkWindow; -#define E_ERROR_WARNING "system:warning" -#define E_ERROR_WARNING_PRIMARY "system:warning-primary" -#define E_ERROR_ERROR "system:error" -#define E_ERROR_ERROR_PRIMARY "system:error-primary" +/* + * Some standard errors, if these are altered or added to, + * update devel-docs/misc/errors.txt + * + * Several more basic ones are needed. + */ + +#define E_ERROR_WARNING "builtin:warning" +#define E_ERROR_WARNING_PRIMARY "builtin:warning-primary" +#define E_ERROR_ERROR "builtin:error" +#define E_ERROR_ERROR_PRIMARY "builtin:error-primary" + +/* takes filename, returns OK if yes */ +#define E_ERROR_ASK_FILE_EXISTS_OVERWRITE "system:ask-save-file-exists-overwrite" +/* takes filename, reason */ +#define E_ERROR_NO_SAVE_FILE "system:no-save-file" +/* takes filename, reason */ +#define E_ERROR_NO_LOAD_FILE "system:no-save-file" +/* Note that all errors returned are standard GtkDialoge's */ struct _GtkWidget *e_error_new(struct _GtkWindow *parent, const char *tag, const char *arg0, ...); struct _GtkWidget *e_error_newv(struct _GtkWindow *parent, const char *tag, const char *arg0, va_list ap); diff --git a/widgets/misc/e-system-errors.xml.in b/widgets/misc/e-system-errors.xml.in new file mode 100644 index 0000000000..00175f91f1 --- /dev/null +++ b/widgets/misc/e-system-errors.xml.in @@ -0,0 +1,22 @@ +<?xml version="1.0"?> +<error-list domain="system"> + + <error id="ask-save-file-exists-overwrite" type="error" default="GTK_RESPONSE_CANCEL"> + <_title>Overwrite file?</_title> + <_primary>File exists "{0}".</_primary> + <_secondary>Do you wish to overwrite it?</_secondary> + <button stock="gtk-cancel" response="GTK_RESPONSE_CANCEL"/> + <button _label="_Overwrite" response="GTK_RESPONSE_OK"/> + </error> + + <error id="no-save-file" type="error"> + <_primary>Cannot save file "{0}".</_primary> + <_secondary>Because "{1}"</_secondary> + </error> + + <error id="no-load-file" type="error"> + <_primary>Cannot open file "{0}".</_primary> + <_secondary>Because "{1}".</_secondary> + </error> + +</error-list> diff --git a/widgets/misc/test-error.c b/widgets/misc/test-error.c new file mode 100644 index 0000000000..38b9bfb6b0 --- /dev/null +++ b/widgets/misc/test-error.c @@ -0,0 +1,64 @@ +/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- + * + * test-error.c + * + * Copyright (C) 2004 Novell, Inc. + * + * Author: Michael Zucchi <notzed@ximian.com> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <libgnomeui/gnome-app.h> +#include <libgnomeui/gnome-ui-init.h> +#include "e-error.h" + +int +main (int argc, char **argv) +{ + gnome_init ("test-error", "0.0", argc, argv); + + argc--; + switch (argc) { + case 1: + e_error_run(NULL, argv[1], NULL); + break; + case 2: + e_error_run(NULL, argv[1], argv[2], NULL); + break; + case 3: + e_error_run(NULL, argv[1], argv[2], argv[3], NULL); + break; + case 4: + e_error_run(NULL, argv[1], argv[2], argv[3], argv[4], NULL); + break; + case 5: + e_error_run(NULL, argv[1], argv[2], argv[3], argv[4], argv[5], NULL); + break; + case 6: + e_error_run(NULL, argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], NULL); + break; + default: + printf("Error: too many or too few arguments\n"); + printf("Usage:\n %s domain:error-id [ args ... ]\n", argv[0]); + } + + return 0; +} |