From 6114b14cb4b2d575bf78f93351537a99d9fbc5ce Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Wed, 25 Jan 2006 10:20:02 +0000 Subject: [PATCH] more info on app exiting - translatable strings now. use textblock widget. SVN revision: 20028 --- src/bin/e_apps_error.c | 86 ++++++++++++++++++++++++++---------- src/bin/e_test.c | 10 +++++ src/bin/e_widget_textblock.c | 60 +++++++++++++++++++++++-- 3 files changed, 130 insertions(+), 26 deletions(-) diff --git a/src/bin/e_apps_error.c b/src/bin/e_apps_error.c index 13cd0ff72..9ef6e6960 100644 --- a/src/bin/e_apps_error.c +++ b/src/bin/e_apps_error.c @@ -34,7 +34,7 @@ _e_app_error_dialog(E_Container *con, E_App_Autopsy *app) v->advanced.create_widgets = _e_app_error_dialog_advanced_create_widgets; /* Create The Dialog */ - cfd = e_config_dialog_new(con, _("Run error, wtf? That sux."), NULL, 0, v, app); + cfd = e_config_dialog_new(con, _("Application Execution Error"), NULL, 0, v, app); app->error_dialog = cfd; } } @@ -42,28 +42,54 @@ _e_app_error_dialog(E_Container *con, E_App_Autopsy *app) static void _e_app_error_dialog_fill_data(E_App_Autopsy *app, E_Config_Dialog_Data *cfdata) { - int length; + char buf[4096]; - length = strlen(app->app->name); if (!cfdata->label) { - cfdata->label = malloc((length + 20) * sizeof(char)); - if (cfdata->label) - sprintf(cfdata->label, "%s may have crashed.", app->app->name); + snprintf(buf, sizeof(buf), _("%s stopped running unexpectedly."), + app->app->name); + cfdata->label = strdup(buf); } - length = strlen(app->app->exe); if ((app->del.exited) && (!cfdata->exit)) { - cfdata->exit = malloc((length + 64) * sizeof(char)); - if (cfdata->exit) - sprintf(cfdata->exit, "An exit code of %i was returned from %s", app->del.exit_code, app->app->exe); + snprintf(buf, sizeof(buf), _("An exit code of %i was returned from %s"), + app->del.exit_code, app->app->exe); + cfdata->exit = strdup(buf); } if ((app->del.signalled) && (!cfdata->signal)) { - cfdata->signal = malloc((length + 64) * sizeof(char)); - if (cfdata->signal) - sprintf(cfdata->signal, "%s was interupted by signal %i", app->app->exe, app->del.exit_signal); /* FIXME: add a description of the signal. */ + if (app->del.exit_signal == SIGINT) + snprintf(buf, sizeof(buf), _("%s was interrupted by an Interrupt Singal"), + app->app->exe, app->del.exit_signal); + else if (app->del.exit_signal == SIGQUIT) + snprintf(buf, sizeof(buf), _("%s was interrupted by a Quit Singal"), + app->app->exe, app->del.exit_signal); + else if (app->del.exit_signal == SIGABRT) + snprintf(buf, sizeof(buf), _("%s was interrupted by an Abort Singal"), + app->app->exe, app->del.exit_signal); + else if (app->del.exit_signal == SIGFPE) + snprintf(buf, sizeof(buf), _("%s was interrupted by a Floating Point Error"), + app->app->exe, app->del.exit_signal); + else if (app->del.exit_signal == SIGKILL) + snprintf(buf, sizeof(buf), _("%s was interrupted by an Uninterruptable Kill Singal"), + app->app->exe, app->del.exit_signal); + else if (app->del.exit_signal == SIGSEGV) + snprintf(buf, sizeof(buf), _("%s was interrupted by a Segmentation Fault"), + app->app->exe, app->del.exit_signal); + else if (app->del.exit_signal == SIGPIPE) + snprintf(buf, sizeof(buf), _("%s was interrupted by a Broken Pipe"), + app->app->exe, app->del.exit_signal); + else if (app->del.exit_signal == SIGTERM) + snprintf(buf, sizeof(buf), _("%s was interrupted by a Termination Singal"), + app->app->exe, app->del.exit_signal); + else if (app->del.exit_signal == SIGBUS) + snprintf(buf, sizeof(buf), _("%s was interrupted by a Bus Error"), + app->app->exe, app->del.exit_signal); + else + snprintf(buf, sizeof(buf), _("%s was interupted by the signal number %i"), + app->app->exe, app->del.exit_signal); + cfdata->signal = strdup(buf); /* FIXME: Add sigchld_info stuff * app->del.data * siginfo_t @@ -144,14 +170,28 @@ _e_app_error_dialog_scrolltext_create(Evas *evas, char *title, Ecore_Exe_Event_D { int i; Evas_Object *obj, *os; + char *text; + int tlen; os = e_widget_framelist_add(evas, _(title), 0); - obj = e_widget_tlist_add(evas, NULL); + obj = e_widget_textblock_add(evas); + tlen = 0; for (i = 0; lines[i].line != NULL; i++) - e_widget_tlist_append(obj, lines[i].line, NULL, NULL, NULL); - e_widget_min_size_set(obj, 200, 200); + tlen += strlen(lines[i].line) + 1; + text = alloca(tlen + 1); + if (text) + { + text[0] = 0; + for (i = 0; lines[i].line != NULL; i++) + { + strcat(text, lines[i].line); + strcat(text, "\n"); + } + e_widget_textblock_plain_set(obj, text); + } + e_widget_min_size_set(obj, 240, 120); e_widget_framelist_object_append(os, obj); @@ -177,7 +217,7 @@ _e_app_error_dialog_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Con error_length = app->error->size; if (error_length) { - os = _e_app_error_dialog_scrolltext_create(evas, "Error", app->error->lines); + os = _e_app_error_dialog_scrolltext_create(evas, _("Error Logs"), app->error->lines); e_widget_list_object_append(o, os, 1, 1, 0.5); } else @@ -208,7 +248,7 @@ _e_app_error_dialog_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_ if (cfdata->exit) { - of = e_widget_framelist_add(evas, _("Exit code"), 0); + of = e_widget_framelist_add(evas, _("Error Information"), 0); ob = e_widget_label_add(evas, _(cfdata->exit)); e_widget_framelist_object_append(of, ob); e_widget_list_object_append(o, of, 1, 1, 0.5); @@ -216,7 +256,7 @@ _e_app_error_dialog_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_ if (cfdata->signal) { - of = e_widget_framelist_add(evas, _("Signal"), 0); + of = e_widget_framelist_add(evas, _("Error Signal Information"), 0); ob = e_widget_label_add(evas, _(cfdata->signal)); e_widget_framelist_object_append(of, ob); e_widget_list_object_append(o, of, 1, 1, 0.5); @@ -227,13 +267,13 @@ _e_app_error_dialog_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_ if (read_length) { - of = _e_app_error_dialog_scrolltext_create(evas, "Output", app->read->lines); + of = _e_app_error_dialog_scrolltext_create(evas, _("Output Data"), app->read->lines); /* FIXME: Add stdout "start". */ /* FIXME: Add stdout "end". */ } else { - of = e_widget_framelist_add(evas, _("Output"), 0); + of = e_widget_framelist_add(evas, _("Output Data"), 0); ob = e_widget_label_add(evas, _("There was no output.")); e_widget_framelist_object_append(of, ob); } @@ -243,13 +283,13 @@ _e_app_error_dialog_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_ error_length = app->error->size; if (error_length) { - of = _e_app_error_dialog_scrolltext_create(evas, "Error", app->error->lines); + of = _e_app_error_dialog_scrolltext_create(evas, _("Error Logs"), app->error->lines); /* FIXME: Add stderr "start". */ /* FIXME: Add stderr "end". */ } else { - of = e_widget_framelist_add(evas, _("Error"), 0); + of = e_widget_framelist_add(evas, _("Error Logs"), 0); ob = e_widget_label_add(evas, _("There was no error message.")); e_widget_framelist_object_append(of, ob); } diff --git a/src/bin/e_test.c b/src/bin/e_test.c index 0bfadcbf5..b6a28e556 100644 --- a/src/bin/e_test.c +++ b/src/bin/e_test.c @@ -546,6 +546,7 @@ _e_test_internal(E_Container *con) e_dialog_title_set(dia, "A Test Dialog"); o = e_widget_textblock_add(dia->win->evas); +#if 0 e_widget_textblock_markup_set(o, "A title" "This is some text
" @@ -560,6 +561,15 @@ _e_test_internal(E_Container *con) "Smelly fish on a stick
" "Whatever." ); +#else + e_widget_textblock_plain_set(o, + "And here is some plaintext\n" + "with some newlines & other special characters\n" + "that should get escaped like < and >.\n" + "\n" + "\tTabs should become 8 spaces too.\n" + ); +#endif evas_object_show(o); e_dialog_content_set(dia, o, 160, 160); diff --git a/src/bin/e_widget_textblock.c b/src/bin/e_widget_textblock.c index 35ee76645..59d6dfe6d 100644 --- a/src/bin/e_widget_textblock.c +++ b/src/bin/e_widget_textblock.c @@ -67,10 +67,64 @@ e_widget_textblock_markup_set(Evas_Object *obj, const char *text) EAPI void e_widget_textblock_plain_set(Evas_Object *obj, const char *text) { - /* FIXME: parse text escape anything htmlish, - generate new text, set - * as markup + char *markup, *p, *d; + int mlen; + + if (!text) + { + e_widget_textblock_markup_set(obj, NULL); + return; + } + mlen = strlen(text); + /* need to look for these and replace with a new string (on the right) + * '\n' -> "
" + * '\t' -> " " + * '<' -> "<" + * '>' -> ">" + * '&' -> "&" */ - e_widget_textblock_markup_set(obj, text); + for (p = text; *p != 0; p++) + { + if (*p == '\n') mlen += 4 - 1; + else if (*p == '\t') mlen += 8 - 1; + else if (*p == '<') mlen += 4 - 1; + else if (*p == '>') mlen += 4 - 1; + else if (*p == '&') mlen += 5 - 1; + } + markup = alloca(mlen + 1); + if (!markup) return; + markup[0] = 0; + for (d = markup, p = text; *p != 0; p++, d++) + { + if (*p == '\n') + { + strcpy(d, "
"); + d += 4 - 1; + } + else if (*p == '\t') + { + strcpy(d, " "); + d += 8 - 1; + } + else if (*p == '<') + { + strcpy(d, "<"); + d += 4 - 1; + } + else if (*p == '>') + { + strcpy(d, ">"); + d += 4 - 1; + } + else if (*p == '&') + { + strcpy(d, "&"); + d += 5 - 1; + } + else *d = *p; + } + *d = 0; + e_widget_textblock_markup_set(obj, markup); }