aboutsummaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
Diffstat (limited to 'shell')
-rw-r--r--shell/callbacks.c247
-rw-r--r--shell/iconcache.c100
-rw-r--r--shell/loadgraph-uber.c127
-rw-r--r--shell/loadgraph.c300
-rw-r--r--shell/menu.c166
-rw-r--r--shell/report.c963
-rw-r--r--shell/shell.c2051
-rw-r--r--shell/stock.c103
-rw-r--r--shell/syncmanager.c793
9 files changed, 0 insertions, 4850 deletions
diff --git a/shell/callbacks.c b/shell/callbacks.c
deleted file mode 100644
index 9bb5c990..00000000
--- a/shell/callbacks.c
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- * HardInfo - Displays System Information
- * Copyright (C) 2003-2009 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 <stdlib.h>
-#include <gtk/gtk.h>
-
-#include "hardinfo.h"
-#include "callbacks.h"
-#include "iconcache.h"
-
-#include "shell.h"
-#include "report.h"
-#include "syncmanager.h"
-#include "xmlrpc-server.h"
-
-#include "config.h"
-
-void cb_sync_manager()
-{
- Shell *shell = shell_get_main_shell();
-
- sync_manager_show(shell->window);
-}
-
-void cb_open_web_page()
-{
- open_url("http://www.hardinfo.org");
-}
-
-void cb_report_bug()
-{
- open_url("https://github.com/lpereira/hardinfo");
-}
-
-void cb_refresh()
-{
- shell_do_reload();
-}
-
-void cb_copy_to_clipboard()
-{
- ShellModuleEntry *entry = shell_get_main_shell()->selected;
-
- if (entry) {
- gchar *data = module_entry_function(entry);
- GtkClipboard *clip =
- gtk_clipboard_get(gdk_atom_intern("CLIPBOARD", FALSE));
- ReportContext *ctx = report_context_text_new(NULL);
-
- ctx->entry = entry;
-
- report_header(ctx);
- report_table(ctx, data);
- report_footer(ctx);
-
- gtk_clipboard_set_text(clip, ctx->output, -1);
-
- g_free(data);
- report_context_free(ctx);
- }
-}
-
-void cb_side_pane()
-{
- gboolean visible;
-
- visible = shell_action_get_active("SidePaneAction");
- shell_set_side_pane_visible(visible);
-}
-
-void cb_toolbar()
-{
- gboolean visible;
-
- visible = shell_action_get_active("ToolbarAction");
- shell_ui_manager_set_visible("/MainMenuBarAction", visible);
-}
-
-void cb_about_module(GtkAction * action)
-{
- Shell *shell = shell_get_main_shell();
- GSList *modules = shell->tree->modules;
- ModuleAbout *ma;
- gchar *name;
-
- g_object_get(G_OBJECT(action), "tooltip", &name, NULL);
-
- for (; modules; modules = modules->next) {
- ShellModule *sm = (ShellModule *) modules->data;
-
- if (!g_str_equal(sm->name, name))
- continue;
-
- if ((ma = module_get_about(sm))) {
- GtkWidget *about;
- gchar *text;
-
- about = gtk_about_dialog_new();
-
- gtk_window_set_transient_for(GTK_WINDOW(about), GTK_WINDOW(shell->window));
-
- text = g_strdup(sm->name);
-#if GTK_CHECK_VERSION(2, 12, 0)
- gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(about), text);
-#else
- gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(about), text);
-#endif
- g_free(text);
-
- gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(about),
- ma->version);
-
- text = g_strdup_printf(_("Written by %s\nLicensed under %s"),
- ma->author, ma->license);
- gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(about), text);
- g_free(text);
-
- if (ma->description)
- gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(about),
- _(ma->description));
-
- gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(about), sm->icon);
- gtk_dialog_run(GTK_DIALOG(about));
- gtk_widget_destroy(about);
- } else {
- g_warning
- (_("No about information is associated with the %s module."),
- name);
- }
-
- break;
- }
-
- g_free(name);
-}
-
-void cb_about()
-{
- Shell *shell = shell_get_main_shell();
- GtkWidget *about;
- gchar *copyright = NULL;
- const gchar *authors[] = {
- _("Author:"),
- "Leandro A. F. Pereira",
- "",
- _("Contributors:"),
- "Agney Lopes Roth Ferraz",
- "Andrey Esin",
- "Burt P.",
- "",
- _("Based on work by:"),
- _("MD5 implementation by Colin Plumb (see md5.c for details)"),
- _("SHA1 implementation by Steve Reid (see sha1.c for details)"),
- _("Blowfish implementation by Paul Kocher (see blowfich.c for details)"),
- _("Raytracing benchmark by John Walker (see fbench.c for details)"),
- _("FFT benchmark by Scott Robert Ladd (see fftbench.c for details)"),
- _("Some code partly based on x86cpucaps by Osamu Kayasono"),
- _("Vendor list based on GtkSysInfo by Pissens Sebastien"),
- _("DMI support based on code by Stewart Adam"),
- _("SCSI support based on code by Pascal F. Martin"),
- NULL
- };
- const gchar *artists[] = {
- "Jakub Szypulka",
- _("Tango Project"),
- _("The GNOME Project"),
- _("VMWare, Inc. (USB icon from VMWare Workstation 6)"),
- NULL
- };
-
- about = gtk_about_dialog_new();
- gtk_window_set_transient_for(GTK_WINDOW(about), GTK_WINDOW(shell->window));
-
-#if GTK_CHECK_VERSION(2, 12, 0)
- gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(about), "HardInfo");
-#else
- gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(about), "HardInfo");
-#endif
-
- copyright = g_strdup_printf("Copyright \302\251 2003-%d Leandro A. F. Pereira", HARDINFO_COPYRIGHT_LATEST_YEAR);
-
- gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(about), VERSION);
- gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(about), copyright);
- gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(about),
- _("System information and benchmark tool"));
- gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(about),
- icon_cache_get_pixbuf("logo.png"));
-
- gtk_about_dialog_set_license(GTK_ABOUT_DIALOG(about),
- _("HardInfo 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.\n\n"
- "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.\n\n"
- "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"));
- gtk_about_dialog_set_wrap_license(GTK_ABOUT_DIALOG(about), TRUE);
-
- gtk_about_dialog_set_authors(GTK_ABOUT_DIALOG(about), authors);
- gtk_about_dialog_set_artists(GTK_ABOUT_DIALOG(about), artists);
- gtk_about_dialog_set_translator_credits(GTK_ABOUT_DIALOG(about),
- _("translator-credits"));
-
- gtk_dialog_run(GTK_DIALOG(about));
- gtk_widget_destroy(about);
-
- g_free(copyright);
-}
-
-void cb_generate_report()
-{
- Shell *shell = shell_get_main_shell();
- gboolean btn_refresh = shell_action_get_enabled("RefreshAction");
- gboolean btn_copy = shell_action_get_enabled("CopyAction");
-
- report_dialog_show(shell->tree->model, shell->window);
-
- shell_action_set_enabled("RefreshAction", btn_refresh);
- shell_action_set_enabled("CopyAction", btn_copy);
-}
-
-void cb_quit(void)
-{
- do {
- gtk_main_quit();
- } while (gtk_main_level() > 1);
-
- exit(0);
-}
diff --git a/shell/iconcache.c b/shell/iconcache.c
deleted file mode 100644
index 74b19b0c..00000000
--- a/shell/iconcache.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * HardInfo - Displays System Information
- * Copyright (C) 2003-2007 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 <iconcache.h>
-#include <config.h>
-#include <hardinfo.h>
-
-static GHashTable *cache = NULL;
-
-void icon_cache_init(void)
-{
- if (!cache) {
- DEBUG("initializing icon cache");
- cache = g_hash_table_new(g_str_hash, g_str_equal);
- }
-}
-
-GdkPixbuf *icon_cache_get_pixbuf(const gchar * file)
-{
- GdkPixbuf *icon;
-
- if (!cache)
- icon_cache_init();
-
- icon = g_hash_table_lookup(cache, file);
-
- if (!icon) {
- gchar *path;
-
- path = g_build_filename(params.path_data, "pixmaps", file, NULL);
- icon = gdk_pixbuf_new_from_file(path, NULL);
- g_hash_table_insert(cache, g_strdup(file), icon);
-
- g_free(path);
- }
-
- if (icon) {
- g_object_ref(icon);
- }
-
- return icon;
-}
-
-GtkWidget *icon_cache_get_image(const gchar * file)
-{
- GdkPixbuf *icon;
-
- icon = icon_cache_get_pixbuf(file);
- return gtk_image_new_from_pixbuf(icon);
-}
-
-GdkPixbuf *icon_cache_get_pixbuf_at_size(const gchar * file, gint wid,
- gint hei)
-{
- GdkPixbuf *icon;
-
- if (!cache)
- icon_cache_init();
-
- icon = g_hash_table_lookup(cache, file);
-
- if (!icon) {
- gchar *path;
-
- path = g_build_filename(params.path_data, "pixmaps", file, NULL);
- icon = gdk_pixbuf_new_from_file_at_size(path, wid, hei, NULL);
- g_hash_table_insert(cache, g_strdup(file), icon);
-
- g_free(path);
- }
-
- if (icon) {
- g_object_ref(icon);
- }
-
- return icon;
-}
-
-GtkWidget *icon_cache_get_image_at_size(const gchar * file, gint wid,
- gint hei)
-{
- GdkPixbuf *icon;
-
- icon = icon_cache_get_pixbuf_at_size(file, wid, hei);
- return gtk_image_new_from_pixbuf(icon);
-}
diff --git a/shell/loadgraph-uber.c b/shell/loadgraph-uber.c
deleted file mode 100644
index 61964b37..00000000
--- a/shell/loadgraph-uber.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Christian Hergert's uber-graph (GPL3)
- * wrapped in an interface compatible with
- * Leandro A. F. Pereira's loadgraph (GPL2.1).
- */
-
-#include <string.h>
-#include "loadgraph.h"
-#include "uber.h"
-
-#define LG_MAX_LINES 9
-
-static const gchar *default_colors[] = { "#73d216",
- "#f57900",
- /*colors from simple.c sample */ "#3465a4",
- "#ef2929",
- "#75507b",
- "#ce5c00",
- "#c17d11",
- "#ce5c00",
- "#729fcf",
- NULL };
-
-struct _LoadGraph {
- GtkWidget *uber_widget;
- gdouble cur_value[LG_MAX_LINES];
- gint height;
-};
-
-gdouble
-_sample_func (UberLineGraph *graph,
- guint line,
- gpointer user_data)
-{
- LoadGraph *lg = (LoadGraph *)user_data;
- return lg->cur_value[line-1];
-}
-
-LoadGraph *load_graph_new(gint size)
-{
- LoadGraph *lg;
- GdkRGBA color;
- int i = 0;
-
- lg = g_new0(LoadGraph, 1);
- lg->uber_widget = uber_line_graph_new();
- lg->height = (size+1) * 2; /* idk */
- for (i = 0; i < LG_MAX_LINES; i++) {
- lg->cur_value[i] = UBER_LINE_GRAPH_NO_VALUE;
- //GtkWidget *label = uber_label_new();
- //uber_label_set_text(UBER_LABEL(label), "BLAH!");
- gdk_rgba_parse(&color, default_colors[i]);
- uber_line_graph_add_line(UBER_LINE_GRAPH(lg->uber_widget), &color, NULL); /* UBER_LABEL(label) */
- }
- uber_line_graph_set_autoscale(UBER_LINE_GRAPH(lg->uber_widget), TRUE);
- uber_line_graph_set_data_func(UBER_LINE_GRAPH(lg->uber_widget),
- (UberLineGraphFunc)_sample_func, (gpointer *)lg, NULL);
- return lg;
-}
-
-void load_graph_set_data_suffix(LoadGraph * lg, gchar * suffix)
-{
-
-}
-
-gchar *load_graph_get_data_suffix(LoadGraph * lg)
-{
- return strdup("");
-}
-
-GtkWidget *load_graph_get_framed(LoadGraph * lg)
-{
- if (lg != NULL)
- return lg->uber_widget;
- return NULL;
-}
-
-void load_graph_clear(LoadGraph * lg)
-{
- int i;
- if (lg != NULL) {
- for (i = 0; i < LG_MAX_LINES; i++) {
- lg->cur_value[i] = UBER_LINE_GRAPH_NO_VALUE;
- }
- uber_graph_scale_changed(lg->uber_widget);
- }
-}
-
-void load_graph_set_color(LoadGraph * lg, LoadGraphColor color)
-{
-
-}
-
-void load_graph_destroy(LoadGraph * lg)
-{
- if (lg != NULL) {
- g_object_unref(lg->uber_widget);
- g_free(lg);
- }
-}
-
-static gboolean _expose(GtkWidget * widget, GdkEventExpose * event, gpointer user_data)
-{
- return TRUE;
-}
-
-void load_graph_configure_expose(LoadGraph * lg)
-{
-
-}
-
-void load_graph_update_ex(LoadGraph *lg, guint line, gdouble value)
-{
- if (lg != NULL && line < LG_MAX_LINES)
- lg->cur_value[line] = value;
-}
-
-void load_graph_update(LoadGraph * lg, gdouble value)
-{
- load_graph_update_ex(lg, 0, value);
-}
-
-gint load_graph_get_height(LoadGraph *lg) {
- if (lg != NULL)
- return lg->height;
- return 0;
-}
diff --git a/shell/loadgraph.c b/shell/loadgraph.c
deleted file mode 100644
index ceb91720..00000000
--- a/shell/loadgraph.c
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
- * Simple Load Graph
- * Version 0.1 - Wed, Jan 11 2006
- * - initial release
- * Version 0.1.1 - Fri, Jan 13 2006
- * - fixes autoscaling
- * - add color
- *
- * Copyright (C) 2006 Leandro A. F. Pereira <leandro@hardinfo.org>
- *
- * The Simple Load Graph is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License, version 2.1, as published by the Free Software Foundation.
- *
- * The Simple Load Graph 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with the Simple Load Graph; if not, write to the Free
- * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- * 02111-1307 USA.
- */
-
-#include "loadgraph.h"
-
-struct _LoadGraph {
- GdkPixmap *buf;
- GdkGC *grid;
- GdkGC *trace;
- GdkGC *fill;
- GtkWidget *area;
-
- gint *data;
- gfloat scale;
-
- gint size;
- gint width, height;
- LoadGraphColor color;
-
- gint max_value, remax_count;
-
- PangoLayout *layout;
- gchar *suffix;
-};
-
-static void _draw(LoadGraph * lg);
-
-LoadGraph *load_graph_new(gint size)
-{
- LoadGraph *lg;
-
- lg = g_new0(LoadGraph, 1);
-
- size++;
-
- lg->suffix = g_strdup("");
- lg->area = gtk_drawing_area_new();
- lg->size = (size * 3) / 2;
- lg->data = g_new0(gint, lg->size);
-
- lg->scale = 1.0;
-
- lg->width = size * 6;
- lg->height = size * 2;
-
- lg->max_value = 1;
- lg->remax_count = 0;
-
- lg->layout = pango_layout_new(gtk_widget_get_pango_context(lg->area));
-
- gtk_widget_set_size_request(lg->area, lg->width, lg->height);
- gtk_widget_show(lg->area);
-
- return lg;
-}
-
-void load_graph_set_data_suffix(LoadGraph * lg, gchar * suffix)
-{
- g_free(lg->suffix);
- lg->suffix = g_strdup(suffix);
-}
-
-gchar *load_graph_get_data_suffix(LoadGraph * lg)
-{
- return lg->suffix;
-}
-
-GtkWidget *load_graph_get_framed(LoadGraph * lg)
-{
- GtkWidget *align, *frame;
-
- align = gtk_alignment_new(0.5, 0.5, 0, 0);
- gtk_widget_show(align);
-
- frame = gtk_frame_new(NULL);
- gtk_widget_show(frame);
- gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
-
- gtk_container_add(GTK_CONTAINER(align), frame);
- gtk_container_add(GTK_CONTAINER(frame), lg->area);
-
- return align;
-}
-
-void load_graph_clear(LoadGraph * lg)
-{
- gint i;
-
- for (i = 0; i < lg->size; i++)
- lg->data[i] = 0;
-
- lg->scale = 1.0;
- lg->max_value = 1;
- lg->remax_count = 0;
-
- _draw(lg);
-}
-
-void load_graph_set_color(LoadGraph * lg, LoadGraphColor color)
-{
- lg->color = color;
- gdk_rgb_gc_set_foreground(lg->trace, lg->color);
- gdk_rgb_gc_set_foreground(lg->fill, lg->color - 0x303030);
- gdk_rgb_gc_set_foreground(lg->grid, lg->color - 0xcdcdcd);
-}
-
-void load_graph_destroy(LoadGraph * lg)
-{
- g_free(lg->data);
- gtk_widget_destroy(lg->area);
- gdk_pixmap_unref(lg->buf);
- g_object_unref(lg->trace);
- g_object_unref(lg->grid);
- g_object_unref(lg->fill);
- g_object_unref(lg->layout);
- g_free(lg);
-}
-
-static gboolean _expose(GtkWidget * widget, GdkEventExpose * event,
- gpointer user_data)
-{
- LoadGraph *lg = (LoadGraph *) user_data;
- GdkDrawable *draw = GDK_DRAWABLE(lg->buf);
-
- gdk_draw_drawable(lg->area->window,
- lg->area->style->black_gc,
- draw, 0, 0, 0, 0, lg->width, lg->height);
- return FALSE;
-}
-
-void load_graph_configure_expose(LoadGraph * lg)
-{
- /* creates the backing store pixmap */
- gtk_widget_realize(lg->area);
- lg->buf = gdk_pixmap_new(lg->area->window, lg->width, lg->height, -1);
-
- /* create the graphic contexts */
- lg->grid = gdk_gc_new(GDK_DRAWABLE(lg->buf));
- lg->trace = gdk_gc_new(GDK_DRAWABLE(lg->buf));
- lg->fill = gdk_gc_new(GDK_DRAWABLE(lg->buf));
-
- /* the default color is green */
- load_graph_set_color(lg, LG_COLOR_GREEN);
-
- /* init graphic contexts */
- gdk_gc_set_line_attributes(lg->grid,
- 1, GDK_LINE_ON_OFF_DASH,
- GDK_CAP_NOT_LAST, GDK_JOIN_ROUND);
- gdk_gc_set_dashes(lg->grid, 0, (gint8*)"\2\2", 2);
-
- gdk_gc_set_line_attributes(lg->trace,
- 1, GDK_LINE_SOLID,
- GDK_CAP_PROJECTING, GDK_JOIN_ROUND);
-
- /* configures the expose event */
- g_signal_connect(G_OBJECT(lg->area), "expose-event",
- (GCallback) _expose, lg);
-}
-
-static void _draw_label_and_line(LoadGraph * lg, gint position, gint value)
-{
- gchar *tmp;
-
- /* draw lines */
- if (position > 0)
- gdk_draw_line(GDK_DRAWABLE(lg->buf), lg->grid, 0, position,
- lg->width, position);
- else
- position = -1 * position;
-
- /* draw label */
- tmp =
- g_strdup_printf("<span size=\"x-small\">%d%s</span>", value,
- lg->suffix);
-
- pango_layout_set_markup(lg->layout, tmp, -1);
- pango_layout_set_width(lg->layout,
- lg->area->allocation.width * PANGO_SCALE);
- gdk_draw_layout(GDK_DRAWABLE(lg->buf), lg->trace, 2, position,
- lg->layout);
-
- g_free(tmp);
-}
-
-static void _draw(LoadGraph * lg)
-{
- GdkDrawable *draw = GDK_DRAWABLE(lg->buf);
- gint i, d;
-
- /* clears the drawing area */
- gdk_draw_rectangle(draw, lg->area->style->black_gc,
- TRUE, 0, 0, lg->width, lg->height);
-
-
- /* the graph */
- GdkPoint *points = g_new0(GdkPoint, lg->size + 1);
-
- for (i = 0; i < lg->size; i++) {
- points[i].x = i * 4;
- points[i].y = lg->height - lg->data[i] * lg->scale;
- }
-
- points[0].x = points[1].x = 0;
- points[0].y = points[i].y = lg->height;
- points[i].x = points[i - 1].x = lg->width;
-
- gdk_draw_polygon(draw, lg->fill, TRUE, points, lg->size + 1);
- gdk_draw_polygon(draw, lg->trace, FALSE, points, lg->size + 1);
-
- g_free(points);
-
- /* vertical bars */
- for (i = lg->width, d = 0; i > 1; i--, d++)
- if ((d % 45) == 0 && d)
- gdk_draw_line(draw, lg->grid, i, 0, i, lg->height);
-
- /* horizontal bars and labels; 25%, 50% and 75% */
- _draw_label_and_line(lg, -1, lg->max_value);
- _draw_label_and_line(lg, lg->height / 4, 3 * (lg->max_value / 4));
- _draw_label_and_line(lg, lg->height / 2, lg->max_value / 2);
- _draw_label_and_line(lg, 3 * (lg->height / 4), lg->max_value / 4);
-
- gtk_widget_queue_draw(lg->area);
-}
-
-void load_graph_update_ex(LoadGraph *lg, guint line, gdouble value)
-{
- /* not implemented */
- if (line == 0)
- load_graph_update(lg, value);
-}
-
-void load_graph_update(LoadGraph * lg, gdouble v)
-{
- gint i;
- gint value = (gint)v;
-
- if (value < 0)
- return;
-
- /* shift-right our data */
- for (i = 0; i < lg->size - 1; i++) {
- lg->data[i] = lg->data[i + 1];
- }
-
- /* insert the updated value */
- lg->data[i] = value;
-
- /* calculates the maximum value */
- if (lg->remax_count++ > 20) {
- /* only finds the maximum amongst the data every 20 times */
- lg->remax_count = 0;
-
- gint max = lg->data[0];
- for (i = 1; i < lg->size; i++) {
- if (lg->data[i] > max)
- max = lg->data[i];
- }
-
- lg->max_value = max;
- } else {
- /* otherwise, select the maximum between the current maximum
- and the supplied value */
- lg->max_value = MAX(value, lg->max_value);
- }
-
- /* recalculates the scale; always use 90% of it */
- lg->scale = 0.90 * ((gfloat) lg->height / (gfloat) lg->max_value);
-
- /* redraw */
- _draw(lg);
-}
-
-gint load_graph_get_height(LoadGraph *lg) {
- if (lg != NULL)
- return lg->height;
- return 0;
-}
diff --git a/shell/menu.c b/shell/menu.c
deleted file mode 100644
index b0f01e58..00000000
--- a/shell/menu.c
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * HardInfo
- * Copyright(C) 2003-2007 Leandro A. F. Pereira.
- *
- * menu.c is based on UI Manager tutorial by Ryan McDougall
- * Copyright(C) 2005 Ryan McDougall.
- *
- * 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 Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include <gtk/gtk.h>
-#include <menu.h>
-#include <config.h>
-
-#include <stock.h>
-
-#include <callbacks.h>
-#include <hardinfo.h>
-
-
-#include "uidefs.h"
-
-static GtkActionEntry entries[] = {
- {"InformationMenuAction", NULL, N_("_Information")}, /* name, stock id, label */
- {"RemoteMenuAction", NULL, N_("_Remote")},
- {"ViewMenuAction", NULL, N_("_View")},
- {"HelpMenuAction", NULL, N_("_Help")},
- {"HelpMenuModulesAction", HI_STOCK_ABOUT_MODULES, N_("About _Modules")},
- {"MainMenuBarAction", NULL, ""},
-
- {"ReportAction", HI_STOCK_REPORT, /* name, stock id */
- N_("Generate _Report"), "<control>R", /* label, accelerator */
- NULL, /* tooltip */
- G_CALLBACK(cb_generate_report)},
-
- {"SyncManagerAction", HI_STOCK_SYNC_MENU,
- N_("_Network Updater..."), NULL,
- NULL,
- G_CALLBACK(cb_sync_manager)},
-
- {"OpenAction", "_Open",
- N_("_Open..."), NULL,
- NULL,
- G_CALLBACK(cb_sync_manager)},
-
- {"CopyAction", "_Copy",
- N_("_Copy to Clipboard"), "<control>C",
- N_("Copy to clipboard"),
- G_CALLBACK(cb_copy_to_clipboard)},
-
- {"RefreshAction", "_Refresh",
- N_("_Refresh"), "F5",
- NULL,
- G_CALLBACK(cb_refresh)},
-
- {"HomePageAction", HI_STOCK_INTERNET,
- N_("_Open HardInfo Web Site"), NULL,
- NULL,
- G_CALLBACK(cb_open_web_page)},
-
- {"ReportBugAction", HI_STOCK_INTERNET,
- N_("_Report bug"), NULL,
- NULL,
- G_CALLBACK(cb_report_bug)},
-
- {"AboutAction", "_About",
- N_("_About HardInfo"), NULL,
- N_("Displays program version information"),
- G_CALLBACK(cb_about)},
-
- {"QuitAction", "_Quit",
- N_("_Quit"), "<control>Q",
- NULL,
- G_CALLBACK(cb_quit)}
-};
-
-static GtkToggleActionEntry toggle_entries[] = {
- {"SidePaneAction", NULL,
- N_("_Side Pane"), NULL,
- N_("Toggles side pane visibility"),
- G_CALLBACK(cb_side_pane)},
- {"ToolbarAction", NULL,
- N_("_Toolbar"), NULL,
- NULL,
- G_CALLBACK(cb_toolbar)},
-};
-
-/* Implement a handler for GtkUIManager's "add_widget" signal. The UI manager
- * will emit this signal whenever it needs you to place a new widget it has. */
-static void
-menu_add_widget(GtkUIManager * ui, GtkWidget * widget,
- GtkContainer * container)
-{
- gtk_box_pack_start(GTK_BOX(container), widget, FALSE, FALSE, 0);
- gtk_widget_show(widget);
-}
-
-void menu_init(Shell * shell)
-{
- GtkWidget *menu_box; /* Packing box for the menu and toolbars */
- GtkActionGroup *action_group; /* Packing group for our Actions */
- GtkUIManager *menu_manager; /* The magic widget! */
- GError *error; /* For reporting exceptions or errors */
- GtkAccelGroup *accel_group;
-
- /* Create our objects */
- menu_box = shell->vbox;
- action_group = gtk_action_group_new("HardInfo");
- menu_manager = gtk_ui_manager_new();
-
- shell->action_group = action_group;
- shell->ui_manager = menu_manager;
-
- /* Pack up our objects:
- * menu_box -> window
- * actions -> action_group
- * action_group -> menu_manager */
- gtk_action_group_set_translation_domain( action_group, "hardinfo" );//gettext
- gtk_action_group_add_actions(action_group, entries,
- G_N_ELEMENTS(entries), NULL);
- gtk_action_group_add_toggle_actions(action_group, toggle_entries,
- G_N_ELEMENTS(toggle_entries),
- NULL);
- gtk_ui_manager_insert_action_group(menu_manager, action_group, 0);
-
-
- /* Read in the UI from our XML file */
- error = NULL;
- gtk_ui_manager_add_ui_from_string(menu_manager, uidefs_str, -1,
- &error);
-
- if (error) {
- g_error("Building menus failed: %s", error->message);
- g_error_free(error);
- return;
- }
-
- /* Enable menu accelerators */
- accel_group = gtk_ui_manager_get_accel_group(menu_manager);
- gtk_window_add_accel_group(GTK_WINDOW(shell->window), accel_group);
-
- /* Connect up important signals */
- /* This signal is necessary in order to place widgets from the UI manager
- * into the menu_box */
- g_signal_connect(menu_manager, "add_widget",
- G_CALLBACK(menu_add_widget), menu_box);
-
- /* Show the window and run the main loop, we're done! */
- gtk_widget_show(menu_box);
-
- gtk_toolbar_set_style(GTK_TOOLBAR
- (gtk_ui_manager_get_widget
- (shell->ui_manager, "/MainMenuBarAction")),
- GTK_TOOLBAR_BOTH_HORIZ);
-}
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;
-}
diff --git a/shell/shell.c b/shell/shell.c
deleted file mode 100644
index 8688f9ac..00000000
--- a/shell/shell.c
+++ /dev/null
@@ -1,2051 +0,0 @@
-/*
- * HardInfo - Displays System Information
- * Copyright (C) 2003-2007 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 <stdlib.h>
-#include <string.h>
-
-#include <gtk/gtk.h>
-#include <glib/gstdio.h>
-
-#include "config.h"
-
-#include "hardinfo.h"
-
-#include "shell.h"
-#include "syncmanager.h"
-#include "iconcache.h"
-#include "menu.h"
-#include "stock.h"
-
-#include "callbacks.h"
-
-/*
- * Internal Prototypes ********************************************************
- */
-
-static void create_window();
-static ShellTree *tree_new(void);
-static ShellInfoTree *info_tree_new(gboolean extra);
-
-static void module_selected(gpointer data);
-static void module_selected_show_info(ShellModuleEntry * entry,
- gboolean reload);
-static void info_selected(GtkTreeSelection * ts, gpointer data);
-static void info_selected_show_extra(gchar * data);
-static gboolean reload_section(gpointer data);
-static gboolean rescan_section(gpointer data);
-static gboolean update_field(gpointer data);
-
-/*
- * Globals ********************************************************************
- */
-
-static Shell *shell = NULL;
-static GHashTable *update_tbl = NULL;
-static GSList *update_sfusrc = NULL;
-
-/*
- * Code :) ********************************************************************
- */
-
-Shell *shell_get_main_shell(void)
-{
- return shell;
-}
-
-void shell_ui_manager_set_visible(const gchar * path, gboolean setting)
-{
- GtkWidget *widget;
-
- if (!params.gui_running)
- return;
-
- widget = gtk_ui_manager_get_widget(shell->ui_manager, path);
- if (!widget)
- return;
-
- if (setting)
- gtk_widget_show(widget);
- else
- gtk_widget_hide(widget);
-}
-
-void shell_clear_tree_models(Shell *shell)
-{
- gtk_tree_store_clear(GTK_TREE_STORE(shell->tree->model));
- gtk_tree_store_clear(GTK_TREE_STORE(shell->info->model));
- gtk_tree_store_clear(GTK_TREE_STORE(shell->moreinfo->model));
- gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(shell->info->view), FALSE);
-}
-
-void shell_clear_timeouts(Shell *shell)
-{
- h_hash_table_remove_all(update_tbl);
-}
-
-void shell_action_set_property(const gchar * action_name,
- const gchar * property, gboolean setting)
-{
- GtkAction *action;
-
- if (!params.gui_running)
- return;
-
- action = gtk_action_group_get_action(shell->action_group, action_name);
- if (action) {
- GValue value = { 0 };
-
- g_value_init(&value, G_TYPE_BOOLEAN);
- g_value_set_boolean(&value, setting);
-
- g_object_set_property(G_OBJECT(action), property, &value);
-
- g_value_unset(&value);
- }
-}
-
-void shell_action_set_label(const gchar * action_name, gchar * label)
-{
-#if GTK_CHECK_VERSION(2,16,0)
- if (params.gui_running && shell->action_group) {
- GtkAction *action;
-
- action =
- gtk_action_group_get_action(shell->action_group, action_name);
- if (action) {
- gtk_action_set_label(action, label);
- }
- }
-#endif
-}
-
-void shell_action_set_enabled(const gchar * action_name, gboolean setting)
-{
- if (params.gui_running && shell->action_group) {
- GtkAction *action;
-
- action =
- gtk_action_group_get_action(shell->action_group, action_name);
- if (action) {
- gtk_action_set_sensitive(action, setting);
- }
- }
-}
-
-gboolean shell_action_get_enabled(const gchar * action_name)
-{
- GtkAction *action;
-
- if (!params.gui_running)
- return FALSE;
-
- action = gtk_action_group_get_action(shell->action_group, action_name);
- if (action) {
- return gtk_action_get_sensitive(action);
- }
-
- return FALSE;
-}
-
-void shell_set_side_pane_visible(gboolean setting)
-{
- if (!params.gui_running)
- return;
-
- if (setting)
- gtk_widget_show(shell->tree->scroll);
- else
- gtk_widget_hide(shell->tree->scroll);
-}
-
-gboolean shell_action_get_active(const gchar * action_name)
-{
- GtkAction *action;
- GSList *proxies;
-
- /* FIXME: Ugh. Are you sure there isn't any simpler way? O_o */
- if (!params.gui_running)
- return FALSE;
-
- action = gtk_action_group_get_action(shell->action_group, action_name);
- if (action) {
- proxies = gtk_action_get_proxies(action);
-
- for (; proxies; proxies = proxies->next) {
- GtkWidget *widget = (GtkWidget *) proxies->data;
-
- if (GTK_IS_CHECK_MENU_ITEM(widget)) {
- return
- gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM
- (widget));
- }
- }
- }
-
- return FALSE;
-}
-
-void shell_action_set_active(const gchar * action_name, gboolean setting)
-{
- GtkAction *action;
- GSList *proxies;
-
- /* FIXME: Ugh. Are you sure there isn't any simpler way? O_o */
- if (!params.gui_running)
- return;
-
- action = gtk_action_group_get_action(shell->action_group, action_name);
- if (action) {
- proxies = gtk_action_get_proxies(action);
-
- for (; proxies; proxies = proxies->next) {
- GtkWidget *widget = (GtkWidget *) proxies->data;
-
- if (GTK_IS_CHECK_MENU_ITEM(widget)) {
- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget),
- setting);
- return;
- }
- }
- }
-}
-
-void shell_status_pulse(void)
-{
- if (params.gui_running) {
- if (shell->_pulses++ == 5) {
- /* we're pulsing for some time, disable the interface and change the cursor
- to a hourglass */
- shell_view_set_enabled(FALSE);
- }
-
- gtk_progress_bar_pulse(GTK_PROGRESS_BAR(shell->progress));
- while (gtk_events_pending())
- gtk_main_iteration();
- } else {
- static gint counter = 0;
-
- fprintf(stderr, "\033[2K\033[40;37;1m %c\033[0m\r",
- "|/-\\"[counter++ % 4]);
- }
-}
-
-void shell_status_set_percentage(gint percentage)
-{
- if (params.gui_running) {
- gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(shell->progress),
- (float) percentage / 100.0);
- while (gtk_events_pending())
- gtk_main_iteration();
- } else {
- if (percentage < 1 || percentage >= 100) {
- fprintf(stderr, "\033[2K");
- } else {
- gchar pbar[] = "----------";
-
- memset(pbar, '#', percentage / 10);
-
- fprintf(stderr, "\r\033[40;37;1m%3d%% \033[40;34;1m"
- "%s\033[0m\r", percentage, pbar);
- }
- }
-}
-
-void shell_view_set_enabled(gboolean setting)
-{
- if (!params.gui_running)
- return;
-
- if (setting) {
- shell->_pulses = 0;
- widget_set_cursor(shell->window, GDK_LEFT_PTR);
- } else {
- widget_set_cursor(shell->window, GDK_WATCH);
- }
-
- gtk_widget_set_sensitive(shell->hpaned, setting);
- shell_action_set_enabled("ViewMenuAction", setting);
- shell_action_set_enabled("ConnectToAction", setting);
- shell_action_set_enabled("RefreshAction", setting);
- shell_action_set_enabled("CopyAction", setting);
- shell_action_set_enabled("ReportAction", setting);
- shell_action_set_enabled("SyncManagerAction", setting && sync_manager_count_entries() > 0);
-
-}
-
-void shell_status_set_enabled(gboolean setting)
-{
- if (!params.gui_running)
- return;
-
- if (setting)
- gtk_widget_show(shell->progress);
- else {
- gtk_widget_hide(shell->progress);
- shell_view_set_enabled(TRUE);
-
- shell_status_update(_("Done."));
- }
-}
-
-void shell_do_reload(void)
-{
- if (!params.gui_running || !shell->selected)
- return;
-
- shell_action_set_enabled("RefreshAction", FALSE);
- shell_action_set_enabled("CopyAction", FALSE);
- shell_action_set_enabled("ReportAction", FALSE);
-
- shell_status_set_enabled(TRUE);
-
- module_entry_reload(shell->selected);
- module_selected(NULL);
-
- shell_action_set_enabled("RefreshAction", TRUE);
- shell_action_set_enabled("CopyAction", TRUE);
- shell_action_set_enabled("ReportAction", TRUE);
-}
-
-void shell_status_update(const gchar * message)
-{
- if (params.gui_running) {
- gtk_label_set_markup(GTK_LABEL(shell->status), message);
- gtk_progress_bar_pulse(GTK_PROGRESS_BAR(shell->progress));
- while (gtk_events_pending())
- gtk_main_iteration();
- } else {
- fprintf(stderr, "\033[2K\033[40;37;1m %s\033[0m\r", message);
- }
-}
-
-static void destroy_me(void)
-{
- cb_quit();
-}
-
-static void close_note(GtkWidget * widget, gpointer user_data)
-{
- gtk_widget_hide(shell->note->event_box);
-}
-
-static ShellNote *note_new(void)
-{
- ShellNote *note;
- GtkWidget *hbox, *icon, *button;
- GtkWidget *border_box;
- /* colors stolen from gtkinfobar.c */
- GdkColor info_default_border_color = { 0, 0xb800, 0xad00, 0x9d00 };
- GdkColor info_default_fill_color = { 0, 0xff00, 0xff00, 0xbf00 };
-
- note = g_new0(ShellNote, 1);
- note->label = gtk_label_new("");
- note->event_box = gtk_event_box_new();
- button = gtk_button_new();
-
- border_box = gtk_event_box_new();
- gtk_container_set_border_width(GTK_CONTAINER(border_box), 1);
- gtk_container_add(GTK_CONTAINER(note->event_box), border_box);
- gtk_widget_show(border_box);
-
-#if GTK_CHECK_VERSION(3, 0, 0)
- /* TODO:GTK3 css-based style */
-#else
- gtk_widget_modify_bg(border_box, GTK_STATE_NORMAL, &info_default_fill_color);
- gtk_widget_modify_bg(note->event_box, GTK_STATE_NORMAL, &info_default_border_color);
-#endif
-
- icon = icon_cache_get_image("close.png");
- gtk_widget_show(icon);
- gtk_container_add(GTK_CONTAINER(button), icon);
- gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
- g_signal_connect(G_OBJECT(button), "clicked", (GCallback) close_note,
- NULL);
-
-#if GTK_CHECK_VERSION(3, 0, 0)
- hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3);
-#else
- hbox = gtk_hbox_new(FALSE, 3);
-#endif
- icon = icon_cache_get_image("dialog-information.png");
-
- gtk_box_pack_start(GTK_BOX(hbox), icon, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(hbox), note->label, FALSE, FALSE, 0);
- gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
-
- gtk_container_set_border_width(GTK_CONTAINER(hbox), 2);
- gtk_container_add(GTK_CONTAINER(border_box), hbox);
- gtk_widget_show_all(hbox);
-
- return note;
-}
-
-void shell_set_title(Shell *shell, gchar *subtitle)
-{
- if (subtitle) {
- gchar *tmp;
-
- tmp = g_strdup_printf(_("%s - System Information"), subtitle);
- gtk_window_set_title(GTK_WINDOW(shell->window), tmp);
-
- g_free(tmp);
- } else {
- gtk_window_set_title(GTK_WINDOW(shell->window), _("System Information"));
- }
-}
-
-static void create_window(void)
-{
- GtkWidget *vbox, *hbox;
-
- shell = g_new0(Shell, 1);
-
- shell->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_icon(GTK_WINDOW(shell->window),
- icon_cache_get_pixbuf("logo.png"));
- shell_set_title(shell, NULL);
- gtk_window_set_default_size(GTK_WINDOW(shell->window), 800, 600);
- g_signal_connect(G_OBJECT(shell->window), "destroy", destroy_me, NULL);
-
-#if GTK_CHECK_VERSION(3, 0, 0)
- vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
-#else
- vbox = gtk_vbox_new(FALSE, 0);
-#endif
- gtk_widget_show(vbox);
- gtk_container_add(GTK_CONTAINER(shell->window), vbox);
- shell->vbox = vbox;
-
- menu_init(shell);
-
-#if GTK_CHECK_VERSION(3, 0, 0)
- hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
-#else
- hbox = gtk_hbox_new(FALSE, 5);
-#endif
- gtk_widget_show(hbox);
- gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, FALSE, 3);
-
- shell->progress = gtk_progress_bar_new();
- gtk_widget_set_size_request(shell->progress, 80, 10);
- gtk_widget_hide(shell->progress);
- gtk_box_pack_end(GTK_BOX(hbox), shell->progress, FALSE, FALSE, 5);
-
- shell->status = gtk_label_new("");
-#if GTK_CHECK_VERSION(3, 0, 0)
- gtk_widget_set_valign(GTK_WIDGET(shell->status), GTK_ALIGN_CENTER);
-#else
- gtk_misc_set_alignment(GTK_MISC(shell->status), 0.0, 0.5);
-#endif
- gtk_widget_show(shell->status);
- gtk_box_pack_start(GTK_BOX(hbox), shell->status, FALSE, FALSE, 5);
-
-#if GTK_CHECK_VERSION(3, 0, 0)
- shell->hpaned = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
-#else
- shell->hpaned = gtk_hpaned_new();
-#endif
- gtk_widget_show(shell->hpaned);
- gtk_box_pack_end(GTK_BOX(vbox), shell->hpaned, TRUE, TRUE, 0);
- gtk_paned_set_position(GTK_PANED(shell->hpaned), 210);
-
-#if GTK_CHECK_VERSION(3, 0, 0)
- vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
-#else
- vbox = gtk_vbox_new(FALSE, 5);
-#endif
- gtk_widget_show(vbox);
- gtk_paned_add2(GTK_PANED(shell->hpaned), vbox);
-
- shell->note = note_new();
- gtk_box_pack_end(GTK_BOX(vbox), shell->note->event_box, FALSE, FALSE, 0);
-
-#if GTK_CHECK_VERSION(3, 0, 0)
- shell->vpaned = gtk_paned_new(GTK_ORIENTATION_VERTICAL);
-#else
- shell->vpaned = gtk_vpaned_new();
-#endif
- gtk_box_pack_start(GTK_BOX(vbox), shell->vpaned, TRUE, TRUE, 0);
- gtk_widget_show(shell->vpaned);
-
- shell->notebook = gtk_notebook_new();
- gtk_paned_add2(GTK_PANED(shell->vpaned), shell->notebook);
-
- gtk_widget_show(shell->window);
- while (gtk_events_pending())
- gtk_main_iteration();
-}
-
-static void view_menu_select_entry(gpointer data, gpointer data2)
-{
- GtkTreePath *path;
- GtkTreeIter *iter = (GtkTreeIter *) data2;
-
- path = gtk_tree_model_get_path(shell->tree->model, iter);
-
- gtk_tree_selection_select_path(shell->tree->selection, path);
- gtk_tree_view_set_cursor(GTK_TREE_VIEW(shell->tree->view), path, NULL,
- FALSE);
- gtk_tree_path_free(path);
-}
-
-static void menu_item_set_icon_always_visible(Shell *shell,
- gchar *parent_path,
- gchar *item_id)
-{
- GtkWidget *menuitem;
- gchar *path;
-
- path = g_strdup_printf("%s/%s", parent_path, item_id);
- menuitem = gtk_ui_manager_get_widget(shell->ui_manager, path);
-#if GTK_CHECK_VERSION(3, 0, 0)
-#else
- gtk_image_menu_item_set_always_show_image(GTK_IMAGE_MENU_ITEM(menuitem), TRUE);
-#endif
- g_free(path);
-}
-
-static void add_module_to_menu(gchar * name, GdkPixbuf * pixbuf)
-{
- GtkAction *action;
- GtkWidget *menuitem;
- gchar *about_module = g_strdup_printf("AboutModule%s", name);
- gchar *path;
- gint merge_id;
-
- GtkActionEntry entries[] = {
- {
- name, /* name */
- name, /* stockid */
- name, /* label */
- NULL, /* accelerator */
- NULL, /* tooltip */
- NULL, /* callback */
- },
- {
- about_module,
- name,
- name,
- NULL,
- name,
- (GCallback) cb_about_module,
- },
- };
-
- stock_icon_register_pixbuf(pixbuf, name);
-
- if ((action = gtk_action_group_get_action(shell->action_group, name))) {
- gtk_action_group_remove_action(shell->action_group, action);
- }
-
- if ((action = gtk_action_group_get_action(shell->action_group, about_module))) {
- gtk_action_group_remove_action(shell->action_group, action);
- }
-
- gtk_action_group_add_actions(shell->action_group, entries, 2, NULL);
-
- merge_id = gtk_ui_manager_new_merge_id(shell->ui_manager);
- gtk_ui_manager_add_ui(shell->ui_manager,
- merge_id,
- "/menubar/ViewMenu/LastSep",
- name, name, GTK_UI_MANAGER_MENU, TRUE);
- shell->merge_ids = g_slist_prepend(shell->merge_ids, GINT_TO_POINTER(merge_id));
-
- merge_id = gtk_ui_manager_new_merge_id(shell->ui_manager);
- gtk_ui_manager_add_ui(shell->ui_manager,
- merge_id,
- "/menubar/HelpMenu/HelpMenuModules/LastSep",
- about_module, about_module, GTK_UI_MANAGER_AUTO,
- TRUE);
- shell->merge_ids = g_slist_prepend(shell->merge_ids, GINT_TO_POINTER(merge_id));
-
- menu_item_set_icon_always_visible(shell, "/menubar/ViewMenu", name);
-}
-
-static void
-add_module_entry_to_view_menu(gchar * module, gchar * name,
- GdkPixbuf * pixbuf, GtkTreeIter * iter)
-{
- GtkAction *action;
- GtkWidget *menuitem;
- gint merge_id;
- gchar *path;
- GtkActionEntry entry = {
- name, /* name */
- name, /* stockid */
- name, /* label */
- NULL, /* accelerator */
- NULL, /* tooltip */
- (GCallback) view_menu_select_entry, /* callback */
- };
-
- stock_icon_register_pixbuf(pixbuf, name);
-
- if ((action = gtk_action_group_get_action(shell->action_group, name))) {
- gtk_action_group_remove_action(shell->action_group, action);
- }
-
- gtk_action_group_add_actions(shell->action_group, &entry, 1, iter);
-
- merge_id = gtk_ui_manager_new_merge_id(shell->ui_manager);
- path = g_strdup_printf("/menubar/ViewMenu/%s", module);
- gtk_ui_manager_add_ui(shell->ui_manager,
- merge_id,
- path,
- name, name, GTK_UI_MANAGER_AUTO, FALSE);
- shell->merge_ids = g_slist_prepend(shell->merge_ids, GINT_TO_POINTER(merge_id));
-
- menu_item_set_icon_always_visible(shell, path, name);
-
- g_free(path);
-}
-
-void shell_add_modules_to_gui(gpointer _shell_module, gpointer _shell_tree)
-{
- ShellModule *module = (ShellModule *) _shell_module;
- ShellTree *shelltree = (ShellTree *) _shell_tree;
- GtkTreeStore *store = GTK_TREE_STORE(shelltree->model);
- GtkTreeIter parent;
-
- if (!module) {
- return;
- }
-
- gtk_tree_store_append(store, &parent, NULL);
- gtk_tree_store_set(store, &parent,
- TREE_COL_NAME, module->name,
- TREE_COL_MODULE, module,
- TREE_COL_MODULE_ENTRY, NULL,
- TREE_COL_SEL, FALSE,
- -1);
-
- if (module->icon) {
- gtk_tree_store_set(store, &parent, TREE_COL_PBUF, module->icon,
- -1);
- }
-
- add_module_to_menu(module->name, module->icon);
-
- if (module->entries) {
- ShellModuleEntry *entry;
- GSList *p;
-
- for (p = module->entries; p; p = g_slist_next(p)) {
- GtkTreeIter child;
- entry = (ShellModuleEntry *) p->data;
-
- gtk_tree_store_append(store, &child, &parent);
- gtk_tree_store_set(store, &child, TREE_COL_NAME, entry->name,
- TREE_COL_MODULE_ENTRY, entry,
- TREE_COL_SEL, FALSE, -1);
-
- if (entry->icon) {
- gtk_tree_store_set(store, &child, TREE_COL_PBUF,
- entry->icon, -1);
- }
-
- add_module_entry_to_view_menu(module->name, entry->name,
- entry->icon,
- gtk_tree_iter_copy(&child));
-
- shell_status_pulse();
- }
-
- }
-}
-
-static void __tree_iter_destroy(gpointer data)
-{
- gtk_tree_iter_free((GtkTreeIter *) data);
-}
-
-ShellSummary *summary_new(void)
-{
- ShellSummary *summary;
-
- summary = g_new0(ShellSummary, 1);
- summary->scroll = gtk_scrolled_window_new(NULL, NULL);
-#if GTK_CHECK_VERSION(3, 0, 0)
- summary->view = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
-#else
- summary->view = gtk_vbox_new(FALSE, 5);
-#endif
- summary->items = NULL;
-
- gtk_container_set_border_width(GTK_CONTAINER(summary->view), 6);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(summary->scroll),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
-#if GTK_CHECK_VERSION(3, 0, 0)
- gtk_container_add(GTK_CONTAINER(summary->scroll),
- summary->view);
-#else
- gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(summary->scroll),
- summary->view);
-#endif
- gtk_widget_show_all(summary->scroll);
-
- return summary;
-}
-
-static gboolean
-select_first_tree_item(gpointer data)
-{
- GtkTreeIter first;
-
- if (gtk_tree_model_get_iter_first(shell->tree->model, &first))
- gtk_tree_selection_select_iter(shell->tree->selection, &first);
-
- return FALSE;
-}
-
-void shell_init(GSList * modules)
-{
- if (shell) {
- g_error("Shell already created");
- return;
- }
-
- DEBUG("initializing shell");
-
- create_window();
-
- shell_action_set_property("ConnectToAction", "is-important", TRUE);
- shell_action_set_property("CopyAction", "is-important", TRUE);
- shell_action_set_property("RefreshAction", "is-important", TRUE);
- shell_action_set_property("ReportAction", "is-important", TRUE);
- shell_action_set_property("ReportBugAction", "is-important", TRUE);
-
- shell->tree = tree_new();
- shell->info = info_tree_new(FALSE);
- shell->moreinfo = info_tree_new(TRUE);
- shell->loadgraph = load_graph_new(75);
- shell->summary = summary_new();
-
- update_tbl = g_hash_table_new_full(g_str_hash, g_str_equal,
- g_free, __tree_iter_destroy);
-
- gtk_paned_pack1(GTK_PANED(shell->hpaned), shell->tree->scroll,
- SHELL_PACK_RESIZE, SHELL_PACK_SHRINK);
- gtk_paned_pack1(GTK_PANED(shell->vpaned), shell->info->scroll,
- SHELL_PACK_RESIZE, SHELL_PACK_SHRINK);
-
- gtk_notebook_append_page(GTK_NOTEBOOK(shell->notebook),
- shell->moreinfo->scroll, NULL);
- gtk_notebook_append_page(GTK_NOTEBOOK(shell->notebook),
- load_graph_get_framed(shell->loadgraph),
- NULL);
- gtk_notebook_append_page(GTK_NOTEBOOK(shell->notebook),
- shell->summary->scroll, NULL);
-
- gtk_notebook_set_show_tabs(GTK_NOTEBOOK(shell->notebook), FALSE);
- gtk_notebook_set_show_border(GTK_NOTEBOOK(shell->notebook), FALSE);
-
- shell_status_set_enabled(TRUE);
- shell_status_update(_("Loading modules..."));
-
- shell->tree->modules = modules ? modules : modules_load_all();
-
- g_slist_foreach(shell->tree->modules, shell_add_modules_to_gui, shell->tree);
- gtk_tree_view_expand_all(GTK_TREE_VIEW(shell->tree->view));
-
- gtk_widget_show_all(shell->hpaned);
-
- load_graph_configure_expose(shell->loadgraph);
- gtk_widget_hide(shell->notebook);
- gtk_widget_hide(shell->note->event_box);
-
- shell_status_update(_("Done."));
- shell_status_set_enabled(FALSE);
-
- shell_action_set_enabled("RefreshAction", FALSE);
- shell_action_set_enabled("CopyAction", FALSE);
- shell_action_set_active("SidePaneAction", TRUE);
- shell_action_set_active("ToolbarAction", TRUE);
-
-#ifndef HAS_LIBSOUP
- shell_action_set_enabled("SyncManagerAction", FALSE);
-#else
- shell_action_set_enabled("SyncManagerAction", sync_manager_count_entries() > 0);
-#endif
-
- /* Should select Computer Summary (note: not Computer/Summary) */
- g_idle_add(select_first_tree_item, NULL);
-}
-
-static gboolean update_field(gpointer data)
-{
- ShellFieldUpdate *fu;
- GtkTreeIter *iter;
-
- fu = (ShellFieldUpdate *) data;
- g_return_val_if_fail(fu != NULL, FALSE);
-
- DEBUG("update_field [%s]", fu->field_name);
-
- iter = g_hash_table_lookup(update_tbl, fu->field_name);
- if (!iter) {
- return FALSE;
- }
-
- /* if the entry is still selected, update it */
- if (iter && fu->entry->selected && fu->entry->fieldfunc) {
- GtkTreeStore *store = GTK_TREE_STORE(shell->info->model);
- gchar *value = fu->entry->fieldfunc(fu->field_name);
-
- /*
- * this function is also used to feed the load graph when ViewType
- * is SHELL_VIEW_LOAD_GRAPH
- */
- if (shell->view_type == SHELL_VIEW_LOAD_GRAPH &&
- gtk_tree_selection_iter_is_selected(shell->info->selection,
- iter)) {
- load_graph_update(shell->loadgraph, atof(value));
- }
-
- gtk_tree_store_set(store, iter, INFO_TREE_COL_VALUE, value, -1);
-
- g_free(value);
- return TRUE;
- }
-
- if (update_sfusrc) {
- GSList *sfu;
-
- for (sfu = update_sfusrc; sfu; sfu = sfu->next) {
- g_free(sfu->data);
- }
-
- g_slist_free(update_sfusrc);
- update_sfusrc = NULL;
- }
-
- /* otherwise, cleanup and destroy the timeout */
- g_free(fu->field_name);
- g_free(fu);
-
- return FALSE;
-}
-
-#define RANGE_SET_VALUE(tree,scrollbar,value) \
- do { \
- GtkRange CONCAT(*range, __LINE__) = GTK_RANGE(GTK_SCROLLED_WINDOW(shell->tree->scroll)->scrollbar); \
- gtk_range_set_value(CONCAT(range, __LINE__), value); \
- gtk_adjustment_value_changed(GTK_ADJUSTMENT(gtk_range_get_adjustment(CONCAT(range, __LINE__)))); \
- } while (0)
-#define RANGE_GET_VALUE(tree,scrollbar) \
- gtk_range_get_value(GTK_RANGE \
- (GTK_SCROLLED_WINDOW(shell->tree->scroll)-> \
- scrollbar))
-
-static gboolean reload_section(gpointer data)
-{
- ShellModuleEntry *entry = (ShellModuleEntry *) data;
-#if GTK_CHECK_VERSION(2, 14, 0)
- GdkWindow *gdk_window = gtk_widget_get_window(GTK_WIDGET(shell->window));
-#endif
-
- /* if the entry is still selected, update it */
- if (entry->selected) {
- GtkTreePath *path = NULL;
- GtkTreeIter iter;
- double pos_info_scroll, pos_more_scroll;
-
- /* save current position */
-#if GTK_CHECK_VERSION(3, 0, 0)
- /* TODO:GTK3 */
-#else
- pos_info_scroll = RANGE_GET_VALUE(info, vscrollbar);
- pos_more_scroll = RANGE_GET_VALUE(moreinfo, vscrollbar);
-#endif
-
- /* avoid drawing the window while we reload */
-#if GTK_CHECK_VERSION(2, 14, 0)
- gdk_window_freeze_updates(gdk_window);
-#else
- gdk_window_freeze_updates(shell->window->window);
-#endif
-
- /* gets the current selected path */
- if (gtk_tree_selection_get_selected
- (shell->info->selection, &shell->info->model, &iter)) {
- path = gtk_tree_model_get_path(shell->info->model, &iter);
- }
-
- /* update the information, clear the treeview and populate it again */
- module_entry_reload(entry);
- info_selected_show_extra(NULL); /* clears the more info store */
- module_selected_show_info(entry, TRUE);
-
- /* if there was a selection, reselect it */
- if (path) {
- gtk_tree_selection_select_path(shell->info->selection, path);
- gtk_tree_view_set_cursor(GTK_TREE_VIEW(shell->info->view), path, NULL,
- FALSE);
- gtk_tree_path_free(path);
- } else {
- /* restore position */
-#if GTK_CHECK_VERSION(3, 0, 0)
- /* TODO:GTK3 */
-#else
- RANGE_SET_VALUE(info, vscrollbar, pos_info_scroll);
- RANGE_SET_VALUE(moreinfo, vscrollbar, pos_more_scroll);
-#endif
- }
-
- /* make the window drawable again */
-#if GTK_CHECK_VERSION(2, 14, 0)
- gdk_window_thaw_updates(gdk_window);
-#else
- gdk_window_thaw_updates(shell->window->window);
-#endif
- }
-
- /* destroy the timeout: it'll be set up again */
- return FALSE;
-}
-
-static gboolean rescan_section(gpointer data)
-{
- ShellModuleEntry *entry = (ShellModuleEntry *) data;
-
- module_entry_reload(entry);
-
- return entry->selected;
-}
-
-static gint
-compare_float(float a, float b)
-{
- return (a > b) - (a < b);
-}
-
-static gint
-info_tree_compare_val_func(GtkTreeModel * model,
- GtkTreeIter * a,
- GtkTreeIter * b, gpointer userdata)
-{
- gint ret = 0;
- gchar *col1, *col2;
-
- gtk_tree_model_get(model, a, INFO_TREE_COL_VALUE, &col1, -1);
- gtk_tree_model_get(model, b, INFO_TREE_COL_VALUE, &col2, -1);
-
- if (!col1 && !col2)
- ret = 0;
- else if (!col1)
- ret = -1;
- else if (!col2)
- ret = 1;
- else if (shell->_order_type == SHELL_ORDER_ASCENDING)
- ret = compare_float(atof(col2), atof(col1));
- else
- ret = compare_float(atof(col1), atof(col2));
-
- g_free(col1);
- g_free(col2);
-
- return ret;
-}
-
-static void set_view_type(ShellViewType viewtype, gboolean reload)
-{
-#if GTK_CHECK_VERSION(2, 18, 0)
- GtkAllocation* alloc;
-#endif
-
- if (viewtype < SHELL_VIEW_NORMAL || viewtype >= SHELL_VIEW_N_VIEWS)
- viewtype = SHELL_VIEW_NORMAL;
-
- shell->normalize_percentage = TRUE;
- shell->view_type = viewtype;
- shell->_order_type = SHELL_ORDER_DESCENDING;
-
- /* use an unsorted tree model */
- GtkTreeSortable *sortable = GTK_TREE_SORTABLE(shell->info->model);
-
- gtk_tree_sortable_set_sort_column_id(sortable,
- GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID,
- GTK_SORT_ASCENDING);
- gtk_tree_view_set_model(GTK_TREE_VIEW(shell->info->view),
- GTK_TREE_MODEL(sortable));
-
- /* reset to the default view columns */
- if (!reload) {
- gtk_tree_view_column_set_visible(shell->info->col_extra1, FALSE);
- gtk_tree_view_column_set_visible(shell->info->col_extra2, FALSE);
- gtk_tree_view_column_set_visible(shell->info->col_progress, FALSE);
- gtk_tree_view_column_set_visible(shell->info->col_value, TRUE);
- }
-
- /* turn off the rules hint */
-#if GTK_CHECK_VERSION(3, 0, 0)
-#else
- gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(shell->info->view), FALSE);
-#endif
-
- close_note(NULL, NULL);
-
- switch (viewtype) {
- default:
- case SHELL_VIEW_NORMAL:
- gtk_widget_show(shell->info->scroll);
- gtk_widget_hide(shell->notebook);
-
- if (!reload) {
- gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(shell->info->view), FALSE);
- }
- break;
- case SHELL_VIEW_DUAL:
- gtk_widget_show(shell->info->scroll);
- gtk_widget_show(shell->moreinfo->scroll);
- gtk_notebook_set_current_page(GTK_NOTEBOOK(shell->notebook), 0);
- gtk_widget_show(shell->notebook);
-
-#if GTK_CHECK_VERSION(2, 18, 0)
- alloc = g_new(GtkAllocation, 1);
- gtk_widget_get_allocation(shell->hpaned, alloc);
- gtk_paned_set_position(GTK_PANED(shell->vpaned), alloc->height / 2);
- g_free(alloc);
-#else
- gtk_paned_set_position(GTK_PANED(shell->vpaned),
- shell->hpaned->allocation.height / 2);
-#endif
- break;
- case SHELL_VIEW_LOAD_GRAPH:
- gtk_widget_show(shell->info->scroll);
- gtk_notebook_set_current_page(GTK_NOTEBOOK(shell->notebook), 1);
- gtk_widget_show(shell->notebook);
- load_graph_clear(shell->loadgraph);
-
-#if GTK_CHECK_VERSION(2, 18, 0)
- alloc = g_new(GtkAllocation, 1);
- gtk_widget_get_allocation(shell->hpaned, alloc);
- gtk_paned_set_position(GTK_PANED(shell->vpaned),
- alloc->height - load_graph_get_height(shell->loadgraph) - 16);
- g_free(alloc);
-#else
- gtk_paned_set_position(GTK_PANED(shell->vpaned),
- shell->hpaned->allocation.height -
- load_graph_get_height(shell->loadgraph) - 16);
-#endif
-
- break;
- case SHELL_VIEW_PROGRESS_DUAL:
- gtk_widget_show(shell->notebook);
- gtk_widget_show(shell->moreinfo->scroll);
-
- gtk_notebook_set_current_page(GTK_NOTEBOOK(shell->notebook), 0);
- /* fallthrough */
- case SHELL_VIEW_PROGRESS:
- gtk_widget_show(shell->info->scroll);
-
- if (!reload) {
- gtk_tree_view_column_set_visible(shell->info->col_progress, TRUE);
- gtk_tree_view_column_set_visible(shell->info->col_value, FALSE);
- }
-
- if (viewtype == SHELL_VIEW_PROGRESS)
- gtk_widget_hide(shell->notebook);
- break;
- case SHELL_VIEW_SUMMARY:
- gtk_notebook_set_current_page(GTK_NOTEBOOK(shell->notebook), 2);
-
- gtk_widget_show(shell->notebook);
- gtk_widget_hide(shell->info->scroll);
- gtk_widget_hide(shell->moreinfo->scroll);
- }
-}
-
-static void
-group_handle_special(GKeyFile * key_file, ShellModuleEntry * entry,
- gchar * group, gchar ** keys, gboolean reload)
-{
- if (g_str_equal(group, "$ShellParam$")) {
- gboolean headers_visible = FALSE;
- gint i;
-
- for (i = 0; keys[i]; i++) {
- gchar *key = keys[i];
-
- if (g_str_has_prefix(key, "UpdateInterval")) {
- ShellFieldUpdate *fu = g_new0(ShellFieldUpdate, 1);
- ShellFieldUpdateSource *sfutbl;
- gint ms;
-
- ms = g_key_file_get_integer(key_file, group, key, NULL);
-
- fu->field_name = g_strdup(g_utf8_strchr(key, -1, '$') + 1);
- fu->entry = entry;
-
- sfutbl = g_new0(ShellFieldUpdateSource, 1);
- sfutbl->source_id = g_timeout_add(ms, update_field, fu);
- sfutbl->sfu = fu;
-
- update_sfusrc = g_slist_prepend(update_sfusrc, sfutbl);
- } else if (g_str_equal(key, "NormalizePercentage")) {
- shell->normalize_percentage = g_key_file_get_boolean(key_file, group, key, NULL);
- } else if (g_str_equal(key, "LoadGraphSuffix")) {
- gchar *suffix =
- g_key_file_get_value(key_file, group, key, NULL);
- load_graph_set_data_suffix(shell->loadgraph, suffix);
- g_free(suffix);
- } else if (g_str_equal(key, "ReloadInterval")) {
- gint ms;
-
- ms = g_key_file_get_integer(key_file, group, key, NULL);
-
- g_timeout_add(ms, reload_section, entry);
- } else if (g_str_equal(key, "RescanInterval")) {
- gint ms;
-
- ms = g_key_file_get_integer(key_file, group, key, NULL);
-
- g_timeout_add(ms, rescan_section, entry);
- } else if (g_str_equal(key, "ShowColumnHeaders")) {
- headers_visible = g_key_file_get_boolean(key_file, group, key, NULL);
- } else if (g_str_has_prefix(key, "ColumnTitle")) {
- GtkTreeViewColumn *column = NULL;
- gchar *value, *title = g_utf8_strchr(key, -1, '$') + 1;
-
- value = g_key_file_get_value(key_file, group, key, NULL);
-
- if (g_str_equal(title, "Extra1")) {
- column = shell->info->col_extra1;
- } else if (g_str_equal(title, "Extra2")) {
- column = shell->info->col_extra2;
- } else if (g_str_equal(title, "Value")) {
- column = shell->info->col_value;
- } else if (g_str_equal(title, "TextValue")) {
- column = shell->info->col_textvalue;
- } else if (g_str_equal(title, "Progress")) {
- column = shell->info->col_progress;
- }
-
- if (column) {
- gtk_tree_view_column_set_title(column, value);
- gtk_tree_view_column_set_visible(column, TRUE);
- }
-
- g_free(value);
- } else if (g_str_equal(key, "OrderType")) {
- shell->_order_type = g_key_file_get_integer(key_file,
- group,
- key, NULL);
- } else if (g_str_equal(key, "ViewType")) {
- set_view_type(g_key_file_get_integer(key_file, group,
- key, NULL), reload);
- } else if (g_str_has_prefix(key, "Icon")) {
- GtkTreeIter *iter = g_hash_table_lookup(update_tbl,
- g_utf8_strchr(key,
- -1, '$') + 1);
-
- if (iter) {
- gchar *file =
- g_key_file_get_value(key_file, group, key, NULL);
- gtk_tree_store_set(GTK_TREE_STORE(shell->info->model),
- iter, INFO_TREE_COL_PBUF,
- icon_cache_get_pixbuf_at_size(file,
- 22,
- 22),
- -1);
- g_free(file);
- }
- } else if (g_str_equal(key, "Zebra")) {
-#if GTK_CHECK_VERSION(3, 0, 0)
-#else
- gtk_tree_view_set_rules_hint(GTK_TREE_VIEW
- (shell->info->view),
- g_key_file_get_boolean
- (key_file, group, key, NULL));
-#endif
- }
- }
-
- gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(shell->info->view), headers_visible);
- } else {
- g_warning("Unknown parameter group: ``%s''", group);
- }
-}
-
-static void
-group_handle_normal(GKeyFile * key_file, ShellModuleEntry * entry,
- gchar * group, gchar ** keys, gsize ngroups)
-{
- GtkTreeIter parent;
- GtkTreeStore *store = GTK_TREE_STORE(shell->info->model);
- gchar *tmp = g_strdup(group);
- gint i;
-
- if (ngroups > 1) {
- gtk_tree_store_append(store, &parent, NULL);
-
- strend(tmp, '#');
- gtk_tree_store_set(store, &parent, INFO_TREE_COL_NAME, tmp, -1);
- g_free(tmp);
- }
-
- for (i = 0; keys[i]; i++) {
- gchar *key = keys[i];
- gchar *value;
- GtkTreeIter child;
-
- value = g_key_file_get_value(key_file, group, key, NULL);
- if (entry->fieldfunc && value && g_str_equal(value, "...")) {
- g_free(value);
- value = entry->fieldfunc(key);
- }
-
- if ((key && value) && g_utf8_validate(key, -1, NULL) && g_utf8_validate(value, -1, NULL)) {
- if (ngroups == 1) {
- gtk_tree_store_append(store, &child, NULL);
- } else {
- gtk_tree_store_append(store, &child, &parent);
- }
-
- /* FIXME: use g_key_file_get_string_list? */
- if (g_utf8_strchr(value, -1, '|')) {
- gchar **columns = g_strsplit(value, "|", 0);
-
- gtk_tree_store_set(store, &child, INFO_TREE_COL_VALUE, columns[0], -1);
- if (columns[1]) {
- gtk_tree_store_set(store, &child, INFO_TREE_COL_EXTRA1, columns[1], -1);
- if (columns[2]) {
- gtk_tree_store_set(store, &child, INFO_TREE_COL_EXTRA2, columns[2], -1);
- }
- }
-
- g_strfreev(columns);
- } else {
- gtk_tree_store_set(store, &child, INFO_TREE_COL_VALUE, value, -1);
- }
-
- strend(key, '#');
-
- if (*key == '$') {
- gchar **tmp;
-
- tmp = g_strsplit(++key, "$", 0);
-
- gtk_tree_store_set(store, &child, INFO_TREE_COL_NAME,
- tmp[1], INFO_TREE_COL_DATA, tmp[0], -1);
-
- g_strfreev(tmp);
- } else {
- gtk_tree_store_set(store, &child, INFO_TREE_COL_NAME, _(key),
- INFO_TREE_COL_DATA, NULL, -1);
- }
-
- g_hash_table_insert(update_tbl, g_strdup(key),
- gtk_tree_iter_copy(&child));
-
- }
-
- g_free(value);
- }
-}
-
-static void
-moreinfo_handle_normal(GKeyFile * key_file, gchar * group, gchar ** keys)
-{
- GtkTreeIter parent;
- GtkTreeStore *store = GTK_TREE_STORE(shell->moreinfo->model);
- gint i;
-
- gtk_tree_store_append(store, &parent, NULL);
- gtk_tree_store_set(store, &parent, INFO_TREE_COL_NAME, group, -1);
-
- for (i = 0; keys[i]; i++) {
- gchar *key = keys[i];
- GtkTreeIter child;
- gchar *value;
-
- value = g_key_file_get_value(key_file, group, key, NULL);
-
- if (g_utf8_validate(key, -1, NULL)
- && g_utf8_validate(value, -1, NULL)) {
- strend(key, '#');
-
- gtk_tree_store_append(store, &child, &parent);
- gtk_tree_store_set(store, &child, INFO_TREE_COL_VALUE,
- value, INFO_TREE_COL_NAME, key, -1);
- }
-
- g_free(value);
- }
-}
-
-static void update_progress()
-{
- GtkTreeModel *model = shell->info->model;
- GtkTreeStore *store = GTK_TREE_STORE(model);
- GtkTreeIter iter, fiter;
- gchar *tmp;
- gdouble maxv = INT_MIN, minv = INT_MAX, coeff, cur;
-
- if (!gtk_tree_model_get_iter_first(model, &fiter))
- return;
-
- /* finds the maximum value */
- if (shell->normalize_percentage) {
- iter = fiter;
- do {
- gtk_tree_model_get(model, &iter, INFO_TREE_COL_VALUE, &tmp, -1);
-
- cur = atof(tmp);
- if (cur > maxv)
- maxv = cur;
- if (cur < minv)
- minv = cur;
-
- g_free(tmp);
- } while (gtk_tree_model_iter_next(model, &iter));
-
- if (minv - maxv < 0.001)
- maxv += 1.0f;
- } else {
- minv = 1.0f;
- maxv = 100.0f;
- }
-
- coeff = (100.0f - 1.0f) / (maxv - minv);
-
- /* fix the maximum relative percentage */
- iter = fiter;
- do {
- char *space;
- char formatted[128];
- gdouble pct;
-
- gtk_tree_model_get(model, &iter, INFO_TREE_COL_VALUE, &tmp, -1);
- cur = atof(tmp);
- space = g_utf8_strchr(tmp, -1, ' ');
-
- pct = coeff * (cur - minv) + 1.0f;
- if (shell->_order_type == SHELL_ORDER_ASCENDING)
- pct = 100.0 - pct;
- pct = ceil(pct);
-
- if (space) {
- snprintf(formatted, sizeof(formatted), "%.2f%s", cur, space);
- } else {
- snprintf(formatted, sizeof(formatted), "%.2f", cur);
- }
-
- gtk_tree_store_set(store, &iter, INFO_TREE_COL_PROGRESS, pct,
- INFO_TREE_COL_VALUE, strreplacechr(formatted, ",",
- '.'), -1);
-
- g_free(tmp);
- } while (gtk_tree_model_iter_next(model, &iter));
-
- /* now sort everything up. that wasn't as hard as i thought :) */
- GtkTreeSortable *sortable = GTK_TREE_SORTABLE(shell->info->model);
-
- gtk_tree_sortable_set_sort_func(sortable, INFO_TREE_COL_VALUE,
- info_tree_compare_val_func, 0, NULL);
- gtk_tree_sortable_set_sort_column_id(sortable, INFO_TREE_COL_VALUE,
- GTK_SORT_DESCENDING);
- gtk_tree_view_set_model(GTK_TREE_VIEW(shell->info->view),
- GTK_TREE_MODEL(sortable));
-}
-
-void shell_set_note_from_entry(ShellModuleEntry * entry)
-{
- if (entry->notefunc) {
- const gchar *note = module_entry_get_note(entry);
-
- if (note) {
- gtk_label_set_markup(GTK_LABEL(shell->note->label), note);
- gtk_widget_show(shell->note->event_box);
- } else {
- gtk_widget_hide(shell->note->event_box);
- }
- } else {
- gtk_widget_hide(shell->note->event_box);
- }
-}
-
-void shell_clear_field_updates(void)
-{
- if (update_sfusrc) {
- GSList *sfusrc;
-
- for (sfusrc = update_sfusrc; sfusrc; sfusrc = sfusrc->next) {
- ShellFieldUpdateSource *src =
- (ShellFieldUpdateSource *) sfusrc->data;
- g_source_remove(src->source_id);
- g_free(src->sfu->field_name);
- g_free(src->sfu);
- g_free(src);
- }
-
- g_slist_free(update_sfusrc);
- update_sfusrc = NULL;
- }
-}
-
-static gboolean
-select_first_item(gpointer data)
-{
- GtkTreeIter first;
-
- if (gtk_tree_model_get_iter_first(shell->info->model, &first))
- gtk_tree_selection_select_iter(shell->info->selection, &first);
-
- return FALSE;
-}
-
-static gboolean
-select_marked_or_first_item(gpointer data)
-{
- GtkTreeIter first, it;
- gboolean found_selection = FALSE;
- gchar *datacol;
-
- if ( gtk_tree_model_get_iter_first(shell->info->model, &first) ) {
- it = first;
- while ( gtk_tree_model_iter_next(shell->info->model, &it) ) {
- gtk_tree_model_get(shell->info->model, &it, INFO_TREE_COL_DATA, &datacol, -1);
- if (datacol != NULL && *datacol == '*') {
- gtk_tree_selection_select_iter(shell->info->selection, &it);
- found_selection = TRUE;
- }
- g_free(datacol);
- }
-
- if (!found_selection)
- gtk_tree_selection_select_iter(shell->info->selection, &first);
- }
- return FALSE;
-}
-
-static void
-module_selected_show_info(ShellModuleEntry * entry, gboolean reload)
-{
- GKeyFile *key_file = g_key_file_new();
- GtkTreeStore *store;
- gchar *key_data, **groups;
- gboolean has_shell_param = FALSE;
- gint i;
- gsize ngroups;
-#if GTK_CHECK_VERSION(2, 14, 0)
- GdkWindow *gdk_window = gtk_widget_get_window(GTK_WIDGET(shell->info->view));
-#endif
-
- module_entry_scan(entry);
- key_data = module_entry_function(entry);
-
- /* */
-#if GTK_CHECK_VERSION(2, 14, 0)
- gdk_window_freeze_updates(gdk_window);
-#else
- gdk_window_freeze_updates(shell->info->view->window);
-#endif
-
- g_object_ref(shell->info->model);
- gtk_tree_view_set_model(GTK_TREE_VIEW(shell->info->view), NULL);
-
- /* reset the view type to normal */
- set_view_type(SHELL_VIEW_NORMAL, reload);
-
- if (!reload) {
- /* recreate the iter hash table */
- h_hash_table_remove_all(update_tbl);
- }
-
- shell_clear_field_updates();
-
- store = GTK_TREE_STORE(shell->info->model);
-
- gtk_tree_store_clear(store);
-
- g_key_file_load_from_data(key_file, key_data, strlen(key_data), 0,
- NULL);
- groups = g_key_file_get_groups(key_file, &ngroups);
-
- for (i = 0; groups[i]; i++)
- if (groups[i][0] == '$')
- ngroups--;
-
- for (i = 0; groups[i]; i++) {
- gchar *group = groups[i];
- gchar **keys = g_key_file_get_keys(key_file, group, NULL, NULL);
-
- if (*group == '$') {
- group_handle_special(key_file, entry, group, keys, reload);
- has_shell_param = TRUE;
- } else {
- group_handle_normal(key_file, entry, group, keys, ngroups);
- }
-
- g_strfreev(keys);
- }
-
- /* */
- if (!has_shell_param) {
- gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(shell->info->view), FALSE);
- }
-
- /* */
- g_object_unref(shell->info->model);
- gtk_tree_view_set_model(GTK_TREE_VIEW(shell->info->view), shell->info->model);
- gtk_tree_view_expand_all(GTK_TREE_VIEW(shell->info->view));
-
-#if GTK_CHECK_VERSION(2, 14, 0)
- gdk_window_thaw_updates(gdk_window);
-#else
- gdk_window_thaw_updates(shell->info->view->window);
-#endif
- shell_set_note_from_entry(entry);
-
- if (shell->view_type == SHELL_VIEW_PROGRESS || shell->view_type == SHELL_VIEW_PROGRESS_DUAL) {
- update_progress();
- }
-
-#if GTK_CHECK_VERSION(2,12,0)
- if (ngroups == 1) {
- gtk_tree_view_set_show_expanders(GTK_TREE_VIEW(shell->info->view),
- FALSE);
- } else {
- gtk_tree_view_set_show_expanders(GTK_TREE_VIEW(shell->info->view),
- TRUE);
- }
-#endif
-
- g_strfreev(groups);
- g_key_file_free(key_file);
- g_free(key_data);
-
- if (!reload) {
- switch (shell->view_type) {
- case SHELL_VIEW_DUAL:
- case SHELL_VIEW_LOAD_GRAPH:
- case SHELL_VIEW_PROGRESS_DUAL:
- g_idle_add(select_marked_or_first_item, NULL);
- }
- }
-}
-
-static void info_selected_show_extra(gchar * data)
-{
- GtkTreeStore *store;
-
- store = GTK_TREE_STORE(shell->moreinfo->model);
- gtk_tree_store_clear(store);
-
- if (!shell->selected->morefunc)
- return;
-
- if (data) {
- /* skip the select marker */
- if (*data == '*')
- data++;
- GKeyFile *key_file = g_key_file_new();
- gchar *key_data = shell->selected->morefunc(data);
- gchar **groups;
- gint i;
-
- g_key_file_load_from_data(key_file, key_data, strlen(key_data), 0,
- NULL);
- groups = g_key_file_get_groups(key_file, NULL);
-
- for (i = 0; groups[i]; i++) {
- gchar *group = groups[i];
- gchar **keys =
- g_key_file_get_keys(key_file, group, NULL, NULL);
-
- moreinfo_handle_normal(key_file, group, keys);
- }
-
- gtk_tree_view_expand_all(GTK_TREE_VIEW(shell->moreinfo->view));
-
- g_strfreev(groups);
- g_key_file_free(key_file);
- g_free(key_data);
- }
-}
-
-static gchar *shell_summary_clear_value(gchar *value)
-{
- GKeyFile *keyfile;
- gchar *return_value;
-
- keyfile = g_key_file_new();
- if (!value) return_value = g_strdup("");
- else
- if (g_key_file_load_from_data(keyfile, value,
- strlen(value), 0, NULL)) {
- gchar **groups;
- gint group;
-
- return_value = g_strdup("");
-
- groups = g_key_file_get_groups(keyfile, NULL);
- for (group = 0; groups[group]; group++) {
- gchar **keys;
- gint key;
-
- keys = g_key_file_get_keys(keyfile, groups[group], NULL, NULL);
- for (key = 0; keys[key]; key++) {
- gchar *temp = keys[key];
-
- if (*temp == '$') {
- temp++;
- while (*temp && *temp != '$')
- temp++;
- temp++;
-
- return_value = h_strdup_cprintf("%s\n", return_value, temp);
- } else {
- return_value = g_key_file_get_string(keyfile, groups[group],
- keys[key], NULL);
- }
- }
-
- g_strfreev(keys);
- }
-
- g_strfreev(groups);
- } else {
- return_value = g_strdup(value);
- }
-
- g_key_file_free(keyfile);
-
- return g_strstrip(return_value);
-}
-
-static void shell_summary_add_item(ShellSummary *summary,
- gchar *icon,
- gchar *name,
- gchar *value)
-{
- GtkWidget *frame;
- GtkWidget *frame_label_box;
- GtkWidget *frame_image;
- GtkWidget *frame_label;
- GtkWidget *content;
- GtkWidget *alignment;
- gchar *temp;
-
- temp = shell_summary_clear_value(value);
-
- /* creates the frame */
- frame = gtk_frame_new(NULL);
- gtk_frame_set_shadow_type(GTK_FRAME(frame),
- GTK_SHADOW_NONE);
-
-#if GTK_CHECK_VERSION(3, 0, 0)
- frame_label_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
-#else
- frame_label_box = gtk_hbox_new(FALSE, 5);
-#endif
- frame_image = icon_cache_get_image(icon);
- frame_label = gtk_label_new(name);
- gtk_label_set_use_markup(GTK_LABEL(frame_label), TRUE);
- gtk_box_pack_start(GTK_BOX(frame_label_box), frame_image, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(frame_label_box), frame_label, FALSE, FALSE, 0);
-
- content = gtk_label_new(temp);
- /* TODO:GTK3 gtk_alignment_new(), etc is deprecated from 3.14 */
-#if GTK_CHECK_VERSION(3, 0, 0)
- GtkWidget *frame_box;
- frame_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
- gtk_widget_set_margin_start(GTK_WIDGET(frame_box), 48);
- gtk_box_pack_start(GTK_BOX(frame_box), content, FALSE, FALSE, 0);
- gtk_container_add(GTK_CONTAINER(frame), frame_box);
-#else
- alignment = gtk_alignment_new(0.5, 0.5, 1, 1);
- gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 48, 0);
- gtk_widget_show(alignment);
- gtk_container_add(GTK_CONTAINER(frame), alignment);
- gtk_misc_set_alignment(GTK_MISC(content), 0.0, 0.5);
- gtk_container_add(GTK_CONTAINER(alignment), content);
-#endif
-
- gtk_widget_show_all(frame);
- gtk_widget_show_all(frame_label_box);
-
- gtk_frame_set_label_widget(GTK_FRAME(frame), frame_label_box);
-
- /* pack the item on the summary screen */
- gtk_box_pack_start(GTK_BOX(shell->summary->view), frame, FALSE, FALSE, 4);
-
- /* add the item to the list of summary items */
- summary->items = g_slist_prepend(summary->items, frame);
-
- g_free(temp);
-}
-
-static void shell_summary_clear(ShellSummary *summary)
-{
- GSList *item;
-
- for (item = summary->items; item; item = item->next) {
- gtk_widget_destroy(GTK_WIDGET(item->data));
- }
-
- g_slist_free(summary->items);
- summary->items = NULL;
-
- if (summary->header) gtk_widget_destroy(summary->header);
- summary->header = NULL;
-}
-static void shell_summary_create_header(ShellSummary *summary,
- gchar *title)
-{
- GtkWidget *header, *label;
- gchar *temp;
-
- temp = g_strdup_printf(_("<b>%s \342\206\222 Summary</b>"), title);
-
- header = gtk_menu_item_new_with_label(temp);
- gtk_menu_item_select(GTK_MENU_ITEM(header));
- gtk_widget_show(header);
-
- label = gtk_bin_get_child(GTK_BIN(header));
- gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
-
- gtk_box_pack_start(GTK_BOX(shell->summary->view), header, FALSE, FALSE, 4);
-
- summary->header = header;
-
- g_free(temp);
-}
-
-static void shell_show_summary(void)
-{
- GKeyFile *keyfile;
- gchar *summary;
-
- set_view_type(SHELL_VIEW_SUMMARY, FALSE);
- shell_summary_clear(shell->summary);
- shell_summary_create_header(shell->summary, shell->selected_module->name);
-
- keyfile = g_key_file_new();
- summary = shell->selected_module->summaryfunc();
-
- if (g_key_file_load_from_data(keyfile, summary,
- strlen(summary), 0, NULL)) {
- gchar **groups;
- gint group;
-
- groups = g_key_file_get_groups(keyfile, NULL);
-
- for (group = 0; groups[group]; group++) {
- gchar *icon, *method, *method_result;
-
- shell_status_pulse();
-
- icon = g_key_file_get_string(keyfile, groups[group], "Icon", NULL);
- method = g_key_file_get_string(keyfile, groups[group], "Method", NULL);
- if (method) {
- method_result = module_call_method(method);
- } else {
- method_result = g_strdup("N/A");
- }
-
- shell_summary_add_item(shell->summary,
- icon, groups[group], method_result);
- shell_status_pulse();
-
- g_free(icon);
- g_free(method);
- g_free(method_result);
- }
-
- g_strfreev(groups);
- } else {
- DEBUG("error while parsing summary");
- set_view_type(SHELL_VIEW_NORMAL, FALSE);
- }
-
- g_free(summary);
- g_key_file_free(keyfile);
-
- shell_view_set_enabled(TRUE);
-}
-
-static void module_selected(gpointer data)
-{
- ShellTree *shelltree = shell->tree;
- GtkTreeModel *model = GTK_TREE_MODEL(shelltree->model);
- GtkTreeIter iter, parent;
- ShellModuleEntry *entry;
- static ShellModuleEntry *current = NULL;
- static gboolean updating = FALSE;
- GtkScrollbar *hscrollbar, *vscrollbar;
-
- /* Gets the currently selected item on the left-side TreeView; if there is no
- selection, silently return */
- if (!gtk_tree_selection_get_selected(shelltree->selection, &model, &iter)) {
- return;
- }
-
- /* Mark the currently selected module as "unselected"; this is used to kill the
- update timeout. */
- if (current) {
- current->selected = FALSE;
- }
-
- if (updating) {
- return;
- } else {
- updating = TRUE;
- }
-
- if (!gtk_tree_model_iter_parent(model, &parent, &iter)) {
- memcpy(&parent, &iter, sizeof(iter));
- }
-
- gtk_tree_model_get(model, &parent, TREE_COL_MODULE, &shell->selected_module, -1);
-
- /* Get the current selection and shows its related info */
- gtk_tree_model_get(model, &iter, TREE_COL_MODULE_ENTRY, &entry, -1);
- if (entry && !entry->selected) {
- gchar *title;
-
- shell_status_set_enabled(TRUE);
- shell_status_update(_("Updating..."));
-
- entry->selected = TRUE;
- shell->selected = entry;
- module_selected_show_info(entry, FALSE);
-
- info_selected_show_extra(NULL); /* clears the more info store */
- gtk_tree_view_columns_autosize(GTK_TREE_VIEW(shell->info->view));
-
- /* urgh. why don't GTK do this when the model is cleared? */
-#if GTK_CHECK_VERSION(3, 0, 0)
- /* TODO:GTK3 */
-#else
- RANGE_SET_VALUE(info, vscrollbar, 0.0);
- RANGE_SET_VALUE(info, hscrollbar, 0.0);
- RANGE_SET_VALUE(moreinfo, vscrollbar, 0.0);
- RANGE_SET_VALUE(moreinfo, hscrollbar, 0.0);
-#endif
-
- title = g_strdup_printf("%s - %s", shell->selected_module->name, entry->name);
- shell_set_title(shell, title);
- g_free(title);
-
- shell_action_set_enabled("RefreshAction", TRUE);
- shell_action_set_enabled("CopyAction", TRUE);
-
- shell_status_update(_("Done."));
- shell_status_set_enabled(FALSE);
- } else {
- shell_set_title(shell, NULL);
- shell_action_set_enabled("RefreshAction", FALSE);
- shell_action_set_enabled("CopyAction", FALSE);
-
- gtk_tree_store_clear(GTK_TREE_STORE(shell->info->model));
- set_view_type(SHELL_VIEW_NORMAL, FALSE);
-
- if (shell->selected_module->summaryfunc) {
- shell_show_summary();
- }
- }
-
- current = entry;
- updating = FALSE;
-}
-
-static void info_selected(GtkTreeSelection * ts, gpointer data)
-{
- ShellInfoTree *info = (ShellInfoTree *) data;
- GtkTreeModel *model = GTK_TREE_MODEL(info->model);
- GtkTreeIter parent;
- gchar *datacol;
-
- if (!gtk_tree_selection_get_selected(ts, &model, &parent))
- return;
-
- if (shell->view_type == SHELL_VIEW_NORMAL ||
- shell->view_type == SHELL_VIEW_PROGRESS) {
- gtk_tree_selection_unselect_all(ts);
- return;
- }
-
- gtk_tree_model_get(model, &parent, INFO_TREE_COL_DATA, &datacol, -1);
- info_selected_show_extra(datacol);
- gtk_tree_view_columns_autosize(GTK_TREE_VIEW(shell->moreinfo->view));
-}
-
-static ShellInfoTree *info_tree_new(gboolean extra)
-{
- ShellInfoTree *info;
- GtkWidget *treeview, *scroll;
- GtkTreeModel *model;
- GtkTreeStore *store;
- GtkTreeViewColumn *column;
- GtkCellRenderer *cr_text, *cr_pbuf, *cr_progress;
- GtkTreeSelection *sel;
-
- info = g_new0(ShellInfoTree, 1);
-
- scroll = gtk_scrolled_window_new(NULL, NULL);
- gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW
- (scroll), GTK_SHADOW_IN);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_ALWAYS);
-
- store =
- gtk_tree_store_new(INFO_TREE_NCOL, G_TYPE_STRING, G_TYPE_STRING,
- G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_FLOAT,
- G_TYPE_STRING, G_TYPE_STRING);
- model = GTK_TREE_MODEL(store);
- treeview = gtk_tree_view_new_with_model(model);
- gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE);
- gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(treeview), TRUE);
-
- info->col_progress = column = gtk_tree_view_column_new();
- gtk_tree_view_column_set_visible(column, FALSE);
- gtk_tree_view_column_set_min_width(column, 240);
- gtk_tree_view_column_set_clickable(column, TRUE);
- gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
-
- cr_progress = gtk_cell_renderer_progress_new();
- gtk_tree_view_column_pack_start(column, cr_progress, TRUE);
- gtk_tree_view_column_add_attribute(column, cr_progress, "value",
- INFO_TREE_COL_PROGRESS);
- gtk_tree_view_column_add_attribute(column, cr_progress, "text",
- INFO_TREE_COL_VALUE);
- gtk_tree_view_column_set_visible(column, FALSE);
-
- info->col_textvalue = column = gtk_tree_view_column_new();
- gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
- gtk_tree_view_column_set_clickable(column, TRUE);
-
- 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",
- INFO_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",
- INFO_TREE_COL_NAME);
-
- info->col_extra1 = column = gtk_tree_view_column_new();
- gtk_tree_view_column_set_visible(column, FALSE);
- gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
- gtk_tree_view_column_set_clickable(column, TRUE);
-
- cr_text = gtk_cell_renderer_text_new();
- gtk_tree_view_column_pack_start(column, cr_text, FALSE);
- gtk_tree_view_column_add_attribute(column, cr_text, "markup",
- INFO_TREE_COL_EXTRA1);
-
- info->col_extra2 = column = gtk_tree_view_column_new();
- gtk_tree_view_column_set_visible(column, FALSE);
- gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
- gtk_tree_view_column_set_clickable(column, TRUE);
-
- cr_text = gtk_cell_renderer_text_new();
- gtk_tree_view_column_pack_start(column, cr_text, FALSE);
- gtk_tree_view_column_add_attribute(column, cr_text, "markup",
- INFO_TREE_COL_EXTRA2);
-
- info->col_value = column = gtk_tree_view_column_new();
- gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
- gtk_tree_view_column_set_clickable(column, TRUE);
-
- cr_text = gtk_cell_renderer_text_new();
- gtk_tree_view_column_pack_start(column, cr_text, FALSE);
- gtk_tree_view_column_add_attribute(column, cr_text, "markup",
- INFO_TREE_COL_VALUE);
-
- sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
-
- if (!extra)
- g_signal_connect(G_OBJECT(sel), "changed",
- (GCallback) info_selected, info);
-
- gtk_container_add(GTK_CONTAINER(scroll), treeview);
-
- info->scroll = scroll;
- info->view = treeview;
- info->model = model;
- info->selection = sel;
-
- gtk_widget_show_all(scroll);
-
- return info;
-}
-
-static ShellTree *tree_new()
-{
- ShellTree *shelltree;
- GtkWidget *treeview, *scroll;
- GtkTreeModel *model;
- GtkTreeStore *store;
- GtkCellRenderer *cr_text, *cr_pbuf;
- GtkTreeViewColumn *column;
- GtkTreeSelection *sel;
-
- shelltree = g_new0(ShellTree, 1);
-
- scroll = gtk_scrolled_window_new(NULL, NULL);
- gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW
- (scroll), GTK_SHADOW_IN);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
- GTK_POLICY_NEVER,
- GTK_POLICY_AUTOMATIC);
-
- store = gtk_tree_store_new(TREE_NCOL, GDK_TYPE_PIXBUF, G_TYPE_STRING,
- G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_BOOLEAN);
- model = GTK_TREE_MODEL(store);
- treeview = gtk_tree_view_new_with_model(model);
- gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE);
-
-#if GTK_CHECK_VERSION(2,12,0)
- gtk_tree_view_set_show_expanders(GTK_TREE_VIEW(treeview), FALSE);
- gtk_tree_view_set_level_indentation(GTK_TREE_VIEW(treeview), 24);
-#endif
-
- column = gtk_tree_view_column_new();
- gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
-
- cr_pbuf = gtk_cell_renderer_pixbuf_new();
- cr_text = gtk_cell_renderer_text_new();
- gtk_tree_view_column_pack_start(column, cr_pbuf, FALSE);
- gtk_tree_view_column_pack_start(column, cr_text, TRUE);
-
- gtk_tree_view_column_add_attribute(column, cr_pbuf, "pixbuf",
- TREE_COL_PBUF);
- gtk_tree_view_column_add_attribute(column, cr_text, "markup",
- TREE_COL_NAME);
-
- sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
- g_signal_connect(G_OBJECT(sel), "changed", (GCallback) module_selected,
- NULL);
-
- gtk_container_add(GTK_CONTAINER(scroll), treeview);
-
- shelltree->scroll = scroll;
- shelltree->view = treeview;
- shelltree->model = model;
- shelltree->modules = NULL;
- shelltree->selection = sel;
-
- gtk_widget_show_all(scroll);
-
- return shelltree;
-}
diff --git a/shell/stock.c b/shell/stock.c
deleted file mode 100644
index 86d66778..00000000
--- a/shell/stock.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * HardInfo - Displays System Information
- * Copyright (C) 2003-2007 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 <config.h>
-#include <gtk/gtk.h>
-#include <stock.h>
-#include <iconcache.h>
-
-static struct {
- gchar *filename;
- gchar *stock_id;
-} stock_icons[] = {
- { "report.png", HI_STOCK_REPORT},
- { "internet.png", HI_STOCK_INTERNET},
- { "module.png", HI_STOCK_MODULE},
- { "about-modules.png", HI_STOCK_ABOUT_MODULES},
- { "syncmanager-small.png", HI_STOCK_SYNC_MENU},
- { "face-grin.png", HI_STOCK_DONATE},
- { "server.png", HI_STOCK_SERVER},
-};
-
-static GtkIconFactory *icon_factory;
-
-void stock_icon_register(gchar * filename, gchar * stock_id)
-{
-#if GTK_CHECK_VERSION(3, 0, 0)
-#else
- GtkIconSet *icon_set;
- GtkIconSource *icon_source;
-
- icon_set = gtk_icon_set_new();
- icon_source = gtk_icon_source_new();
-
- gtk_icon_source_set_pixbuf(icon_source,
- icon_cache_get_pixbuf(filename));
- gtk_icon_set_add_source(icon_set, icon_source);
- gtk_icon_source_free(icon_source);
-
- gtk_icon_factory_add(icon_factory, stock_id, icon_set);
-
- gtk_icon_set_unref(icon_set);
-#endif
-}
-
-void stock_icon_register_pixbuf(GdkPixbuf * pixbuf, gchar * stock_id)
-{
-#if GTK_CHECK_VERSION(3, 0, 0)
-#else
- GtkIconSet *icon_set;
- GtkIconSource *icon_source;
-
- icon_set = gtk_icon_set_new();
- icon_source = gtk_icon_source_new();
-
- gtk_icon_source_set_pixbuf(icon_source, pixbuf);
- gtk_icon_set_add_source(icon_set, icon_source);
- gtk_icon_source_free(icon_source);
-
- gtk_icon_factory_add(icon_factory, stock_id, icon_set);
-
- gtk_icon_set_unref(icon_set);
-#endif
-}
-
-void stock_icons_init(void)
-{
- gint i;
- guint n_stock_icons = G_N_ELEMENTS(stock_icons);
-
- DEBUG("initializing stock icons");
-
-#if GTK_CHECK_VERSION(3, 0, 0)
-#else
- icon_factory = gtk_icon_factory_new();
-#endif
-
- for (i = 0; i < n_stock_icons; i++) {
- stock_icon_register(stock_icons[i].filename,
- stock_icons[i].stock_id);
- }
-
-#if GTK_CHECK_VERSION(3, 0, 0)
-#else
- gtk_icon_factory_add_default(icon_factory);
-#endif
-
- g_object_unref(icon_factory);
-}
diff --git a/shell/syncmanager.c b/shell/syncmanager.c
deleted file mode 100644
index db94d474..00000000
--- a/shell/syncmanager.c
+++ /dev/null
@@ -1,793 +0,0 @@
-/*
- * HardInfo - Displays System Information
- * Copyright (C) 2003-2009 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 "syncmanager.h"
-#include "iconcache.h"
-#include "hardinfo.h"
-#include "config.h"
-
-#ifdef HAS_LIBSOUP
-#include <libsoup/soup.h>
-
-#include <stdarg.h>
-#include <string.h>
-
-typedef struct _SyncDialog SyncDialog;
-typedef struct _SyncNetArea SyncNetArea;
-typedef struct _SyncNetAction SyncNetAction;
-
-struct _SyncNetArea {
- GtkWidget *vbox;
-};
-
-struct _SyncNetAction {
- gchar *name;
- gboolean(*do_action) (SyncDialog * sd, gpointer sna);
-
- SyncEntry *entry;
- GError *error;
-};
-
-struct _SyncDialog {
- GtkWidget *dialog;
- GtkWidget *label;
-
- GtkWidget *button_sync;
- GtkWidget *button_cancel;
- GtkWidget *button_close;
-
- GtkWidget *scroll_box;
-
- SyncNetArea *sna;
-
- gboolean flag_cancel:1;
-};
-
-static GSList *entries = NULL;
-static SoupSession *session = NULL;
-static GMainLoop *loop;
-static GQuark err_quark;
-
-#define XMLRPC_SERVER_URI "https://xmlrpc.hardinfo.org/"
-#define XMLRPC_SERVER_API_VERSION 1
-
-#define LABEL_SYNC_DEFAULT _("<big><b>Synchronize with Central Database</b></big>\n" \
- "The following information may be synchronized " \
- "with the HardInfo central database.")
-#define LABEL_SYNC_SYNCING _("<big><b>Synchronizing</b></big>\n" \
- "This may take some time.")
-
-static SyncDialog *sync_dialog_new(GtkWidget *parent);
-static void sync_dialog_destroy(SyncDialog * sd);
-static void sync_dialog_start_sync(SyncDialog * sd);
-
-static SyncNetArea *sync_dialog_netarea_new(void);
-static void sync_dialog_netarea_destroy(SyncNetArea * sna);
-static void sync_dialog_netarea_show(SyncDialog * sd);
-#if 0
-static void sync_dialog_netarea_hide(SyncDialog * sd);
-#endif
-static void sync_dialog_netarea_start_actions(SyncDialog * sd,
- SyncNetAction * sna, gint n);
-
-#define SNA_ERROR(code,message,...) if (!sna->error) { \
- sna->error = g_error_new(err_quark, code, message, \
- ##__VA_ARGS__); \
- }
-#endif /* HAS_LIBSOUP */
-
-
-gint sync_manager_count_entries(void)
-{
-#ifdef HAS_LIBSOUP
- return g_slist_length(entries);
-#else
- return 0;
-#endif
-}
-
-void sync_manager_add_entry(SyncEntry * entry)
-{
-#ifdef HAS_LIBSOUP
- DEBUG("registering syncmanager entry ''%s''", entry->fancy_name);
-
- entry->selected = TRUE;
- entries = g_slist_append(entries, entry);
-#else
- DEBUG("libsoup support is disabled.");
-#endif /* HAS_LIBSOUP */
-}
-
-void sync_manager_clear_entries(void)
-{
-#ifdef HAS_LIBSOUP
- DEBUG("clearing syncmanager entries");
-
- g_slist_free(entries);
- entries = NULL;
-#else
- DEBUG("libsoup support is disabled.");
-#endif /* HAS_LIBSOUP */
-}
-
-void sync_manager_show(GtkWidget *parent)
-{
-#ifndef HAS_LIBSOUP
- g_warning
- (_("HardInfo was compiled without libsoup support. (Network Updater requires it.)"));
-#else /* !HAS_LIBSOUP */
- SyncDialog *sd = sync_dialog_new(parent);
-
- err_quark = g_quark_from_static_string("syncmanager");
-
- if (gtk_dialog_run(GTK_DIALOG(sd->dialog)) == GTK_RESPONSE_ACCEPT) {
- shell_view_set_enabled(FALSE);
- shell_status_set_enabled(TRUE);
-
- sync_dialog_start_sync(sd);
-
- shell_status_set_enabled(FALSE);
- shell_view_set_enabled(TRUE);
- }
-
- sync_dialog_destroy(sd);
-#endif /* HAS_LIBSOUP */
-}
-
-#ifdef HAS_LIBSOUP
-static gint _soup_get_xmlrpc_value_int(SoupMessage * msg,
- SyncNetAction * sna)
-{
- gint int_value = -1;
-
- sna->error = NULL;
-
- if (!SOUP_STATUS_IS_SUCCESSFUL(msg->status_code)) {
- SNA_ERROR(1, _("%s (error #%d)"), msg->reason_phrase,
- msg->status_code);
- goto bad;
- }
-
- GVariant *value = soup_xmlrpc_parse_response(msg->response_body->data,
- msg->response_body->length,
- "h", NULL);
- if (!value) {
- SNA_ERROR(2, _("Could not parse XML-RPC response"));
- goto bad;
- }
-
- int_value = g_variant_get_int32(value);
- g_variant_unref(value);
-
-bad:
- return int_value;
-}
-
-static gchar *_soup_get_xmlrpc_value_string(SoupMessage * msg,
- SyncNetAction * sna)
-{
- gchar *string = NULL;
-
- sna->error = NULL;
-
- if (!SOUP_STATUS_IS_SUCCESSFUL(msg->status_code)) {
- SNA_ERROR(1, _("%s (error #%d)"), msg->reason_phrase,
- msg->status_code);
- goto bad;
- }
-
- GVariant *value = soup_xmlrpc_parse_response(msg->response_body->data,
- msg->response_body->length,
- "s", NULL);
- if (!value) {
- SNA_ERROR(2, _("Could not parse XML-RPC response"));
- goto bad;
- }
-
- string = g_strdup(g_variant_get_string(value, NULL));
- g_variant_unref(value);
-
-bad:
- return string;
-}
-
-static gboolean _soup_xmlrpc_call(gchar * method, SyncNetAction * sna,
- SoupSessionCallback callback)
-{
- SoupMessage *msg;
-
- sna->error = NULL;
-
- msg = soup_xmlrpc_message_new(XMLRPC_SERVER_URI, method, NULL, NULL);
- if (!msg)
- return FALSE;
-
- DEBUG("calling xmlrpc method %s", method);
-
- soup_session_queue_message(session, msg, callback, sna);
- g_main_run(loop);
-
- return TRUE;
-}
-
-static gboolean _soup_xmlrpc_call_with_parameters(gchar * method,
- SyncNetAction * sna,
- SoupSessionCallback
- callback, ...)
-{
- SoupMessage *msg;
- GVariantBuilder builder;
- GVariant *parameters;
- gchar *argument, *body;
- va_list ap;
-
- sna->error = NULL;
-
- msg = soup_message_new("POST", XMLRPC_SERVER_URI);
-
- DEBUG("calling xmlrpc method %s", method);
- if (!msg)
- return FALSE;
-
- g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY);
- va_start(ap, callback);
- while ((argument = va_arg(ap, gchar *))) {
- g_variant_builder_add(&builder, "s", argument);
- DEBUG("with parameter: %s", argument);
- }
- va_end(ap);
- parameters = g_variant_builder_end(&builder);
- g_variant_builder_unref(&builder);
-
- body = soup_xmlrpc_build_request(method, parameters, NULL);
- g_variant_unref(parameters);
- if (body) {
- soup_message_set_request(msg, "text/xml",
- SOUP_MEMORY_TAKE, body, strlen(body));
-
- soup_session_queue_message(session, msg, callback, sna);
- g_main_run(loop);
-
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void _action_check_api_version_got_response(SoupSession * session,
- SoupMessage * msg,
- gpointer user_data)
-{
- SyncNetAction *sna = (SyncNetAction *) user_data;
- gint version = _soup_get_xmlrpc_value_int(msg, sna);
-
- if (version != XMLRPC_SERVER_API_VERSION) {
- SNA_ERROR(5, _("Server says it supports API version %d, but "
- "this version of HardInfo only supports API "
- "version %d."), version, XMLRPC_SERVER_API_VERSION);
- }
-
- g_main_quit(loop);
-}
-
-static gboolean _action_check_api_version(SyncDialog * sd,
- gpointer user_data)
-{
- SyncNetAction *sna = (SyncNetAction *) user_data;
-
- if (!_soup_xmlrpc_call("server.getAPIVersion", sna,
- _action_check_api_version_got_response))
- return FALSE;
-
- return sna->error ? FALSE : TRUE;
-}
-
-static void _action_call_function_got_response(SoupSession * session,
- SoupMessage * msg,
- gpointer user_data)
-{
- SyncNetAction *sna = (SyncNetAction *) user_data;
- gchar *string;
-
- if ((string = _soup_get_xmlrpc_value_string(msg, sna)) &&
- sna->entry->save_to) {
- DEBUG("received string: %s\n", string);
- gchar *filename = g_build_filename(g_get_home_dir(), ".hardinfo",
- sna->entry->save_to, NULL);
-
- DEBUG("saving to %s", filename);
-
- g_file_set_contents(filename, string, -1, NULL);
- g_free(filename);
- }
-
- if (sna->entry->callback) {
- sna->entry->callback(sna->entry, string);
- }
-
- g_free(string);
- g_main_quit(loop);
-}
-
-static gboolean _action_call_function(SyncDialog * sd, gpointer user_data)
-{
- SyncNetAction *sna = (SyncNetAction *) user_data;
-
- if (sna->entry) {
- gchar *str_data = NULL;
-
- if (sna->entry->get_data)
- str_data = sna->entry->get_data();
-
- if (!_soup_xmlrpc_call_with_parameters("sync.callFunctionEx", sna,
- _action_call_function_got_response,
- VERSION, ARCH,
- sna->entry->name,
- str_data, NULL)) {
- g_free(str_data);
-
- return FALSE;
- }
-
- g_free(str_data);
- }
-
- return sna->error ? FALSE : TRUE;
-}
-
-static gboolean _cancel_sync(GtkWidget * widget, gpointer data)
-{
- SyncDialog *sd = (SyncDialog *) data;
-
- if (session) {
- soup_session_abort(session);
- }
-
- sd->flag_cancel = TRUE;
- g_main_quit(loop);
-
- gtk_widget_set_sensitive(widget, FALSE);
-
- return FALSE;
-}
-
-static SyncNetAction *sync_manager_get_selected_actions(gint * n)
-{
- gint i;
- GSList *entry;
- SyncNetAction *actions;
- SyncNetAction
- action_check_api = { _("Contacting HardInfo Central Database"), _action_check_api_version },
- action_clean_up = { _("Cleaning up"), NULL};
-
- actions = g_new0(SyncNetAction, 2 + g_slist_length(entries));
-
- for (entry = entries, i = 1; entry; entry = entry->next) {
- SyncEntry *e = (SyncEntry *) entry->data;
-
- if (e->selected) {
- SyncNetAction sna =
- { e->fancy_name, _action_call_function, e };
-
- actions[i++] = sna;
- }
- }
-
- actions[0] = action_check_api;
- actions[i++] = action_clean_up;
-
- *n = i;
- return actions;
-}
-
-static SoupURI *sync_manager_get_proxy(void)
-{
- const gchar *conf;
-
- if (!(conf = g_getenv("HTTP_PROXY"))) {
- if (!(conf = g_getenv("http_proxy"))) {
- return NULL;
- }
- }
-
- return soup_uri_new(conf);
-}
-
-static void sync_dialog_start_sync(SyncDialog * sd)
-{
- gint nactions;
- SyncNetAction *actions;
-
- if (!session) {
- SoupURI *proxy = sync_manager_get_proxy();
-
- session = soup_session_new_with_options(SOUP_SESSION_TIMEOUT, 10,
- SOUP_SESSION_PROXY_URI,
- proxy, NULL);
- /* Crashes if we unref the proxy? O_o */
- /*if (proxy)
- g_object_unref(proxy); */
- }
-
- loop = g_main_loop_new(NULL, TRUE);
-
- gtk_widget_hide(sd->button_sync);
- sync_dialog_netarea_show(sd);
- g_signal_connect(G_OBJECT(sd->button_cancel), "clicked",
- (GCallback) _cancel_sync, sd);
-
- actions = sync_manager_get_selected_actions(&nactions);
- sync_dialog_netarea_start_actions(sd, actions, nactions);
- g_free(actions);
-
- if (sd->flag_cancel) {
- gtk_widget_hide(sd->button_cancel);
- gtk_widget_show(sd->button_close);
-
- /* wait for the user to close the dialog */
- g_main_run(loop);
- }
-
- g_main_loop_unref(loop);
-}
-
-static void sync_dialog_netarea_start_actions(SyncDialog * sd,
- SyncNetAction sna[], gint n)
-{
- gint i;
- GtkWidget **labels;
- GtkWidget **status_labels;
- const gchar *done_str = "\342\234\223";
- const gchar *error_str = "\342\234\227";
- const gchar *curr_str = "\342\226\266";
- const gchar *empty_str = "\302\240\302\240";
-
- labels = g_new0(GtkWidget *, n);
- status_labels = g_new0(GtkWidget *, n);
-
- for (i = 0; i < n; i++) {
- GtkWidget *hbox;
-
- hbox = gtk_hbox_new(FALSE, 5);
-
- labels[i] = gtk_label_new(sna[i].name);
- status_labels[i] = gtk_label_new(empty_str);
-
- gtk_label_set_use_markup(GTK_LABEL(labels[i]), TRUE);
- gtk_label_set_use_markup(GTK_LABEL(status_labels[i]), TRUE);
-
- gtk_misc_set_alignment(GTK_MISC(labels[i]), 0.0, 0.5);
- gtk_misc_set_alignment(GTK_MISC(status_labels[i]), 1.0, 0.5);
-
- gtk_box_pack_start(GTK_BOX(hbox), status_labels[i], FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(hbox), labels[i], TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(sd->sna->vbox), hbox, FALSE, FALSE, 3);
-
- gtk_widget_show_all(hbox);
- }
-
- while (gtk_events_pending())
- gtk_main_iteration();
-
- for (i = 0; i < n; i++) {
- gchar *markup;
-
- if (sd->flag_cancel) {
- markup =
- g_strdup_printf("<s>%s</s> <i>%s</i>",
- sna[i].name, _("(canceled)"));
- gtk_label_set_markup(GTK_LABEL(labels[i]), markup);
- g_free(markup);
-
- gtk_label_set_markup(GTK_LABEL(status_labels[i]), error_str);
- break;
- }
-
- markup = g_strdup_printf("<b>%s</b>", sna[i].name);
- gtk_label_set_markup(GTK_LABEL(labels[i]), markup);
- g_free(markup);
-
- gtk_label_set_markup(GTK_LABEL(status_labels[i]), curr_str);
-
- if (sna[i].do_action && !sna[i].do_action(sd, &sna[i])) {
- markup =
- g_strdup_printf("<b><s>%s</s></b> <i>%s</i>",
- sna[i].name, _("(failed)"));
- gtk_label_set_markup(GTK_LABEL(labels[i]), markup);
- g_free(markup);
-
- sd->flag_cancel = TRUE;
-
- gtk_label_set_markup(GTK_LABEL(status_labels[i]), error_str);
- if (sna[i].error) {
- if (sna[i].error->code != 1) {
- /* the user has not cancelled something... */
- g_warning
- (_("Failed while performing \"%s\". Please file a bug report "
- "if this problem persists. (Use the Help\342\206\222Report"
- " bug option.)\n\nDetails: %s"), sna[i].name,
- sna[i].error->message);
- }
-
- g_error_free(sna[i].error);
- } else {
- g_warning
- (_("Failed while performing \"%s\". Please file a bug report "
- "if this problem persists. (Use the Help\342\206\222Report"
- " bug option.)"), sna[i].name);
- }
- break;
- }
-
- gtk_label_set_markup(GTK_LABEL(status_labels[i]), done_str);
- gtk_label_set_markup(GTK_LABEL(labels[i]), sna[i].name);
- }
-
- g_free(labels);
- g_free(status_labels);
-}
-
-static SyncNetArea *sync_dialog_netarea_new(void)
-{
- SyncNetArea *sna = g_new0(SyncNetArea, 1);
-
- sna->vbox = gtk_vbox_new(FALSE, 0);
-
- gtk_container_set_border_width(GTK_CONTAINER(sna->vbox), 10);
-
- gtk_widget_show_all(sna->vbox);
- gtk_widget_hide(sna->vbox);
-
- return sna;
-}
-
-static void sync_dialog_netarea_destroy(SyncNetArea * sna)
-{
- g_return_if_fail(sna != NULL);
-
- g_free(sna);
-}
-
-static void sync_dialog_netarea_show(SyncDialog * sd)
-{
- g_return_if_fail(sd && sd->sna);
-
- gtk_widget_hide(GTK_WIDGET(sd->scroll_box));
- gtk_widget_show(GTK_WIDGET(sd->sna->vbox));
-
- gtk_label_set_markup(GTK_LABEL(sd->label), LABEL_SYNC_SYNCING);
- gtk_window_set_default_size(GTK_WINDOW(sd->dialog), 0, 0);
- gtk_window_reshow_with_initial_size(GTK_WINDOW(sd->dialog));
-}
-
-#if 0
-static void sync_dialog_netarea_hide(SyncDialog * sd)
-{
- g_return_if_fail(sd && sd->sna);
-
- gtk_widget_show(GTK_WIDGET(sd->scroll_box));
- gtk_widget_hide(GTK_WIDGET(sd->sna->vbox));
-
- gtk_label_set_markup(GTK_LABEL(sd->label), LABEL_SYNC_DEFAULT);
- gtk_window_reshow_with_initial_size(GTK_WINDOW(sd->dialog));
-}
-#endif
-
-static void populate_store(GtkListStore * store)
-{
- GSList *entry;
- SyncEntry *e;
-
- gtk_list_store_clear(store);
-
- for (entry = entries; entry; entry = entry->next) {
- GtkTreeIter iter;
-
- e = (SyncEntry *) entry->data;
-
- e->selected = TRUE;
-
- gtk_list_store_append(store, &iter);
- gtk_list_store_set(store, &iter, 0, TRUE, 1, e->fancy_name, 2, e,
- -1);
- }
-}
-
-static void
-sel_toggle(GtkCellRendererToggle * cellrenderertoggle,
- gchar * path_str, GtkTreeModel * model)
-{
- GtkTreeIter iter;
- GtkTreePath *path = gtk_tree_path_new_from_string(path_str);
- SyncEntry *se;
- gboolean active;
-
- gtk_tree_model_get_iter(model, &iter, path);
- gtk_tree_model_get(model, &iter, 0, &active, 2, &se, -1);
-
- se->selected = !active;
-
- gtk_list_store_set(GTK_LIST_STORE(model), &iter, 0, se->selected, -1);
- gtk_tree_path_free(path);
-}
-
-static void close_clicked(void)
-{
- g_main_quit(loop);
-}
-
-static SyncDialog *sync_dialog_new(GtkWidget *parent)
-{
- SyncDialog *sd;
- GtkWidget *dialog;
- GtkWidget *dialog1_vbox;
- GtkWidget *scrolledwindow2;
- GtkWidget *treeview2;
- GtkWidget *dialog1_action_area;
- GtkWidget *button8;
- GtkWidget *button7;
- GtkWidget *button6;
- GtkWidget *label;
- GtkWidget *hbox;
-
- GtkTreeViewColumn *column;
- GtkTreeModel *model;
- GtkListStore *store;
- GtkCellRenderer *cr_text, *cr_toggle;
-
- sd = g_new0(SyncDialog, 1);
- sd->sna = sync_dialog_netarea_new();
-
- dialog = gtk_dialog_new();
- gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(parent));
- gtk_window_set_title(GTK_WINDOW(dialog), _("Network Updater"));
- gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
- gtk_window_set_icon(GTK_WINDOW(dialog),
- icon_cache_get_pixbuf("syncmanager.png"));
- gtk_window_set_default_size(GTK_WINDOW(dialog), 420, 260);
- 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);
-
- gtk_container_set_border_width(GTK_CONTAINER(dialog), 5);
-
-#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(LABEL_SYNC_DEFAULT);
- 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("syncmanager.png"),
- FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0);
- gtk_widget_show_all(hbox);
-
-
- gtk_box_pack_start(GTK_BOX(dialog1_vbox), sd->sna->vbox, TRUE, TRUE,
- 0);
-
- scrolledwindow2 = gtk_scrolled_window_new(NULL, NULL);
- gtk_widget_show(scrolledwindow2);
- gtk_box_pack_start(GTK_BOX(dialog1_vbox), 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);
-
- store =
- gtk_list_store_new(3, G_TYPE_BOOLEAN, G_TYPE_STRING,
- G_TYPE_POINTER);
- model = GTK_TREE_MODEL(store);
-
- 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(sel_toggle), model);
- gtk_tree_view_column_add_attribute(column, cr_toggle, "active", 0);
-
- 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", 1);
-
- populate_store(store);
-
-#if GTK_CHECK_VERSION(2, 14, 0)
- dialog1_action_area = gtk_dialog_get_action_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(_("_Synchronize"));
- 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
- button6 = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
- g_signal_connect(G_OBJECT(button6), "clicked",
- (GCallback) close_clicked, NULL);
- gtk_dialog_add_action_widget(GTK_DIALOG(dialog), button6,
- GTK_RESPONSE_ACCEPT);
-#if GTK_CHECK_VERSION(2, 18, 0)
- gtk_widget_set_can_default(button6, TRUE);
-#else
- GTK_WIDGET_SET_FLAGS(button6, GTK_CAN_DEFAULT);
-#endif
-
- sd->dialog = dialog;
- sd->button_sync = button7;
- sd->button_cancel = button8;
- sd->button_close = button6;
- sd->scroll_box = scrolledwindow2;
- sd->label = label;
-
- return sd;
-}
-
-static void sync_dialog_destroy(SyncDialog * sd)
-{
- gtk_widget_destroy(sd->dialog);
- sync_dialog_netarea_destroy(sd->sna);
- g_free(sd);
-}
-#endif /* HAS_LIBSOUP */