aboutsummaryrefslogtreecommitdiffstats
path: root/gtk
diff options
context:
space:
mode:
authorUlf Lamping <ulf.lamping@web.de>2004-06-22 16:28:27 +0000
committerUlf Lamping <ulf.lamping@web.de>2004-06-22 16:28:27 +0000
commiteab0af6659b193eac71555d0c63961067808c524 (patch)
treed816bfbada016621f71d41c4f21bd08a715afbed /gtk
parent00a21837110b9b8f454f43cc0d7f6b4b589e74fd (diff)
add functionality, to show html files from the local installation
svn path=/trunk/; revision=11213
Diffstat (limited to 'gtk')
-rw-r--r--gtk/about_dlg.c81
-rw-r--r--gtk/about_dlg.h38
-rw-r--r--gtk/menu.c19
-rw-r--r--gtk/webbrowser.c49
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