diff options
-rw-r--r-- | hardinfo2/hardinfo.h | 3 | ||||
-rw-r--r-- | hardinfo2/report.c | 59 | ||||
-rw-r--r-- | hardinfo2/util.c | 15 |
3 files changed, 47 insertions, 30 deletions
diff --git a/hardinfo2/hardinfo.h b/hardinfo2/hardinfo.h index b497fcdb..afed5ca0 100644 --- a/hardinfo2/hardinfo.h +++ b/hardinfo2/hardinfo.h @@ -28,6 +28,7 @@ struct _FileTypes { gchar *name; gchar *mime_type; gchar *extension; + gpointer data; }; struct _ModuleEntry { @@ -46,6 +47,8 @@ inline gchar *size_human_readable(gfloat size); void file_chooser_add_filters(GtkWidget *chooser, FileTypes *filters); gchar *file_chooser_get_extension(GtkWidget *chooser, FileTypes *filters); gchar *file_chooser_build_filename(GtkWidget *chooser, gchar *extension); + + gpointer file_types_get_data_by_name(FileTypes *file_types, gchar *name); extern gchar* path_lib; extern gchar* path_data; diff --git a/hardinfo2/report.c b/hardinfo2/report.c index d20a8041..500a3536 100644 --- a/hardinfo2/report.c +++ b/hardinfo2/report.c @@ -25,6 +25,13 @@ 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) { @@ -287,14 +294,8 @@ report_generate_children(ReportContext *ctx, GtkTreeIter *iter) static gchar * report_get_filename(void) { - GtkFileFilter *filter; GtkWidget *dialog; gchar *filename = NULL; - static FileTypes file_types[] = { - { "HTML", "text/html", ".html" }, - { "Plain Text", "text/plain", ".txt" }, - { NULL, NULL, NULL } - }; dialog = gtk_file_chooser_dialog_new("Save File", NULL, @@ -302,10 +303,6 @@ report_get_filename(void) GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); -#if GTK_CHECK_VERSION(2,8,0) - gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), - TRUE); -#endif gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), "hardinfo report"); @@ -314,7 +311,6 @@ report_get_filename(void) 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); } @@ -372,6 +368,7 @@ report_generate(ReportDialog *rd) { GtkTreeIter iter; ReportContext *ctx; + ReportContext *(*ctx_gen)(ReportDialog *rd); gchar *file; FILE *stream; @@ -381,28 +378,30 @@ report_generate(ReportDialog *rd) if (!(stream = fopen(file, "w+"))) return FALSE; - if (g_str_has_suffix(file, ".html")) { - ctx = report_context_html_new(rd); - } else { - ctx = report_context_text_new(rd); - } - - report_header(ctx); - - gtk_tree_model_get_iter_first(rd->model, &iter); - do { - report_generate_children(ctx, &iter); - } while (gtk_tree_model_iter_next(rd->model, &iter)); + ctx_gen = file_types_get_data_by_name(file_types, file); + if (ctx_gen) { + ctx = ctx_gen(rd); + + report_header(ctx); + + gtk_tree_model_get_iter_first(rd->model, &iter); + do { + report_generate_children(ctx, &iter); + } while (gtk_tree_model_iter_next(rd->model, &iter)); - report_footer(ctx); - - fputs(ctx->output, stream); - fclose(stream); + report_footer(ctx); + + fputs(ctx->output, stream); + fclose(stream); + + report_context_free(ctx); + g_free(file); + + return TRUE; + } - report_context_free(ctx); g_free(file); - - return TRUE; + return FALSE; } void diff --git a/hardinfo2/util.c b/hardinfo2/util.c index 19102213..e39f02d9 100644 --- a/hardinfo2/util.c +++ b/hardinfo2/util.c @@ -97,6 +97,7 @@ __expand_cb(GtkWidget *widget, gpointer data) { if (GTK_IS_EXPANDER(widget)) { gtk_expander_set_expanded(GTK_EXPANDER(widget), TRUE); + gtk_widget_hide(widget); } else if (GTK_IS_CONTAINER(widget)) { gtk_container_forall(GTK_CONTAINER(widget), (GtkCallback)__expand_cb, NULL); } @@ -140,6 +141,20 @@ gchar return NULL; } +gpointer +file_types_get_data_by_name(FileTypes *filters, gchar *filename) +{ + gint i; + + for (i = 0; filters[i].name; i++) { + if (g_str_has_suffix(filename, filters[i].extension)) { + return filters[i].data; + } + } + + return NULL; +} + gchar *file_chooser_build_filename(GtkWidget *chooser, gchar *extension) { |