summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeandro A. F. Pereira <leandro@hardinfo.org>2007-01-04 17:15:12 +0000
committerLeandro A. F. Pereira <leandro@hardinfo.org>2007-01-04 17:15:12 +0000
commita1054182ecd202db45cde1883991d70dbb954763 (patch)
tree9353c7e206a89d4684a169704e29cc01b35a0188
parentb447372e7c120e2336fe0ac910792b04e1688af2 (diff)
Add about information.
-rw-r--r--hardinfo2/benchmark.c14
-rw-r--r--hardinfo2/callbacks.c45
-rw-r--r--hardinfo2/callbacks.h4
-rw-r--r--hardinfo2/computer.c14
-rw-r--r--hardinfo2/devices.c14
-rw-r--r--hardinfo2/hardinfo.h8
-rw-r--r--hardinfo2/menu.c8
-rw-r--r--hardinfo2/pixmaps/about-modules.pngbin0 -> 609 bytes
-rw-r--r--hardinfo2/shell.c23
-rw-r--r--hardinfo2/stock.c6
-rw-r--r--hardinfo2/stock.h2
-rw-r--r--hardinfo2/uidefs.xml5
-rw-r--r--hardinfo2/util.c11
13 files changed, 148 insertions, 6 deletions
diff --git a/hardinfo2/benchmark.c b/hardinfo2/benchmark.c
index 8aadb329..5462bccc 100644
--- a/hardinfo2/benchmark.c
+++ b/hardinfo2/benchmark.c
@@ -223,3 +223,17 @@ ModuleEntry *hi_module_get_entries(void)
{
return entries;
}
+
+ModuleAbout *
+hi_module_get_about(void)
+{
+ static ModuleAbout ma[] = {
+ {
+ .author = "Leandro A. F. Pereira (leandro@linuxmag.com.br)",
+ .version = VERSION,
+ .license = "GNU GPL version 2"
+ }
+ };
+
+ return ma;
+}
diff --git a/hardinfo2/callbacks.c b/hardinfo2/callbacks.c
index bc50c668..69201d82 100644
--- a/hardinfo2/callbacks.c
+++ b/hardinfo2/callbacks.c
@@ -68,6 +68,11 @@ void cb_open_web_page()
open_url("http://hardinfo.berlios.de");
}
+void cb_open_online_docs()
+{
+ open_url("http://hardinfo.berlios.de/wiki/Documentation");
+}
+
void cb_report_bug()
{
open_url("http://hardinfo.berlios.de/web/BugReports");
@@ -116,6 +121,46 @@ void cb_toolbar()
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;
+
+ about = gtk_about_dialog_new();
+ gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(about), sm->name);
+ gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(about), ma->version);
+ gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(about),
+ idle_free(g_strdup_printf("Written by %s", ma->author)));
+
+ gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(about),
+ idle_free(g_strdup_printf("Licensed under %s", ma->license)));
+
+ 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 this module.");
+ }
+
+ break;
+ }
+
+ g_free(name);
+}
+
void cb_about()
{
GtkWidget *about;
diff --git a/hardinfo2/callbacks.h b/hardinfo2/callbacks.h
index 9d1c0dea..7b1170e4 100644
--- a/hardinfo2/callbacks.h
+++ b/hardinfo2/callbacks.h
@@ -19,7 +19,10 @@
#ifndef __CALLBACKS_H__
#define __CALLBACKS_H__
+#include <gtk/gtk.h>
+
void cb_about();
+void cb_about_module(GtkAction *action);
void cb_generate_report();
void cb_save_graphic();
void cb_quit();
@@ -28,6 +31,7 @@ void cb_copy_to_clipboard();
void cb_side_pane();
void cb_toolbar();
void cb_open_web_page();
+void cb_open_online_docs();
void cb_report_bug();
#endif /* __CALLBACKS_H__ */
diff --git a/hardinfo2/computer.c b/hardinfo2/computer.c
index b1676b0f..a4a53c9a 100644
--- a/hardinfo2/computer.c
+++ b/hardinfo2/computer.c
@@ -389,3 +389,17 @@ hi_module_init(void)
computer = g_new0(Computer, 1);
moreinfo = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
}
+
+ModuleAbout *
+hi_module_get_about(void)
+{
+ static ModuleAbout ma[] = {
+ {
+ .author = "Leandro A. F. Pereira (leandro@linuxmag.com.br)",
+ .version = VERSION,
+ .license = "GNU GPL version 2"
+ }
+ };
+
+ return ma;
+}
diff --git a/hardinfo2/devices.c b/hardinfo2/devices.c
index eb4cc3e7..b5d97f07 100644
--- a/hardinfo2/devices.c
+++ b/hardinfo2/devices.c
@@ -381,3 +381,17 @@ hi_module_init(void)
{
moreinfo = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
}
+
+ModuleAbout *
+hi_module_get_about(void)
+{
+ static ModuleAbout ma[] = {
+ {
+ .author = "Leandro A. F. Pereira (leandro@linuxmag.com.br)",
+ .version = VERSION,
+ .license = "GNU GPL version 2"
+ }
+ };
+
+ return ma;
+}
diff --git a/hardinfo2/hardinfo.h b/hardinfo2/hardinfo.h
index 63b1c6ad..68b93441 100644
--- a/hardinfo2/hardinfo.h
+++ b/hardinfo2/hardinfo.h
@@ -23,6 +23,7 @@
#include <shell.h>
typedef struct _ModuleEntry ModuleEntry;
+typedef struct _ModuleAbout ModuleAbout;
typedef struct _FileTypes FileTypes;
typedef struct _ProgramParameters ProgramParameters;
@@ -54,6 +55,12 @@ struct _ModuleEntry {
gpointer scan_callback;
};
+struct _ModuleAbout {
+ gchar *author;
+ gchar *version;
+ gchar *license;
+};
+
/* String utility functions */
inline void remove_quotes(gchar *str);
inline void strend(gchar *str, gchar chr);
@@ -79,6 +86,7 @@ void nonblock_sleep(guint msec);
void open_url(gchar *url);
GSList *modules_load_selected(void);
GSList *modules_load_all(void);
+ModuleAbout *module_get_about(ShellModule *module);
void module_entry_scan_all_except(ModuleEntry *entries, gint except_entry);
void module_entry_scan_all(ModuleEntry *entries);
diff --git a/hardinfo2/menu.c b/hardinfo2/menu.c
index 06c205d0..c3994dd4 100644
--- a/hardinfo2/menu.c
+++ b/hardinfo2/menu.c
@@ -33,6 +33,7 @@ static GtkActionEntry entries[] =
{ "InformationMenuAction", NULL, "_Information" }, /* name, stock id, label */
{ "ViewMenuAction", NULL, "_View" },
{ "HelpMenuAction", NULL, "_Help" },
+ { "HelpMenuModulesAction", NULL, "About _Modules" },
{ "MainMenuBarAction", NULL, "" },
{ "ReportAction", HI_STOCK_REPORT, /* name, stock id */
@@ -55,6 +56,11 @@ static GtkActionEntry entries[] =
NULL,
G_CALLBACK(cb_refresh) },
+ { "OnlineDocsAction", GTK_STOCK_HELP,
+ "Contents (online)", "F1",
+ NULL,
+ G_CALLBACK(cb_open_online_docs) },
+
{ "HomePageAction", HI_STOCK_INTERNET,
"_Open HardInfo Web Site", NULL,
NULL,
@@ -66,7 +72,7 @@ static GtkActionEntry entries[] =
G_CALLBACK(cb_report_bug) },
{ "AboutAction", GTK_STOCK_ABOUT,
- "_About", NULL,
+ "_About HardInfo", NULL,
"Displays program version information",
G_CALLBACK(cb_about) },
diff --git a/hardinfo2/pixmaps/about-modules.png b/hardinfo2/pixmaps/about-modules.png
new file mode 100644
index 00000000..0d49f9df
--- /dev/null
+++ b/hardinfo2/pixmaps/about-modules.png
Binary files differ
diff --git a/hardinfo2/shell.c b/hardinfo2/shell.c
index 3259697a..dd2f46ba 100644
--- a/hardinfo2/shell.c
+++ b/hardinfo2/shell.c
@@ -28,6 +28,8 @@
#include <menu.h>
#include <stock.h>
+#include <callbacks.h>
+
/*
* Internal Prototypes ********************************************************
*/
@@ -371,8 +373,10 @@ static void view_menu_select_entry(gpointer data, gpointer data2)
gtk_tree_path_free(path);
}
-static void add_module_to_view_menu(gchar * name, GdkPixbuf * pixbuf)
+static void add_module_to_menu(gchar * name, GdkPixbuf * pixbuf)
{
+ gchar *about_module = g_strdup_printf("AboutModule%s", name);
+
stock_icon_register_pixbuf(pixbuf, name);
GtkActionEntry entries[] = {
@@ -384,14 +388,27 @@ static void add_module_to_view_menu(gchar * name, GdkPixbuf * pixbuf)
NULL, /* tooltip */
NULL, /* callback */
},
+ {
+ about_module,
+ name,
+ name,
+ NULL,
+ name,
+ (GCallback) cb_about_module,
+ },
};
- gtk_action_group_add_actions(shell->action_group, entries, 1, NULL);
+ gtk_action_group_add_actions(shell->action_group, entries, 2, NULL);
gtk_ui_manager_add_ui(shell->ui_manager,
gtk_ui_manager_new_merge_id(shell->ui_manager),
"/menubar/ViewMenu/LastSep",
name, name, GTK_UI_MANAGER_MENU, TRUE);
+
+ gtk_ui_manager_add_ui(shell->ui_manager,
+ gtk_ui_manager_new_merge_id(shell->ui_manager),
+ "/menubar/HelpMenu/HelpMenuModules/LastSep",
+ about_module, about_module, GTK_UI_MANAGER_AUTO, TRUE);
}
static void
@@ -435,7 +452,7 @@ static void add_modules_to_gui(gpointer data, gpointer user_data)
-1);
}
- add_module_to_view_menu(module->name, module->icon);
+ add_module_to_menu(module->name, module->icon);
if (module->entries) {
ShellModuleEntry *entry;
diff --git a/hardinfo2/stock.c b/hardinfo2/stock.c
index 7dc22b7d..98052186 100644
--- a/hardinfo2/stock.c
+++ b/hardinfo2/stock.c
@@ -25,8 +25,10 @@ static struct {
gchar *filename;
gchar *stock_id;
} stock_icons[] = {
- { "report.png", HI_STOCK_REPORT },
- { "internet.png", HI_STOCK_INTERNET },
+ { "report.png", HI_STOCK_REPORT },
+ { "internet.png", HI_STOCK_INTERNET },
+ { "module.png", HI_STOCK_MODULE },
+ { "about-modules.png", HI_STOCK_ABOUT_MODULES },
};
static GtkIconFactory *icon_factory;
diff --git a/hardinfo2/stock.h b/hardinfo2/stock.h
index 60ee782a..8f4e634b 100644
--- a/hardinfo2/stock.h
+++ b/hardinfo2/stock.h
@@ -21,6 +21,8 @@
#define HI_STOCK_REPORT "hi-stock-report"
#define HI_STOCK_INTERNET "hi-stock-internet"
+#define HI_STOCK_MODULE "hi-stock-module"
+#define HI_STOCK_ABOUT_MODULES "hi-stock-about-modules"
void stock_icons_init(void);
void stock_icon_register(gchar *filename, gchar *stock_id);
diff --git a/hardinfo2/uidefs.xml b/hardinfo2/uidefs.xml
index 3eff07e4..f4fad0e3 100644
--- a/hardinfo2/uidefs.xml
+++ b/hardinfo2/uidefs.xml
@@ -17,9 +17,14 @@
<separator name="LastSep"/>
</menu>
<menu name="HelpMenu" action="HelpMenuAction">
+ <menuitem name="OnlineDocs" action="OnlineDocsAction"/>
+ <separator/>
<menuitem name="WebPage" action="HomePageAction"/>
<menuitem name="ReportBug" action="ReportBugAction"/>
<separator/>
+ <menu name="HelpMenuModules" action="HelpMenuModulesAction">
+ <separator name="LastSep"/>
+ </menu>
<menuitem name="About" action="AboutAction"/>
</menu>
</menubar>
diff --git a/hardinfo2/util.c b/hardinfo2/util.c
index ecd2b6fa..b51dab5d 100644
--- a/hardinfo2/util.c
+++ b/hardinfo2/util.c
@@ -555,6 +555,17 @@ static void module_free(ShellModule *module)
g_free(module);
}
+ModuleAbout *module_get_about(ShellModule *module)
+{
+ ModuleAbout *(*get_about)(void);
+
+ if (g_module_symbol(module->dll, "hi_module_get_about", (gpointer) &get_about)) {
+ return get_about();
+ }
+
+ return NULL;
+}
+
static GSList *modules_check_deps(GSList *modules)
{
GSList *mm;