summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeandro A. F. Pereira <leandro@hardinfo.org>2006-10-25 14:21:04 +0000
committerLeandro A. F. Pereira <leandro@hardinfo.org>2006-10-25 14:21:04 +0000
commite5c7cba7ec1deb207ff5b6b93815d8d15e84d270 (patch)
treee546e8708ae156db0b8674bda92718b1285ee9f0
parentfd6337f2c940aa3aae42eb9952b32ca12f8b757d (diff)
More cleanups
-rw-r--r--hardinfo2/hardinfo.h3
-rw-r--r--hardinfo2/report.c59
-rw-r--r--hardinfo2/util.c15
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)
{