aboutsummaryrefslogtreecommitdiff
path: root/hardinfo2/report.c
diff options
context:
space:
mode:
authorLeandro A. F. Pereira <leandro@hardinfo.org>2006-11-19 19:38:31 +0000
committerLeandro A. F. Pereira <leandro@hardinfo.org>2006-11-19 19:38:31 +0000
commit5e7c1a3a03269b5088b26ecf9c676518d65a05e4 (patch)
treed4b9b5c0731a252954a897892633d1f7f6c8fbc4 /hardinfo2/report.c
parent8708504c28caeee4bd3e95b6b6d739970863f19c (diff)
Run hardinfo with the '-r' command-line parameter and you'll get a report in standard output. :)
Diffstat (limited to 'hardinfo2/report.c')
-rw-r--r--hardinfo2/report.c157
1 files changed, 108 insertions, 49 deletions
diff --git a/hardinfo2/report.c b/hardinfo2/report.c
index e3e28705..1c1e991c 100644
--- a/hardinfo2/report.c
+++ b/hardinfo2/report.c
@@ -250,51 +250,88 @@ report_text_key_value(ReportContext *ctx, gchar *key, gchar *value)
ctx->output = g_strdup_printf("%s%s\n", ctx->output, key);
}
-static void
-report_generate_child(ReportContext *ctx, GtkTreeIter *iter)
+static GSList *
+report_create_module_list_from_dialog(ReportDialog *rd)
{
- ShellModuleEntry *entry;
- gboolean selected;
-
- gtk_tree_model_get(ctx->rd->model, iter, TREE_COL_SEL, &selected, -1);
- if (!selected)
- return;
-
- gtk_tree_model_get(ctx->rd->model, iter, TREE_COL_DATA, &entry, -1);
-
- ctx->entry = entry;
+ ShellModule *module;
+ GSList *modules = NULL;
+ GtkTreeModel *model = rd->model;
+ GtkTreeIter iter;
- report_subtitle(ctx, entry->name);
- report_table(ctx, entry->func(entry->number));
-}
+ gtk_tree_model_get_iter_first(rd->model, &iter);
+ do {
+ gboolean selected;
+ gchar *name;
-static void
-report_generate_children(ReportContext *ctx, GtkTreeIter *iter)
-{
- GtkTreeModel *model = ctx->rd->model;
- 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;
- gtk_tree_model_get(model, iter, TREE_COL_SEL, &selected, -1);
- if (!selected)
- return;
+ 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_DATA, &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));
- gtk_tree_model_get(model, iter, TREE_COL_NAME, &name, -1);
- report_title(ctx, name);
-
- if (gtk_tree_model_iter_has_child(model, iter)) {
- gint children = gtk_tree_model_iter_n_children(model, iter);
- gint i;
+ return modules;
+}
- for (i = 0; i < children; i++) {
- GtkTreeIter child;
+static void
+report_create_inner_from_module_list(ReportContext *ctx, GSList *modules)
+{
+ for (; modules; modules = modules->next) {
+ ShellModule *module = (ShellModule *) modules->data;
+ GSList *entries;
+
+ report_title(ctx, module->name);
+
+ for (entries = module->entries; entries; entries = entries->next) {
+ ShellModuleEntry *entry = (ShellModuleEntry *) entries->data;
- gtk_tree_model_iter_nth_child(model, &child, iter, i);
- report_generate_child(ctx, &child);
+ ctx->entry = entry;
+ report_subtitle(ctx, entry->name);
+ report_table(ctx, entry->func(entry->number));
}
}
}
+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)
{
@@ -323,7 +360,7 @@ report_get_filename(void)
}
ReportContext*
-report_context_html_new(ReportDialog *rd)
+report_context_html_new()
{
ReportContext *ctx;
@@ -335,14 +372,13 @@ report_context_html_new(ReportDialog *rd)
ctx->subsubtitle = report_html_subsubtitle;
ctx->keyvalue = report_html_key_value;
- ctx->rd = rd;
ctx->output = g_strdup("");
return ctx;
}
ReportContext*
-report_context_text_new(ReportDialog *rd)
+report_context_text_new()
{
ReportContext *ctx;
@@ -354,7 +390,6 @@ report_context_text_new(ReportDialog *rd)
ctx->subsubtitle = report_text_subsubtitle;
ctx->keyvalue = report_text_key_value;
- ctx->rd = rd;
ctx->output = g_strdup("");
return ctx;
@@ -367,12 +402,42 @@ report_context_free(ReportContext *ctx)
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 *ctx;
+ gchar *retval;
+
+ if (format == REPORT_FORMAT_HTML)
+ ctx = report_context_html_new();
+ else
+ ctx = report_context_text_new();
+
+ report_create_from_module_list(ctx, modules);
+ retval = g_strdup(ctx->output);
+
+ report_context_free(ctx);
+
+ return retval;
+}
+
static gboolean
report_generate(ReportDialog *rd)
{
- GtkTreeIter iter;
+ GSList *modules;
ReportContext *ctx;
- ReportContext *(*create_context)(ReportDialog *rd);
+ ReportContext *(*create_context)();
gchar *file;
FILE *stream;
@@ -392,16 +457,10 @@ report_generate(ReportDialog *rd)
return FALSE;
}
- ctx = create_context(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);
+ ctx = create_context();
+ modules = report_create_module_list_from_dialog(rd);
+ report_create_from_module_list(ctx, modules);
fputs(ctx->output, stream);
fclose(stream);