diff options
author | Ulf Lamping <ulf.lamping@web.de> | 2004-06-22 16:28:27 +0000 |
---|---|---|
committer | Ulf Lamping <ulf.lamping@web.de> | 2004-06-22 16:28:27 +0000 |
commit | eab0af6659b193eac71555d0c63961067808c524 (patch) | |
tree | d816bfbada016621f71d41c4f21bd08a715afbed | |
parent | 00a21837110b9b8f454f43cc0d7f6b4b589e74fd (diff) |
add functionality, to show html files from the local installation
svn path=/trunk/; revision=11213
-rw-r--r-- | gtk/about_dlg.c | 81 | ||||
-rw-r--r-- | gtk/about_dlg.h | 38 | ||||
-rw-r--r-- | gtk/menu.c | 19 | ||||
-rw-r--r-- | gtk/webbrowser.c | 49 |
4 files changed, 153 insertions, 34 deletions
diff --git a/gtk/about_dlg.c b/gtk/about_dlg.c index ce00784336..d70249419c 100644 --- a/gtk/about_dlg.c +++ b/gtk/about_dlg.c @@ -1,6 +1,6 @@ /* about_dlg.c * - * $Id: about_dlg.c,v 1.14 2004/06/21 17:25:19 ulfl Exp $ + * $Id: about_dlg.c,v 1.15 2004/06/22 16:28:27 ulfl Exp $ * * Ulf Lamping <ulf.lamping@web.de> * @@ -288,26 +288,83 @@ about_ethereal_destroy_cb(GtkWidget *win _U_, gpointer user_data _U_) void -url_ethereal_cb( GtkWidget *w _U_, gpointer data _U_) +url_onlinepage_cb( GtkWidget *widget, gpointer data, onlinepage_action_e action) { - browser_open_url ("http://www.ethereal.com"); + switch(action) { + case(ONLINEPAGE_HOME): + browser_open_url ("http://www.ethereal.com"); + break; + case(ONLINEPAGE_DOWNLOAD): + browser_open_url ("http://www.ethereal.com/download.html"); + break; + case(ONLINEPAGE_USERGUIDE): + browser_open_url ("http://www.ethereal.com/docs/user-guide"); + break; + case(ONLINEPAGE_FAQ): + browser_open_url ("http://www.ethereal.com/faq.html"); + break; + case(ONLINEPAGE_SAMPLE): + browser_open_url ("http://www.ethereal.com/sample"); + break; + default: + g_assert_not_reached(); + } } -void -url_downloads_cb( GtkWidget *w _U_, gpointer data _U_) -{ - browser_open_url ("http://www.ethereal.com/download.html"); -} +extern gchar * +filename2uri(gchar *filename); +/* browse a file relative to the program dir */ void -url_user_guide_cb( GtkWidget *w _U_, gpointer data _U_) +browser_open_program_file(gchar *filename) { - browser_open_url ("http://www.ethereal.com/docs/user-guide"); + gchar *uri; + gchar *prog_path; + gchar *file_path; + + + /* get ethereal program base dir */ + prog_path = g_strdup(ethereal_path); + prog_path = get_dirname((char *) prog_path); + + /* build filename */ + file_path = g_strdup_printf("%s/%s", prog_path, filename); + + /* convert filename to uri */ + uri = filename2uri(file_path); + + /* show the uri */ + browser_open_url (uri); + + g_free(prog_path); + g_free(file_path); + g_free(uri); } void -url_faqs_cb( GtkWidget *w _U_, gpointer data _U_) +url_localpage_cb( GtkWidget *w _U_, gpointer data, localpage_action_e action) { - browser_open_url ("http://www.ethereal.com/faq.html"); + switch(action) { + case(LOCALPAGE_MAN_ETHEREAL): + browser_open_program_file("ethereal.html"); + break; + case(LOCALPAGE_MAN_ETHEREAL_FILTER): + browser_open_program_file("ethereal-filter.html"); + break; + case(LOCALPAGE_MAN_TETHEREAL): + browser_open_program_file("tethereal.html"); + break; + case(LOCALPAGE_MAN_MERGECAP): + browser_open_program_file("mergecap.html"); + break; + case(LOCALPAGE_MAN_EDITCAP): + browser_open_program_file("editcap.html"); + break; + case(LOCALPAGE_MAN_TEXT2PCAP): + browser_open_program_file("text2pcap.html"); + break; + default: + g_assert_not_reached(); + } } diff --git a/gtk/about_dlg.h b/gtk/about_dlg.h index fd31e73fc4..0e7c3c441d 100644 --- a/gtk/about_dlg.h +++ b/gtk/about_dlg.h @@ -1,7 +1,7 @@ /* about_dlg.h * Declarations of routines for the "About" dialog * - * $Id: about_dlg.h,v 1.4 2004/06/21 17:25:19 ulfl Exp $ + * $Id: about_dlg.h,v 1.5 2004/06/22 16:28:27 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -37,32 +37,36 @@ */ extern void about_ethereal_cb( GtkWidget *widget, gpointer data); -/** User requested the "Homepage" by menu. - * - * @param widget parent widget (unused) - * @param data unused - */ -extern void url_ethereal_cb( GtkWidget *widget, gpointer data); +typedef enum { + ONLINEPAGE_HOME, + ONLINEPAGE_USERGUIDE, + ONLINEPAGE_FAQ, + ONLINEPAGE_DOWNLOAD, + ONLINEPAGE_SAMPLE +} onlinepage_action_e; -/** User requested the "Downloads" page by menu. - * - * @param widget parent widget (unused) - * @param data unused - */ -extern void url_downloads_cb( GtkWidget *widget, gpointer data); -/** User requested the "User's Guide" page by menu. +/** User requested one of the online pages by menu. * * @param widget parent widget (unused) * @param data unused */ -extern void url_user_guide_cb( GtkWidget *widget, gpointer data); +extern void url_onlinepage_cb( GtkWidget *widget, gpointer data, onlinepage_action_e action); + +typedef enum { + LOCALPAGE_MAN_ETHEREAL, + LOCALPAGE_MAN_ETHEREAL_FILTER, + LOCALPAGE_MAN_TETHEREAL, + LOCALPAGE_MAN_MERGECAP, + LOCALPAGE_MAN_EDITCAP, + LOCALPAGE_MAN_TEXT2PCAP +} localpage_action_e; -/** User requested the "FAQ's" page by menu. +/** User requested one of the local html pages by menu. * * @param widget parent widget (unused) * @param data unused */ -extern void url_faqs_cb( GtkWidget *widget, gpointer data); +extern void url_localpage_cb( GtkWidget *widget, gpointer data, localpage_action_e action); #endif /* __ABOUT_DLG_H__ */ diff --git a/gtk/menu.c b/gtk/menu.c index f7c288ce77..ef8608f25a 100644 --- a/gtk/menu.c +++ b/gtk/menu.c @@ -1,7 +1,7 @@ /* menu.c * Menu routines * - * $Id: menu.c,v 1.205 2004/06/22 01:11:14 guy Exp $ + * $Id: menu.c,v 1.206 2004/06/22 16:28:27 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -322,11 +322,20 @@ static GtkItemFactoryEntry menu_items[] = ITEM_FACTORY_ENTRY("/_Help", NULL, NULL, 0, "<Branch>", NULL), ITEM_FACTORY_STOCK_ENTRY("/Help/_Contents", "F1", help_cb, 0, GTK_STOCK_HELP), ITEM_FACTORY_ENTRY("/Help/_Supported Protocols", NULL, supported_cb, 0, NULL, NULL), + ITEM_FACTORY_ENTRY("/Help/Manual Pages", NULL, NULL, 0, "<Branch>", NULL), + ITEM_FACTORY_ENTRY("/Help/Manual Pages/Ethereal", NULL, url_localpage_cb, LOCALPAGE_MAN_ETHEREAL, NULL, NULL), + ITEM_FACTORY_ENTRY("/Help/Manual Pages/Ethereal Filter", NULL, url_localpage_cb, LOCALPAGE_MAN_ETHEREAL_FILTER, NULL, NULL), + ITEM_FACTORY_ENTRY("/Help/Manual Pages/<separator>", NULL, NULL, 0, "<Separator>", NULL), + ITEM_FACTORY_ENTRY("/Help/Manual Pages/Tethereal", NULL, url_localpage_cb, LOCALPAGE_MAN_TETHEREAL, NULL, NULL), + ITEM_FACTORY_ENTRY("/Help/Manual Pages/Mergecap", NULL, url_localpage_cb, LOCALPAGE_MAN_MERGECAP, NULL, NULL), + ITEM_FACTORY_ENTRY("/Help/Manual Pages/Editcap", NULL, url_localpage_cb, LOCALPAGE_MAN_EDITCAP, NULL, NULL), + ITEM_FACTORY_ENTRY("/Help/Manual Pages/Text2pcap", NULL, url_localpage_cb, LOCALPAGE_MAN_TEXT2PCAP, NULL, NULL), ITEM_FACTORY_ENTRY("/Help/Ethereal Online", NULL, NULL, 0, "<Branch>", NULL), - ITEM_FACTORY_STOCK_ENTRY("/Help/Ethereal Online/Home Page", NULL, url_ethereal_cb, 0, GTK_STOCK_HOME), - ITEM_FACTORY_ENTRY("/Help/Ethereal Online/User's Guide", NULL, url_user_guide_cb, 0, NULL, NULL), - ITEM_FACTORY_ENTRY("/Help/Ethereal Online/FAQ's", NULL, url_faqs_cb, 0, NULL, NULL), - ITEM_FACTORY_ENTRY("/Help/Ethereal Online/Downloads", NULL, url_downloads_cb, 0, NULL, NULL), + ITEM_FACTORY_STOCK_ENTRY("/Help/Ethereal Online/Home Page", NULL, url_onlinepage_cb, ONLINEPAGE_HOME, GTK_STOCK_HOME), + ITEM_FACTORY_ENTRY("/Help/Ethereal Online/User's Guide", NULL, url_onlinepage_cb, ONLINEPAGE_USERGUIDE, NULL, NULL), + ITEM_FACTORY_ENTRY("/Help/Ethereal Online/FAQ's", NULL, url_onlinepage_cb, ONLINEPAGE_FAQ, NULL, NULL), + ITEM_FACTORY_ENTRY("/Help/Ethereal Online/Downloads", NULL, url_onlinepage_cb, ONLINEPAGE_DOWNLOAD, NULL, NULL), + ITEM_FACTORY_ENTRY("/Help/Ethereal Online/Example Files", NULL, url_onlinepage_cb, ONLINEPAGE_SAMPLE, NULL, NULL), ITEM_FACTORY_ENTRY("/Help/<separator>", NULL, NULL, 0, "<Separator>", NULL), ITEM_FACTORY_ENTRY("/Help/_About Ethereal", NULL, about_ethereal_cb, 0, NULL, NULL) diff --git a/gtk/webbrowser.c b/gtk/webbrowser.c index 58c5d0322e..21f26dd6a8 100644 --- a/gtk/webbrowser.c +++ b/gtk/webbrowser.c @@ -169,3 +169,52 @@ strreplace (const gchar *string, } #endif /* MUST_LAUNCH_BROWSER_OURSELVES */ + +/** Convert local absolute path to uri. + * + * @param filename to (absolute pathed) filename to convert + * @return a newly allocated uri, you must g_free it later + */ +gchar * +filename2uri(gchar *filename) +{ + int i = 0; + gchar *file_tmp; + GString *filestr; + + + filestr = g_string_sized_new(200); + + /* this escaping is somewhat slow but should working fine */ + for(i=0; filename[i]; i++) { + switch(filename[i]) { + case(' '): + g_string_append(filestr, "%20"); + break; + case('%'): + g_string_append(filestr, "%%"); + break; + case('\\'): + g_string_append_c(filestr, '/'); + break; + /* XXX - which other chars need to be escaped? */ + default: + g_string_append_c(filestr, filename[i]); + } + } + + + /* prepend URI header "file:" appropriate for the system */ +#ifdef G_OS_WIN32 + /* XXX - how do we handle UNC names (e.g. //servername/sharename/dir1/dir2/capture-file.cap) */ + g_string_prepend(filestr, "file:///"); +#else + g_string_prepend(filestr, "file:"); +#endif + + file_tmp = filestr->str; + + g_string_free(filestr, FALSE /* don't free segment data */); + + return file_tmp; +}
\ No newline at end of file |