diff options
Diffstat (limited to 'shell/report.c')
-rw-r--r-- | shell/report.c | 963 |
1 files changed, 0 insertions, 963 deletions
diff --git a/shell/report.c b/shell/report.c deleted file mode 100644 index 6abb03a0..00000000 --- a/shell/report.c +++ /dev/null @@ -1,963 +0,0 @@ -/* - * HardInfo - Displays System Information - * Copyright (C) 2003-2008 Leandro A. F. Pereira <leandro@hardinfo.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, version 2. - * - * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include <report.h> -#include <stdio.h> -#include <string.h> -#include <shell.h> -#include <iconcache.h> -#include <hardinfo.h> -#include <config.h> - -static ReportDialog *report_dialog_new(GtkTreeModel * model, - GtkWidget * parent); -static void set_all_active(ReportDialog * rd, gboolean setting); - -static FileTypes file_types[] = { - {"HTML (*.html)", "text/html", ".html", report_context_html_new}, - {"Plain Text (*.txt)", "text/plain", ".txt", report_context_text_new}, - {NULL, NULL, NULL, NULL} -}; - -void report_header(ReportContext * ctx) -{ - ctx->header(ctx); -} - -void report_footer(ReportContext * ctx) -{ - ctx->footer(ctx); -} - -void report_title(ReportContext * ctx, gchar * text) -{ - ctx->title(ctx, text); -} - -void report_subtitle(ReportContext * ctx, gchar * text) -{ - ctx->subtitle(ctx, text); -} - -void report_subsubtitle(ReportContext * ctx, gchar * text) -{ - ctx->subsubtitle(ctx, text); -} - -void report_key_value(ReportContext * ctx, gchar * key, gchar * value) -{ - ctx->keyvalue(ctx, key, value); -} - -gint report_get_visible_columns(ReportContext *ctx) -{ - gint columns; - - /* Column count starts at two, since we always have at least - two columns visible. */ - columns = 2; - - /* Either the Progress column or the Value column is available at - the same time. So we don't count them. */ - - if (ctx->columns & REPORT_COL_EXTRA1) - columns++; - - if (ctx->columns & REPORT_COL_EXTRA2) - columns++; - - return columns; -} - -void report_context_configure(ReportContext * ctx, GKeyFile * keyfile) -{ - gchar **keys; - const gchar *group = "$ShellParam$"; - - /* FIXME: sometime in the future we'll save images in the report. this - flag will be set if we should support that. - - so i don't forget how to encode the images inside the html files: - https://en.wikipedia.org/wiki/Data:_URI_scheme */ - - ctx->is_image_enabled = (g_key_file_get_boolean(keyfile, - group, - "ViewType", - NULL) == SHELL_VIEW_PROGRESS); - - - keys = g_key_file_get_keys(keyfile, group, NULL, NULL); - if (keys) { - gint i = 0; - - for (; keys[i]; i++) { - gchar *key = keys[i]; - - if (g_str_equal(key, "ShowColumnHeaders")) { - ctx->show_column_headers = g_key_file_get_boolean(keyfile, group, key, NULL); - } else if (g_str_has_prefix(key, "ColumnTitle")) { - gchar *value, *title = strchr(key, '$'); - - if (!title) { - DEBUG("couldn't find column title"); - break; - } - title++; - if (!*title) { - DEBUG("title is empty"); - break; - } - - value = g_key_file_get_value(keyfile, group, key, NULL); - if (g_str_equal(title, "Extra1")) { - ctx->columns |= REPORT_COL_EXTRA1; - } else if (g_str_equal(title, "Extra2")) { - ctx->columns |= REPORT_COL_EXTRA2; - } else if (g_str_equal(title, "Value")) { - ctx->columns |= REPORT_COL_VALUE; - } else if (g_str_equal(title, "TextValue")) { - ctx->columns |= REPORT_COL_TEXTVALUE; - } else if (g_str_equal(title, "Progress")) { - ctx->columns |= REPORT_COL_PROGRESS; - } - - g_hash_table_replace(ctx->column_titles, - g_strdup(title), g_strdup(value)); - } else if (g_str_equal(key, "ViewType")) { - if (g_key_file_get_integer(keyfile, group, "ViewType", NULL) == SHELL_VIEW_PROGRESS) { - ctx->columns &= ~REPORT_COL_VALUE; - ctx->columns |= REPORT_COL_PROGRESS; - } - } - } - - g_strfreev(keys); - } - -} - -void report_table(ReportContext * ctx, gchar * text) -{ - GKeyFile *key_file = g_key_file_new(); - gchar **groups; - gint i; - - /* make only "Value" column visible ("Key" column is always visible) */ - ctx->columns = REPORT_COL_VALUE; - ctx->show_column_headers = FALSE; - - /**/ - g_key_file_load_from_data(key_file, text, strlen(text), 0, NULL); - groups = g_key_file_get_groups(key_file, NULL); - - for (i = 0; groups[i]; i++) { - if (groups[i][0] == '$') { - report_context_configure(ctx, key_file); - break; - } - } - - for (i = 0; groups[i]; i++) { - gchar *group, *tmpgroup; - gchar **keys; - gint j; - - if (groups[i][0] == '$') { - continue; - } - - group = groups[i]; - - tmpgroup = g_strdup(group); - strend(group, '#'); - - report_subsubtitle(ctx, group); - -#if 0 - if (ctx->is_image_enabled) { - report_embed_image(ctx, key_file, group); - } else { -#endif - keys = g_key_file_get_keys(key_file, tmpgroup, NULL, NULL); - for (j = 0; keys[j]; j++) { - gchar *key = keys[j]; - gchar *value; - - value = g_key_file_get_value(key_file, tmpgroup, key, NULL); - - if (g_utf8_validate(key, -1, NULL) && g_utf8_validate(value, -1, NULL)) { - strend(key, '#'); - - if (g_str_equal(value, "...")) { - g_free(value); - if (!(value = ctx->entry->fieldfunc(key))) { - value = g_strdup("..."); - } - } - - if (*key == '$') { - report_key_value(ctx, strchr(key + 1, '$') + 1, - value); - } else { - report_key_value(ctx, key, value); - } - - } - - g_free(value); - } - - g_strfreev(keys); -#if 0 - } -#endif - g_free(tmpgroup); - } - - g_strfreev(groups); - g_key_file_free(key_file); -} - -static void report_html_header(ReportContext * ctx) -{ - g_free(ctx->output); - - ctx->output = - g_strdup_printf - ("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Final//EN\">\n" - "<html><head>\n" "<title>HardInfo (%s) System Report</title>\n" - "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n" - "<style>\n" " body { background: #fff }\n" - " .title { font: bold 130%% serif; color: #0066FF; padding: 30px 0 10px 0 }\n" - " .stitle { font: bold 100%% sans-serif; color: #0044DD; padding: 30px 0 10px 0 }\n" - " .sstitle{ font: bold 80%% serif; color: #000000; background: #efefef }\n" - " .field { font: 80%% sans-serif; color: #000000; padding: 2px; padding-left: 50px }\n" - " .value { font: 80%% sans-serif; color: #505050 }\n" - "</style>\n" "</head><body>\n", - VERSION); -} - -static void report_html_footer(ReportContext * ctx) -{ - ctx->output = h_strconcat(ctx->output, - "</table></html>", NULL); -} - -static void report_html_title(ReportContext * ctx, gchar * text) -{ - if (!ctx->first_table) { - ctx->output = h_strdup_cprintf("</table>", ctx->output); - } - - ctx->output = h_strdup_cprintf("<h1 class=\"title\">%s</h1>", ctx->output, text); -} - -static void report_html_subtitle(ReportContext * ctx, gchar * text) -{ - gint columns = report_get_visible_columns(ctx); - - if (!ctx->first_table) { - ctx->output = h_strdup_cprintf("</table>", ctx->output); - } else { - ctx->first_table = FALSE; - } - - ctx->output = h_strdup_cprintf("<table><tr><td colspan=\"%d\" class=\"stit" - "le\">%s</td></tr>\n", - ctx->output, - columns, - text); -} - -static void report_html_subsubtitle(ReportContext * ctx, gchar * text) -{ - gint columns = report_get_visible_columns(ctx); - - ctx->output = h_strdup_cprintf("<tr><td colspan=\"%d\" class=\"ssti" - "tle\">%s</td></tr>\n", - ctx->output, - columns, - text); -} - -static void -report_html_key_value(ReportContext * ctx, gchar * key, gchar * value) -{ - gint columns = report_get_visible_columns(ctx); - gchar **values; - gint i, mc; - - if (columns == 2) { - ctx->output = h_strdup_cprintf("<tr><td class=\"field\">%s</td>" - "<td class=\"value\">%s</td></tr>\n", - ctx->output, - key, value); - } else { - values = g_strsplit(value, "|", columns); - mc = g_strv_length(values) - 1; - - ctx->output = h_strdup_cprintf("\n<tr>\n<td class=\"field\">%s</td>", ctx->output, key); - - for (i = mc; i >= 0; i--) { - ctx->output = h_strdup_cprintf("<td class=\"value\">%s</td>", - ctx->output, - values[i]); - } - - ctx->output = h_strdup_cprintf("</tr>\n", ctx->output); - - g_strfreev(values); - } -} - -static void report_text_header(ReportContext * ctx) -{ - g_free(ctx->output); - - ctx->output = g_strdup(""); -} - -static void report_text_footer(ReportContext * ctx) -{ -} - -static void report_text_title(ReportContext * ctx, gchar * text) -{ - gchar *str = (gchar *) ctx->output; - int i = strlen(text); - - str = h_strdup_cprintf("\n%s\n", str, text); - for (; i; i--) - str = h_strconcat(str, "*", NULL); - - str = h_strconcat(str, "\n\n", NULL); - ctx->output = str; -} - -static void report_text_subtitle(ReportContext * ctx, gchar * text) -{ - gchar *str = ctx->output; - int i = strlen(text); - - str = h_strdup_cprintf("\n%s\n", str, text); - for (; i; i--) - str = h_strconcat(str, "-", NULL); - - str = h_strconcat(str, "\n\n", NULL); - ctx->output = str; -} - -static void report_text_subsubtitle(ReportContext * ctx, gchar * text) -{ - ctx->output = h_strdup_cprintf("-%s-\n", ctx->output, text); -} - -static void -report_text_key_value(ReportContext * ctx, gchar * key, gchar * value) -{ - gint columns = report_get_visible_columns(ctx); - gchar **values; - gint i, mc; - - if (columns == 2) { - if (strlen(value)) - ctx->output = h_strdup_cprintf("%s\t\t: %s\n", ctx->output, key, value); - else - ctx->output = h_strdup_cprintf("%s\n", ctx->output, key); - } else { - values = g_strsplit(value, "|", columns); - mc = g_strv_length(values) - 1; - - ctx->output = h_strdup_cprintf("%s\t", ctx->output, key); - - for (i = mc; i >= 0; i--) { - ctx->output = h_strdup_cprintf("%s\t", - ctx->output, - values[i]); - } - - ctx->output = h_strdup_cprintf("\n", ctx->output); - - g_strfreev(values); - } -} - -static GSList *report_create_module_list_from_dialog(ReportDialog * rd) -{ - ShellModule *module; - GSList *modules = NULL; - GtkTreeModel *model = rd->model; - GtkTreeIter iter; - - gtk_tree_model_get_iter_first(model, &iter); - do { - gboolean selected; - gchar *name; - - gtk_tree_model_get(model, &iter, TREE_COL_SEL, &selected, -1); - if (!selected) - continue; - - module = g_new0(ShellModule, 1); - - gtk_tree_model_get(model, &iter, TREE_COL_NAME, &name, -1); - module->name = name; - module->entries = NULL; - - if (gtk_tree_model_iter_has_child(model, &iter)) { - ShellModuleEntry *entry; - - gint children = gtk_tree_model_iter_n_children(model, &iter); - gint i; - - for (i = 0; i < children; i++) { - GtkTreeIter child; - - gtk_tree_model_iter_nth_child(model, &child, &iter, i); - - gtk_tree_model_get(model, &child, TREE_COL_SEL, &selected, - -1); - if (!selected) - continue; - - gtk_tree_model_get(model, &child, TREE_COL_MODULE_ENTRY, &entry, - -1); - module->entries = g_slist_append(module->entries, entry); - } - } - - modules = g_slist_append(modules, module); - } while (gtk_tree_model_iter_next(rd->model, &iter)); - - return modules; -} - -static void -report_create_inner_from_module_list(ReportContext * ctx, GSList * modules) -{ - for (; modules; modules = modules->next) { - ShellModule *module = (ShellModule *) modules->data; - GSList *entries; - - if (!params.gui_running) - fprintf(stderr, "\033[40;32m%s\033[0m\n", module->name); - - report_title(ctx, module->name); - - for (entries = module->entries; entries; entries = entries->next) { - ShellModuleEntry *entry = (ShellModuleEntry *) entries->data; - - if (!params.gui_running) - fprintf(stderr, "\033[2K\033[40;32;1m %s\033[0m\n", - entry->name); - - ctx->entry = entry; - report_subtitle(ctx, entry->name); - module_entry_scan(entry); - report_table(ctx, module_entry_function(entry)); - } - } -} - -void report_module_list_free(GSList * modules) -{ - GSList *m; - - for (m = modules; m; m = m->next) { - ShellModule *module = (ShellModule *) m->data; - - g_slist_free(module->entries); - } - - g_slist_free(modules); -} - -static gchar *report_get_filename(void) -{ - GtkWidget *dialog; - gchar *filename = NULL; - -#if GTK_CHECK_VERSION(3, 0, 0) - dialog = gtk_file_chooser_dialog_new(_("Save File"), - NULL, - GTK_FILE_CHOOSER_ACTION_SAVE, - _("_Cancel"), - GTK_RESPONSE_CANCEL, - _("_Save"), - GTK_RESPONSE_ACCEPT, NULL); -#else - dialog = gtk_file_chooser_dialog_new(_("Save File"), - NULL, - GTK_FILE_CHOOSER_ACTION_SAVE, - GTK_STOCK_CANCEL, - GTK_RESPONSE_CANCEL, - GTK_STOCK_SAVE, - GTK_RESPONSE_ACCEPT, NULL); -#endif - - gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), - "hardinfo_report"); - - file_chooser_add_filters(dialog, file_types); - file_chooser_open_expander(dialog); - - if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { - gchar *ext = file_chooser_get_extension(dialog, file_types); - filename = file_chooser_build_filename(dialog, ext); - } - gtk_widget_destroy(dialog); - return filename; -} - -ReportContext *report_context_html_new() -{ - ReportContext *ctx; - - ctx = g_new0(ReportContext, 1); - ctx->header = report_html_header; - ctx->footer = report_html_footer; - ctx->title = report_html_title; - ctx->subtitle = report_html_subtitle; - ctx->subsubtitle = report_html_subsubtitle; - ctx->keyvalue = report_html_key_value; - - ctx->output = g_strdup(""); - ctx->format = REPORT_FORMAT_HTML; - - ctx->column_titles = g_hash_table_new_full(g_str_hash, g_str_equal, - g_free, g_free); - ctx->first_table = TRUE; - - return ctx; -} - -ReportContext *report_context_text_new() -{ - ReportContext *ctx; - - ctx = g_new0(ReportContext, 1); - ctx->header = report_text_header; - ctx->footer = report_text_footer; - ctx->title = report_text_title; - ctx->subtitle = report_text_subtitle; - ctx->subsubtitle = report_text_subsubtitle; - ctx->keyvalue = report_text_key_value; - - ctx->output = g_strdup(""); - ctx->format = REPORT_FORMAT_TEXT; - - ctx->column_titles = g_hash_table_new_full(g_str_hash, g_str_equal, - g_free, g_free); - ctx->first_table = TRUE; - - return ctx; -} - -void report_context_free(ReportContext * ctx) -{ - g_hash_table_destroy(ctx->column_titles); - g_free(ctx->output); - g_free(ctx); -} - -void report_create_from_module_list(ReportContext * ctx, GSList * modules) -{ - report_header(ctx); - - report_create_inner_from_module_list(ctx, modules); - report_module_list_free(modules); - - report_footer(ctx); -} - -gchar *report_create_from_module_list_format(GSList * modules, - ReportFormat format) -{ - ReportContext *(*create_context) (); - ReportContext *ctx; - gchar *retval; - - if (format >= N_REPORT_FORMAT) - return NULL; - - create_context = file_types[format].data; - if (!create_context) - return NULL; - - ctx = create_context(); - - report_create_from_module_list(ctx, modules); - retval = g_strdup(ctx->output); - - report_context_free(ctx); - - return retval; -} - -static gboolean report_generate(ReportDialog * rd) -{ - GSList *modules; - ReportContext *ctx; - ReportContext *(*create_context) (); - gchar *file; - FILE *stream; - - if (!(file = report_get_filename())) - return FALSE; - - if (!(stream = fopen(file, "w+"))) { - g_free(file); - return FALSE; - } - - create_context = file_types_get_data_by_name(file_types, file); - - if (!create_context) { - g_warning(_("Cannot create ReportContext. Programming bug?")); - g_free(file); - fclose(stream); - return FALSE; - } - - ctx = create_context(); - modules = report_create_module_list_from_dialog(rd); - - report_create_from_module_list(ctx, modules); - fputs(ctx->output, stream); - fclose(stream); - - if (ctx->format == REPORT_FORMAT_HTML) { - GtkWidget *dialog; - dialog = gtk_message_dialog_new(NULL, - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_QUESTION, - GTK_BUTTONS_NONE, - _("Open the report with your web browser?")); -#if GTK_CHECK_VERSION(3, 0, 0) - gtk_dialog_add_buttons(GTK_DIALOG(dialog), - _("_No"), GTK_RESPONSE_REJECT, - _("_Open"), GTK_RESPONSE_ACCEPT, NULL); -#else - gtk_dialog_add_buttons(GTK_DIALOG(dialog), - GTK_STOCK_NO, GTK_RESPONSE_REJECT, - GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); -#endif - if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { - gchar *temp; - - temp = g_strdup_printf("file://%s", file); - open_url(temp); - - g_free(temp); - } - - gtk_widget_destroy(dialog); - } - - report_context_free(ctx); - g_free(file); - - return TRUE; -} - -void report_dialog_show(GtkTreeModel * model, GtkWidget * parent) -{ - gboolean success; - ReportDialog *rd = report_dialog_new(model, parent); - - if (gtk_dialog_run(GTK_DIALOG(rd->dialog)) == GTK_RESPONSE_ACCEPT) { - shell_status_update(_("Generating report...")); - gtk_widget_hide(rd->dialog); - shell_view_set_enabled(FALSE); - shell_status_set_enabled(TRUE); - - success = report_generate(rd); - - shell_status_set_enabled(FALSE); - - if (success) - shell_status_update(_("Report saved.")); - else - shell_status_update(_("Error while creating the report.")); - } - - set_all_active(rd, FALSE); - gtk_widget_destroy(rd->dialog); - g_free(rd); -} - -static void -set_children_active(GtkTreeModel * model, GtkTreeIter * iter, - gboolean setting) -{ - if (gtk_tree_model_iter_has_child(model, iter)) { - gint children = gtk_tree_model_iter_n_children(model, iter); - - gtk_tree_store_set(GTK_TREE_STORE(model), iter, TREE_COL_SEL, - setting, -1); - - for (children--; children >= 0; children--) { - GtkTreeIter child; - - gtk_tree_model_iter_nth_child(model, &child, iter, children); - gtk_tree_store_set(GTK_TREE_STORE(model), &child, TREE_COL_SEL, - setting, -1); - } - } -} - -static void set_all_active(ReportDialog * rd, gboolean setting) -{ - GtkTreeIter iter; - GtkTreeModel *model = rd->model; - - gtk_tree_model_get_iter_first(model, &iter); - - do { - set_children_active(model, &iter, setting); - } while (gtk_tree_model_iter_next(model, &iter)); -} - -static void report_dialog_sel_none(GtkWidget * widget, ReportDialog * rd) -{ - set_all_active(rd, FALSE); -} - -static void report_dialog_sel_all(GtkWidget * widget, ReportDialog * rd) -{ - set_all_active(rd, TRUE); -} - -static void -report_dialog_sel_toggle(GtkCellRendererToggle * cellrenderertoggle, - gchar * path_str, ReportDialog * rd) -{ - GtkTreeModel *model = rd->model; - GtkTreeIter iter; - GtkTreePath *path = gtk_tree_path_new_from_string(path_str); - gboolean active; - - gtk_tree_model_get_iter(model, &iter, path); - gtk_tree_model_get(model, &iter, TREE_COL_SEL, &active, -1); - - active = !active; - gtk_tree_store_set(GTK_TREE_STORE(model), &iter, TREE_COL_SEL, active, - -1); - set_children_active(model, &iter, active); - - if (active) { - GtkTreeIter parent; - - if (gtk_tree_model_iter_parent(model, &parent, &iter)) { - gtk_tree_store_set(GTK_TREE_STORE(model), &parent, - TREE_COL_SEL, active, -1); - } - } - - gtk_tree_path_free(path); -} - -static ReportDialog - * report_dialog_new(GtkTreeModel * model, GtkWidget * parent) -{ - ReportDialog *rd; - GtkWidget *dialog; - GtkWidget *dialog1_vbox; - GtkWidget *scrolledwindow2; - GtkWidget *treeview2; - GtkWidget *vbuttonbox3; - GtkWidget *button3; - GtkWidget *button6; - GtkWidget *dialog1_action_area; - GtkWidget *button8; - GtkWidget *button7; - GtkWidget *label; - GtkWidget *hbox; - - GtkTreeViewColumn *column; - GtkCellRenderer *cr_text, *cr_pbuf, *cr_toggle; - - rd = g_new0(ReportDialog, 1); - - dialog = gtk_dialog_new(); - gtk_window_set_title(GTK_WINDOW(dialog), _("Generate Report")); - gtk_container_set_border_width(GTK_CONTAINER(dialog), 5); - gtk_window_set_default_size(GTK_WINDOW(dialog), 420, 260); - gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(parent)); - gtk_window_set_position(GTK_WINDOW(dialog), - GTK_WIN_POS_CENTER_ON_PARENT); - gtk_window_set_type_hint(GTK_WINDOW(dialog), - GDK_WINDOW_TYPE_HINT_DIALOG); - -#if GTK_CHECK_VERSION(2, 14, 0) - dialog1_vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); -#else - dialog1_vbox = GTK_DIALOG(dialog)->vbox; -#endif - gtk_box_set_spacing(GTK_BOX(dialog1_vbox), 5); - gtk_container_set_border_width(GTK_CONTAINER(dialog1_vbox), 4); - gtk_widget_show(dialog1_vbox); - -#if GTK_CHECK_VERSION(3, 0, 0) - hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5); -#else - hbox = gtk_hbox_new(FALSE, 5); -#endif - gtk_box_pack_start(GTK_BOX(dialog1_vbox), hbox, FALSE, FALSE, 0); - - label = gtk_label_new(_("<big><b>Generate Report</b></big>\n" - "Please choose the information that you wish " - "to view in your report:")); - gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); - gtk_label_set_use_markup(GTK_LABEL(label), TRUE); -#if GTK_CHECK_VERSION(3, 0, 0) - gtk_widget_set_valign(label, GTK_ALIGN_CENTER); -#else - gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); -#endif - - gtk_box_pack_start(GTK_BOX(hbox), - icon_cache_get_image("report-large.png"), - FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0); - gtk_widget_show_all(hbox); - -#if GTK_CHECK_VERSION(3, 0, 0) - hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5); -#else - hbox = gtk_hbox_new(FALSE, 5); -#endif - gtk_box_pack_start(GTK_BOX(dialog1_vbox), hbox, TRUE, TRUE, 0); - gtk_widget_show(hbox); - - scrolledwindow2 = gtk_scrolled_window_new(NULL, NULL); - gtk_widget_show(scrolledwindow2); - gtk_box_pack_start(GTK_BOX(hbox), scrolledwindow2, TRUE, TRUE, - 0); - gtk_widget_set_size_request(scrolledwindow2, -1, 200); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow2), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW - (scrolledwindow2), GTK_SHADOW_IN); - - treeview2 = gtk_tree_view_new_with_model(model); - gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview2), FALSE); - gtk_widget_show(treeview2); - gtk_container_add(GTK_CONTAINER(scrolledwindow2), treeview2); - - column = gtk_tree_view_column_new(); - gtk_tree_view_append_column(GTK_TREE_VIEW(treeview2), column); - - cr_toggle = gtk_cell_renderer_toggle_new(); - gtk_tree_view_column_pack_start(column, cr_toggle, FALSE); - g_signal_connect(cr_toggle, "toggled", - G_CALLBACK(report_dialog_sel_toggle), rd); - gtk_tree_view_column_add_attribute(column, cr_toggle, "active", - TREE_COL_SEL); - - cr_pbuf = gtk_cell_renderer_pixbuf_new(); - gtk_tree_view_column_pack_start(column, cr_pbuf, FALSE); - gtk_tree_view_column_add_attribute(column, cr_pbuf, "pixbuf", - TREE_COL_PBUF); - - cr_text = gtk_cell_renderer_text_new(); - gtk_tree_view_column_pack_start(column, cr_text, TRUE); - gtk_tree_view_column_add_attribute(column, cr_text, "markup", - TREE_COL_NAME); - -#if GTK_CHECK_VERSION(3, 0, 0) - vbuttonbox3 = gtk_button_box_new(GTK_ORIENTATION_VERTICAL); -#else - vbuttonbox3 = gtk_vbutton_box_new(); -#endif - gtk_widget_show(vbuttonbox3); - gtk_box_pack_start(GTK_BOX(hbox), vbuttonbox3, FALSE, TRUE, 0); - gtk_box_set_spacing(GTK_BOX(vbuttonbox3), 5); - gtk_button_box_set_layout(GTK_BUTTON_BOX(vbuttonbox3), - GTK_BUTTONBOX_START); - - button3 = gtk_button_new_with_mnemonic(_("Select _None")); - gtk_widget_show(button3); - gtk_container_add(GTK_CONTAINER(vbuttonbox3), button3); -#if GTK_CHECK_VERSION(2, 18, 0) - gtk_widget_set_can_default(button3, TRUE); -#else - GTK_WIDGET_SET_FLAGS(button3, GTK_CAN_DEFAULT); -#endif - g_signal_connect(button3, "clicked", - G_CALLBACK(report_dialog_sel_none), rd); - - button6 = gtk_button_new_with_mnemonic(_("Select _All")); - gtk_widget_show(button6); - gtk_container_add(GTK_CONTAINER(vbuttonbox3), button6); -#if GTK_CHECK_VERSION(2, 18, 0) - gtk_widget_set_can_default(button6, TRUE); -#else - GTK_WIDGET_SET_FLAGS(button6, GTK_CAN_DEFAULT); -#endif - g_signal_connect(button6, "clicked", G_CALLBACK(report_dialog_sel_all), - rd); - -#if GTK_CHECK_VERSION(2, 14, 0) -/* TODO:GTK3 - * [https://developer.gnome.org/gtk3/stable/GtkDialog.html#gtk-dialog-get-action-area] - * gtk_dialog_get_action_area has been deprecated since version 3.12 and should not be used in newly-written code. - * Direct access to the action area is discouraged; use gtk_dialog_add_button(), etc. - */ - dialog1_action_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); -#else - dialog1_action_area = GTK_DIALOG(dialog)->action_area; -#endif - gtk_widget_show(dialog1_action_area); - gtk_button_box_set_layout(GTK_BUTTON_BOX(dialog1_action_area), - GTK_BUTTONBOX_END); - - button8 = gtk_button_new_with_mnemonic(_("_Cancel")); - gtk_widget_show(button8); - gtk_dialog_add_action_widget(GTK_DIALOG(dialog), button8, - GTK_RESPONSE_CANCEL); -#if GTK_CHECK_VERSION(2, 18, 0) - gtk_widget_set_can_default(button8, TRUE); -#else - GTK_WIDGET_SET_FLAGS(button8, GTK_CAN_DEFAULT); -#endif - - button7 = gtk_button_new_with_mnemonic(_("_Generate")); - gtk_widget_show(button7); - gtk_dialog_add_action_widget(GTK_DIALOG(dialog), button7, - GTK_RESPONSE_ACCEPT); -#if GTK_CHECK_VERSION(2, 18, 0) - gtk_widget_set_can_default(button7, TRUE); -#else - GTK_WIDGET_SET_FLAGS(button7, GTK_CAN_DEFAULT); -#endif - - rd->dialog = dialog; - rd->btn_cancel = button8; - rd->btn_generate = button7; - rd->btn_sel_all = button6; - rd->btn_sel_none = button3; - rd->treeview = treeview2; - rd->model = model; - - gtk_tree_view_collapse_all(GTK_TREE_VIEW(treeview2)); - set_all_active(rd, TRUE); - - return rd; -} |