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),