From Harald Welte:
[obnox/wireshark/wip.git] / epan / prefs-int.h
index 60267daa7aed3bb4518f4f3f356b328e87a0df07..8208bfa3d24fb50a4e51fbf1268758764c46b968 100644 (file)
 #ifndef __PREFS_INT_H__
 #define __PREFS_INT_H__
 
+#include <stdio.h>
+
+/**
+ *@file
+ */
+
 struct pref_module {
-       const char *name;       /* name of module */
-       const char *title;      /* title of module (displayed in preferences notebook) */
-       gboolean is_subtree;    /* if TRUE, this has other modules, not preferences, under it */
-       void (*apply_cb)(void); /* routine to call when preferences applied */
-       GList   *prefs;         /* list of its preferences or submodules */
-       int     numprefs;       /* number of non-obsolete preferences */
-       gboolean prefs_changed; /* if TRUE, a preference has changed since we last checked */
-       gboolean obsolete;      /* if TRUE, this is a module that used to
-                                  exist but no longer does */
+       const char *name;                       /**< name of module */
+       const char *title;                      /**< title of module (displayed in preferences list) */
+       const char *description;        /**< Description of module (displayed in preferences notebook) */
+       void (*apply_cb)(void);         /**< routine to call when preferences applied */
+       GList   *prefs;                         /**< list of its preferences */
+       emem_tree_t *submodules;        /**< list of its submodules */
+       int     numprefs;                               /**< number of non-obsolete preferences */
+       gboolean prefs_changed;         /**< if TRUE, a preference has changed since we last checked */
+       gboolean obsolete;                      /**< if TRUE, this is a module that used to
+                                                                * exist but no longer does
+                                                                */
 };
 
-/*
- * Module used for protocol preferences. With MSVC and a 
- * libwireshark.dll, we need a special declaration.
+/**
+ * Module used for protocol preferences.
+ * With MSVC and a libwireshark.dll, we need a special declaration.
  */
 WS_VAR_IMPORT module_t *protocols_module;
 
-/*
+/**
  * PREF_OBSOLETE is used for preferences that a module used to support
  * but no longer supports; we give different error messages for them.
  */
@@ -54,53 +62,70 @@ typedef enum {
        PREF_ENUM,
        PREF_STRING,
        PREF_RANGE,
+       PREF_STATIC_TEXT,
+       PREF_UAT,
        PREF_OBSOLETE
 } pref_type_t;
 
+/** Struct to hold preference data */
 struct preference {
-       const char *name;       /* name of preference */
-       const char *title;      /* title to use in GUI */
-       const char *description; /* human-readable description of preference */
-       int     ordinal;        /* ordinal number of this preference */
-       pref_type_t type;       /* type of that preference */
+       const char *name;                       /**< name of preference */
+       const char *title;                      /**< title to use in GUI */
+       const char *description;        /**< human-readable description of preference */
+       int     ordinal;                                /**< ordinal number of this preference */
+       pref_type_t type;                       /**< type of that preference */
        union {
                guint *uint;
                gboolean *boolp;
                gint *enump;
                const char **string;
                range_t **range;
-       } varp;                 /* pointer to variable storing the value */
+               void* uat;
+       } varp;                                         /**< pointer to variable storing the value */
        union {
                guint uint;
                gboolean boolval;
                gint enumval;
                char *string;
                range_t *range;
-       } saved_val;            /* original value, when editing from the GUI */
+       } saved_val;                            /**< original value, when editing from the GUI */
        union {
-         guint base;                   /* input/output base, for PREF_UINT */
-         guint32 max_value;            /* maximum value of a range */
+               guint uint;
+               gboolean boolval;
+               gint enumval;
+               char *string;
+               range_t *range;
+       } default_val;                          /**< the default value of the preference */
+       union {
+         guint base;                           /**< input/output base, for PREF_UINT */
+         guint32 max_value;            /**< maximum value of a range */
          struct {
-           const enum_val_t *enumvals; /* list of name & values */
-           gboolean radio_buttons;     /* TRUE if it should be shown as
-                                          radio buttons rather than as an
-                                          option menu or combo box in
-                                          the preferences tab */
-         } enum_info;                  /* for PREF_ENUM */
-       } info;                 /* display/text file information */
-       void    *control;       /* handle for GUI control for this preference */
+           const enum_val_t *enumvals; /**< list of name & values */
+           gboolean radio_buttons;     /**< TRUE if it should be shown as
+                                                               radio buttons rather than as an
+                                                               option menu or combo box in
+                                                               the preferences tab */
+         } enum_info;                          /**< for PREF_ENUM */
+       } info;                                         /**< display/text file information */
+       void    *control;                       /**< handle for GUI control for this preference */
 };
 
-gint find_val_for_string(const char *needle, const enum_val_t *haystack,
-    gint default_value);
-
-
 /* read_prefs_file: read in a generic config file and do a callback to */
 /* pref_set_pair_fct() for every key/value pair found */
-typedef int (*pref_set_pair_cb) (gchar *key, gchar *value);
+/**
+ * Given a string of the form "<pref name>:<pref value>", as might appear
+ * as an argument to a "-o" option, parse it and set the preference in
+ * question.
+ * @return an indication of whether it succeeded or failed
+ * in some fashion.
+ */
+typedef prefs_set_pref_e (*pref_set_pair_cb) (gchar *key, gchar *value, void *private_data, gboolean return_range_errors);
 
+/** read the preferences file (or similiar) and call the callback
+ * function to set each key/value pair found
+ */
 int
-read_prefs_file(const char *pf_path, FILE *pf, pref_set_pair_cb pref_set_pair_fct);
+read_prefs_file(const char *pf_path, FILE *pf, pref_set_pair_cb pref_set_pair_fct, void *private_data);