tSupport added for help in the GUI options dialog. - vaccinewars - be a doctor and try to vaccinate the world (HTM) git clone git://src.adamsgaard.dk/vaccinewars (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit bb0e0d94365e9e4556254a087a00d84d3b70edc9 (DIR) parent 13bf14f9aaae235b67d03104a6679ad55eac4fba (HTM) Author: Ben Webb <ben@salilab.org> Date: Mon, 5 Aug 2002 11:41:01 +0000 Support added for help in the GUI options dialog. Diffstat: M src/dopewars.c | 23 +++++++++++++++++------ M src/dopewars.h | 1 + M src/gtkport/gtkport.c | 29 +++++++++++++++++++---------- M src/gtkport/gtkport.h | 4 +++- M src/gui_client/optdialog.c | 29 +++++++++++++++++++++++++++++ 5 files changed, 69 insertions(+), 17 deletions(-) --- (DIR) diff --git a/src/dopewars.c b/src/dopewars.c t@@ -2252,26 +2252,37 @@ gboolean SetConfigValue(int GlobalIndex, int StructIndex, } /* - * Returns the URL of the index file for the local HTML documentation. + * Returns the URL of the directory containing local HTML documentation. */ -gchar *GetDocIndex(void) +gchar *GetDocRoot(void) { - static gchar *indexfile = "index.html"; gchar *path; #ifdef CYGWIN gchar *bindir; bindir = GetBinaryDir(); - path = g_strdup_printf("file://%s\\%s", bindir, indexfile); + path = g_strdup_printf("file://%s\\", bindir); g_free(bindir); #else - path = g_strdup_printf("file://%s/doc/%s-%s/%s", DATADIR, PACKAGE, - VERSION, indexfile); + path = g_strdup_printf("file://%s/doc/%s-%s/", DATADIR, PACKAGE, VERSION); #endif return path; } /* + * Returns the URL of the index file for the local HTML documentation. + */ +gchar *GetDocIndex(void) +{ + gchar *file, *root; + + root = GetDocRoot(); + file = g_strdup_printf("%sindex.html", root); + g_free(root); + return file; +} + +/* * Returns the pathname of the global (all users) configuration file, * as a dynamically-allocated string that must be later freed. On * error, NULL is returned. (DIR) diff --git a/src/dopewars.h b/src/dopewars.h t@@ -430,6 +430,7 @@ void RestoreConfig(void); void ScannerErrorHandler(GScanner *scanner, gchar *msg, gint error); gboolean IsConnectedPlayer(Player *play); void BackupConfig(void); +gchar *GetDocRoot(void); gchar *GetDocIndex(void); gchar *GetGlobalConfigFile(void); gchar *GetLocalConfigFile(void); (DIR) diff --git a/src/gtkport/gtkport.c b/src/gtkport/gtkport.c t@@ -47,6 +47,7 @@ const gchar *GTK_STOCK_CANCEL = N_("_Cancel"); const gchar *GTK_STOCK_REFRESH = N_("_Refresh"); const gchar *GTK_STOCK_YES = N_("_Yes"); const gchar *GTK_STOCK_NO = N_("_No"); +const gchar *GTK_STOCK_HELP = N_("_Help"); #endif #ifdef CYGWIN t@@ -812,6 +813,11 @@ LRESULT CALLBACK GtkPanedProc(HWND hwnd, UINT msg, UINT wParam, return FALSE; } +void DisplayHTML(GtkWidget *parent, const gchar *bin, const gchar *target) +{ + ShellExecute(parent->hWnd, "open", target, NULL, NULL, 0); +} + LRESULT CALLBACK GtkUrlProc(HWND hwnd, UINT msg, UINT wParam, LONG lParam) { GtkWidget *widget; t@@ -838,12 +844,9 @@ LRESULT CALLBACK GtkUrlProc(HWND hwnd, UINT msg, UINT wParam, LONG lParam) } return TRUE; } else if (msg == WM_LBUTTONUP) { - gchar *target; - widget = GTK_WIDGET(GetWindowLong(hwnd, GWL_USERDATA)); - target = GTK_URL(widget)->target; - ShellExecute(hwnd, "open", target, NULL, NULL, 0); + DisplayHTML(widget, NULL, GTK_URL(widget)->target); return FALSE; } else return DefWindowProc(hwnd, msg, wParam, lParam); t@@ -5297,17 +5300,13 @@ static void gtk_url_set_cursor(GtkWidget *widget, GtkWidget *label) gdk_cursor_destroy(cursor); } -static gboolean gtk_url_triggered(GtkWidget *widget, GdkEventButton *event, - gpointer data) +void DisplayHTML(GtkWidget *parent, const gchar *bin, const gchar *target) { #ifdef HAVE_FORK - gchar *bin, *target, *args[3]; + char *args[3]; pid_t pid; int status; - target = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "target"); - bin = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "bin"); - if (target && target[0] && bin && bin[0]) { args[0] = bin; args[1] = target; t@@ -5328,6 +5327,16 @@ static gboolean gtk_url_triggered(GtkWidget *widget, GdkEventButton *event, } } #endif +} + +static gboolean gtk_url_triggered(GtkWidget *widget, GdkEventButton *event, + gpointer data) +{ + gchar *bin, *target; + + bin = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "bin"); + target = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "target"); + DisplayHTML(widget, bin, target); return TRUE; } (DIR) diff --git a/src/gtkport/gtkport.h b/src/gtkport/gtkport.h t@@ -750,7 +750,8 @@ struct _GtkUrl { #if CYGWIN || !HAVE_GLIB2 extern const gchar *GTK_STOCK_OK, *GTK_STOCK_CLOSE, *GTK_STOCK_CANCEL, - *GTK_STOCK_REFRESH, *GTK_STOCK_YES, *GTK_STOCK_NO; + *GTK_STOCK_REFRESH, *GTK_STOCK_YES, *GTK_STOCK_NO, + *GTK_STOCK_HELP; typedef enum { t@@ -785,5 +786,6 @@ GtkWidget *gtk_url_new(const gchar *text, const gchar *target, GtkWidget *NewStockButton(const gchar *label, GtkAccelGroup *accel_group); gchar *GtkGetFile(const GtkWidget *parent, const gchar *oldname, const gchar *title); +void DisplayHTML(GtkWidget *parent, const gchar *bin, const gchar *target); #endif /* __GTKPORT_H__ */ (DIR) diff --git a/src/gui_client/optdialog.c b/src/gui_client/optdialog.c t@@ -557,6 +557,29 @@ static void OKCallback(GtkWidget *widget, GtkWidget *dialog) gtk_widget_destroy(dialog); } +static gchar *GetHelpPage(const gchar *pagename) +{ + gchar *root, *file; + + root = GetDocRoot(); + file = g_strdup_printf("%shelp%c%s.html", root, G_DIR_SEPARATOR, pagename); + g_free(root); + return file; +} + +static void HelpCallback(GtkWidget *widget, GtkWidget *notebook) +{ + const static gchar *pagehelp[] = { + "general", "locations", "drugs", "guns", "cops", "server", "sounds" + }; + gint page = gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook)); + gchar *help; + + help = GetHelpPage(pagehelp[page]); + DisplayHTML(widget, WebBrowser, help); + g_free(help); +} + static void FinishOptDialog(GtkWidget *widget, gpointer data) { FreeConfigWidgets(); t@@ -950,6 +973,12 @@ void OptDialog(GtkWidget *widget, gpointer data) gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(OKCallback), (gpointer)dialog); gtk_box_pack_start_defaults(GTK_BOX(hbbox), button); + + button = NewStockButton(GTK_STOCK_HELP, accel_group); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + GTK_SIGNAL_FUNC(HelpCallback), (gpointer)notebook); + gtk_box_pack_start_defaults(GTK_BOX(hbbox), button); + button = NewStockButton(GTK_STOCK_CANCEL, accel_group); gtk_signal_connect_object(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),