]> git.street.me.uk Git - andy/viking.git/commitdiff
Rework layer set parameters so it should be more easily extendable.
authorRob Norris <rw_norris@hotmail.com>
Mon, 16 Jan 2017 00:04:35 +0000 (00:04 +0000)
committerRob Norris <rw_norris@hotmail.com>
Sat, 29 Apr 2017 16:43:33 +0000 (17:43 +0100)
Switch from individual variables as function parameters to a single type.

13 files changed:
src/file.c
src/preferences.c
src/uibuilder.c
src/uibuilder.h
src/vikcoordlayer.c
src/vikdemlayer.c
src/vikgeoreflayer.c
src/vikgpslayer.c
src/viklayer.c
src/viklayer.h
src/viklayer_defaults.c
src/vikmapslayer.c
src/viktrwlayer.c

index 943c56db62f7dc1cd60a8dc4ad2fca94cc29761f..03abf09b46e270d05dea74d536d5c97cc1f85aa3 100644 (file)
@@ -254,9 +254,13 @@ static void string_list_delete ( gpointer key, gpointer l, gpointer user_data )
 
 static void string_list_set_param (gint i, GList *list, gpointer *layer_and_vp)
 {
-  VikLayerParamData x;
-  x.sl = list;
-  vik_layer_set_param ( VIK_LAYER(layer_and_vp[0]), i, x, layer_and_vp[1], TRUE );
+  VikLayerSetParam vlsp;
+  vlsp.id                  = i;
+  vlsp.data.sl             = list;
+  vlsp.vp                  = layer_and_vp[1];
+  vlsp.is_file_operation   = TRUE;
+
+  vik_layer_set_param ( VIK_LAYER(layer_and_vp[0]), &vlsp );
 }
 
 /**
@@ -358,9 +362,10 @@ static gboolean file_read ( VikAggregateLayer *top, FILE *f, const gchar *dirpat
         else
         {
           /* add any string lists we've accumulated */
-          gpointer layer_and_vp[2];
+          gpointer layer_and_vp[3];
           layer_and_vp[0] = stack->data;
           layer_and_vp[1] = vp;
+          layer_and_vp[2] = (gpointer)dirpath;
           g_hash_table_foreach ( string_lists, (GHFunc) string_list_set_param, layer_and_vp );
           g_hash_table_remove_all ( string_lists );
 
@@ -509,7 +514,13 @@ static gboolean file_read ( VikAggregateLayer *top, FILE *f, const gchar *dirpat
                 /* STRING or STRING_LIST -- if STRING_LIST, just set param to add a STRING */
                 default: x.s = line;
               }
-              vik_layer_set_param ( VIK_LAYER(stack->data), i, x, vp, TRUE );
+
+              VikLayerSetParam vlsp;
+              vlsp.id                  = i;
+              vlsp.data                = x;
+              vlsp.vp                  = vp;
+              vlsp.is_file_operation   = TRUE;
+              vik_layer_set_param ( VIK_LAYER(stack->data), &vlsp );
             }
             found_match = TRUE;
             break;
index 21fff34b83e2d67bf6bff4f8f190449bc399c818..7945c39ced14b7e496038ac49328349eb6723b1f 100644 (file)
@@ -195,7 +195,8 @@ void a_preferences_show_window(GtkWindow *parent) {
     preferences_load_from_file();
     if ( a_uibuilder_properties_factory ( _("Preferences"), parent, contiguous_params, params_count,
                                (gchar **) groups_names->pdata, groups_names->len, // groups, groups_count, // groups? what groups?!
-                               (gboolean (*) (gpointer,guint16,VikLayerParamData,gpointer,gboolean)) preferences_run_setparam,
+                               NULL,
+                               (gboolean (*) (gpointer,guint16,VikLayerParamData,gpointer)) preferences_run_setparam,
                                NULL /* not used */, contiguous_params,
                                 preferences_run_getparam, NULL, NULL /* not used */ ) ) {
       a_preferences_save_to_file();
index 7131d3527147c87ce64cbd93a30b0cd94a0c1e9a..c351106170ec9c0d4c03f81c1737acdb3fde8901 100644 (file)
@@ -333,13 +333,13 @@ gint a_uibuilder_properties_factory ( const gchar *dialog_name,
                                       guint16 params_count,
                                       gchar **groups,
                                       guint8 groups_count,
-                                      gboolean (*setparam) (gpointer,guint16,VikLayerParamData,gpointer,gboolean),
+                                      gboolean (*setparam) (gpointer,gpointer),
+                                      gboolean (*setparam4) (gpointer,guint16,VikLayerParamData,gpointer),
                                       gpointer pass_along1,
                                       gpointer pass_along2,
                                       VikLayerParamData (*getparam) (gpointer,guint16,gboolean),
                                       gpointer pass_along_getparam,
                                       void (*changeparam) (GtkWidget*, ui_change_values) )
-                                      /* pass_along1 and pass_along2 are for set_param first and last params */
 {
   guint16 i, j, widget_count = 0;
   gboolean must_redraw = FALSE;
@@ -466,15 +466,20 @@ gint a_uibuilder_properties_factory ( const gchar *dialog_name,
     resp = gtk_dialog_run (GTK_DIALOG (dialog));
     if ( resp == GTK_RESPONSE_ACCEPT )
     {
+      VikLayerSetParam vlsp;
+      vlsp.is_file_operation = FALSE;
       for ( i = 0, j = 0; i < params_count; i++ )
       {
         if ( params[i].group != VIK_LAYER_NOT_IN_PROPERTIES )
         {
-          if ( setparam ( pass_along1,
-                         i,
-                         a_uibuilder_widget_get_value ( widgets[j], &(params[i]) ),
-                         pass_along2,
-                         FALSE ) )
+          vlsp.id = i;
+          vlsp.vp = pass_along2;
+          vlsp.data = a_uibuilder_widget_get_value ( widgets[j], &(params[i]) );
+          // Main callback into each layer's setparam
+          if ( setparam && setparam ( pass_along1, &vlsp ) )
+            must_redraw = TRUE;
+          // Or a basic callback for each parameter
+          else if ( setparam4 && setparam4 ( pass_along1, i, vlsp.data, pass_along2 ) )
             must_redraw = TRUE;
           j++;
         }
@@ -531,6 +536,7 @@ VikLayerParamData *a_uibuilder_run_dialog (  const gchar *dialog_name, GtkWindow
                                          params_count, 
                                          groups, 
                                          groups_count,
+                                         NULL,
                                          (gpointer) uibuilder_run_setparam, 
                                          paramdatas, 
                                          params,
index 59539ada03ea23c99d135544be9eb76efcb9a51b..af8b60313fefcdda465828b1c85cbce35b5fc454 100644 (file)
@@ -40,6 +40,13 @@ typedef union {
   gpointer ptr; // For internal usage - don't save this value in a file!
 } VikLayerParamData;
 
+typedef struct {
+  guint16             id;
+  VikLayerParamData   data;
+  gpointer            vp; // AKA VikViewport*
+  gboolean            is_file_operation; // denotes if for file I/O, as opposed to display/cut/copy etc... operations
+} VikLayerSetParam;
+
 typedef enum {
   VIK_LAYER_WIDGET_CHECKBUTTON=0,
   VIK_LAYER_WIDGET_RADIOGROUP,
@@ -168,13 +175,13 @@ gint a_uibuilder_properties_factory ( const gchar *dialog_name,
                                       guint16 params_count,
                                       gchar **groups,
                                       guint8 groups_count,
-                                      gboolean (*setparam) (gpointer,guint16,VikLayerParamData,gpointer,gboolean), // AKA VikLayerFuncSetParam in viklayer.h
-                                      gpointer pass_along1,
-                                      gpointer pass_along2,
+                                      gboolean (*setparam) (gpointer,gpointer), // AKA VikLayerFuncSetParam in viklayer.h
+                                      gboolean (*setparam4) (gpointer,guint16,VikLayerParamData,gpointer), // Fixed 4 Parameter version
+                                      gpointer pass_along1, // Possibly VikLayer* or own type for 4 param call used as first parameter
+                                      gpointer pass_along2, // Possibly VikViewport* or own type for 4 param call used as last parameter
                                       VikLayerParamData (*getparam) (gpointer,guint16,gboolean),  // AKA VikLayerFuncGetParam in viklayer.h
                                       gpointer pass_along_getparam,
                                       void (*changeparam) (GtkWidget*, ui_change_values) ); // AKA VikLayerFuncChangeParam in viklayer.h
-                                      /* pass_along1 and pass_along2 are for set_param first and last params */
 
 VikLayerParamData *a_uibuilder_run_dialog ( const gchar *dialog_name, GtkWindow *parent, VikLayerParam *params,
                         guint16 params_count, gchar **groups, guint8 groups_count,
index ee4bec2a75a741ab9a3ad169af5c962efee0a84c..61beff8c54e1bcc4c1fff8858958864faecb3f15 100644 (file)
@@ -36,7 +36,7 @@ static void coord_layer_free ( VikCoordLayer *vcl );
 static VikCoordLayer *coord_layer_create ( VikViewport *vp );
 static void coord_layer_marshall( VikCoordLayer *vcl, guint8 **data, gint *len );
 static VikCoordLayer *coord_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp );
-static gboolean coord_layer_set_param ( VikCoordLayer *vcl, guint16 id, VikLayerParamData data, VikViewport *vp, gboolean is_file_operation );
+static gboolean coord_layer_set_param ( VikCoordLayer *vcl, VikLayerSetParam *vlsp );
 static VikLayerParamData coord_layer_get_param ( VikCoordLayer *vcl, guint16 id, gboolean is_file_operation );
 static void coord_layer_post_read ( VikLayer *vl, VikViewport *vp, gboolean from_file );
 static void coord_layer_update_gc ( VikCoordLayer *vcl, VikViewport *vp );
@@ -169,13 +169,13 @@ static VikCoordLayer *coord_layer_unmarshall( guint8 *data, gint len, VikViewpor
 }
 
 // NB VikViewport can be null as it's not used ATM
-gboolean coord_layer_set_param ( VikCoordLayer *vcl, guint16 id, VikLayerParamData data, VikViewport *vp, gboolean is_file_operation )
+gboolean coord_layer_set_param ( VikCoordLayer *vcl, VikLayerSetParam *vlsp )
 {
-  switch ( id )
+  switch ( vlsp->id )
   {
-    case PARAM_COLOR: vcl->color = data.c; break;
-    case PARAM_MIN_INC: vcl->deg_inc = data.d / 60.0; break;
-    case PARAM_LINE_THICKNESS: if ( data.u >= 1 && data.u <= 15 ) vcl->line_thickness = data.u; break;
+    case PARAM_COLOR: vcl->color = vlsp->data.c; break;
+    case PARAM_MIN_INC: vcl->deg_inc = vlsp->data.d / 60.0; break;
+    case PARAM_LINE_THICKNESS: if ( vlsp->data.u >= 1 && vlsp->data.u <= 15 ) vcl->line_thickness = vlsp->data.u; break;
     default: break;
   }
   return TRUE;
index e14e7ad58ecd933b4c8879f371cd7b425ea10a61..15aaaef9ddc3c3a29d9da641527f2e1953562bb8 100644 (file)
@@ -66,7 +66,7 @@ static VikDEMLayer *dem_layer_create ( VikViewport *vp );
 static const gchar* dem_layer_tooltip( VikDEMLayer *vdl );
 static void dem_layer_marshall( VikDEMLayer *vdl, guint8 **data, gint *len );
 static VikDEMLayer *dem_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp );
-static gboolean dem_layer_set_param ( VikDEMLayer *vdl, guint16 id, VikLayerParamData data, VikViewport *vp, gboolean is_file_operation );
+static gboolean dem_layer_set_param ( VikDEMLayer *vdl, VikLayerSetParam *vlsp );
 static VikLayerParamData dem_layer_get_param ( VikDEMLayer *vdl, guint16 id, gboolean is_file_operation );
 static void dem_layer_post_read ( VikLayer *vl, VikViewport *vp, gboolean from_file );
 static void srtm_draw_existence ( VikViewport *vp );
@@ -400,50 +400,50 @@ static GList *dem_layer_convert_to_relative_filenaming ( GList *files )
   return files;
 }
 
-gboolean dem_layer_set_param ( VikDEMLayer *vdl, guint16 id, VikLayerParamData data, VikViewport *vp, gboolean is_file_operation )
+gboolean dem_layer_set_param ( VikDEMLayer *vdl, VikLayerSetParam *vlsp )
 {
-  switch ( id )
+  switch ( vlsp->id )
   {
-    case PARAM_COLOR: vdl->color = data.c; gdk_gc_set_rgb_fg_color ( vdl->gcs[0], &(vdl->color) ); break;
-    case PARAM_SOURCE: vdl->source = data.u; break;
-    case PARAM_TYPE: vdl->type = data.u; break;
+    case PARAM_COLOR: vdl->color = vlsp->data.c; gdk_gc_set_rgb_fg_color ( vdl->gcs[0], &(vdl->color) ); break;
+    case PARAM_SOURCE: vdl->source = vlsp->data.u; break;
+    case PARAM_TYPE: vdl->type = vlsp->data.u; break;
     case PARAM_MIN_ELEV:
       /* Convert to store internally
          NB file operation always in internal units (metres) */
-      if (!is_file_operation && a_vik_get_units_height () == VIK_UNITS_HEIGHT_FEET )
-        vdl->min_elev = VIK_FEET_TO_METERS(data.d);
+      if (!vlsp->is_file_operation && a_vik_get_units_height () == VIK_UNITS_HEIGHT_FEET )
+        vdl->min_elev = VIK_FEET_TO_METERS(vlsp->data.d);
       else
-        vdl->min_elev = data.d;
+        vdl->min_elev = vlsp->data.d;
       break;
     case PARAM_MAX_ELEV:
       /* Convert to store internally
          NB file operation always in internal units (metres) */
-      if (!is_file_operation && a_vik_get_units_height () == VIK_UNITS_HEIGHT_FEET )
-        vdl->max_elev = VIK_FEET_TO_METERS(data.d);
+      if (!vlsp->is_file_operation && a_vik_get_units_height () == VIK_UNITS_HEIGHT_FEET )
+        vdl->max_elev = VIK_FEET_TO_METERS(vlsp->data.d);
       else
-        vdl->max_elev = data.d;
+        vdl->max_elev = vlsp->data.d;
       break;
     case PARAM_FILES:
     {
       // Clear out old settings - if any commonalities with new settings they will have to be read again
       a_dems_list_free ( vdl->files );
       // Set file list so any other intermediate screen drawing updates will show currently loaded DEMs by the working thread
-      vdl->files = data.sl;
+      vdl->files = vlsp->data.sl;
       // No need for thread if no files
       if ( vdl->files ) {
         // Thread Load
         dem_load_thread_data *dltd = g_malloc ( sizeof(dem_load_thread_data) );
         dltd->vdl = vdl;
-        dltd->vdl->files = data.sl;
+        dltd->vdl->files = vlsp->data.sl;
 
         a_background_thread ( BACKGROUND_POOL_LOCAL,
-                              VIK_GTK_WINDOW_FROM_WIDGET(vp),
+                              VIK_GTK_WINDOW_FROM_WIDGET(vlsp->vp),
                               _("DEM Loading"),
                               (vik_thr_func) dem_layer_load_list_thread,
                               dltd,
                               (vik_thr_free_func) dem_layer_thread_data_free,
                               (vik_thr_free_func) dem_layer_thread_cancel,
-                              g_list_length ( data.sl ) ); // Number of DEM files
+                              g_list_length ( vlsp->data.sl ) ); // Number of DEM files
       }
       break;
     }
index 32081dacb523fac15a631b018d66d5e3e7bf3fa7..2dbf0d9880b8445a2db9ba0f2eac5f3b48d9258f 100644 (file)
@@ -72,7 +72,7 @@ enum {
 static const gchar* georef_layer_tooltip ( VikGeorefLayer *vgl );
 static void georef_layer_marshall( VikGeorefLayer *vgl, guint8 **data, gint *len );
 static VikGeorefLayer *georef_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp );
-static gboolean georef_layer_set_param ( VikGeorefLayer *vgl, guint16 id, VikLayerParamData data, VikViewport *vp, gboolean is_file_operation );
+static gboolean georef_layer_set_param ( VikGeorefLayer *vgl, VikLayerSetParam *vlsp );
 static VikLayerParamData georef_layer_get_param ( VikGeorefLayer *vgl, guint16 id, gboolean is_file_operation );
 static VikGeorefLayer *georef_layer_new ( VikViewport *vvp );
 static VikGeorefLayer *georef_layer_create ( VikViewport *vp );
@@ -264,18 +264,18 @@ static VikGeorefLayer *georef_layer_unmarshall( guint8 *data, gint len, VikViewp
   return rv;
 }
 
-static gboolean georef_layer_set_param ( VikGeorefLayer *vgl, guint16 id, VikLayerParamData data, VikViewport *vp, gboolean is_file_operation )
+static gboolean georef_layer_set_param ( VikGeorefLayer *vgl, VikLayerSetParam *vlsp )
 {
-  switch ( id )
+  switch ( vlsp->id )
   {
-    case PARAM_IMAGE: georef_layer_set_image ( vgl, data.s ); break;
-    case PARAM_CN: vgl->corner.northing = data.d; break;
-    case PARAM_CE: vgl->corner.easting = data.d; break;
-    case PARAM_MN: vgl->mpp_northing = data.d; break;
-    case PARAM_ME: vgl->mpp_easting = data.d; break;
-    case PARAM_CZ: if ( data.u <= 60 ) vgl->corner.zone = data.u; break;
-    case PARAM_CL: if ( data.u >= 65 || data.u <= 90 ) vgl->corner.letter = data.u; break;
-    case PARAM_AA: if ( data.u <= 255 ) vgl->alpha = data.u; break;
+    case PARAM_IMAGE: georef_layer_set_image ( vgl, vlsp->data.s ); break;
+    case PARAM_CN: vgl->corner.northing = vlsp->data.d; break;
+    case PARAM_CE: vgl->corner.easting = vlsp->data.d; break;
+    case PARAM_MN: vgl->mpp_northing = vlsp->data.d; break;
+    case PARAM_ME: vgl->mpp_easting = vlsp->data.d; break;
+    case PARAM_CZ: if ( vlsp->data.u <= 60 ) vgl->corner.zone = vlsp->data.u; break;
+    case PARAM_CL: if ( vlsp->data.u >= 65 || vlsp->data.u <= 90 ) vgl->corner.letter = vlsp->data.u; break;
+    case PARAM_AA: if ( vlsp->data.u <= 255 ) vgl->alpha = vlsp->data.u; break;
     default: break;
   }
   return TRUE;
index ab7ba06ad09088c96db526a849290a0d6f82f19a..276194af87de6438da6a4ad3e89b0a0efbee03a7 100644 (file)
@@ -56,7 +56,7 @@ static void vik_gps_layer_post_read ( VikGpsLayer *vgl, VikViewport *vp, gboolea
 
 static void gps_layer_marshall( VikGpsLayer *vgl, guint8 **data, gint *len );
 static VikGpsLayer *gps_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp );
-static gboolean gps_layer_set_param ( VikGpsLayer *vgl, guint16 id, VikLayerParamData data, VikViewport *vp, gboolean is_file_operation );
+static gboolean gps_layer_set_param ( VikGpsLayer *vgl, VikLayerSetParam *vlsp );
 static VikLayerParamData gps_layer_get_param ( VikGpsLayer *vgl, guint16 id, gboolean is_file_operation );
 
 static const gchar* gps_layer_tooltip ( VikGpsLayer *vgl );
@@ -531,96 +531,96 @@ static VikGpsLayer *gps_layer_unmarshall( guint8 *data, gint len, VikViewport *v
 #undef alm_next
 }
 
-static gboolean gps_layer_set_param ( VikGpsLayer *vgl, guint16 id, VikLayerParamData data, VikViewport *vp, gboolean is_file_operation )
+static gboolean gps_layer_set_param ( VikGpsLayer *vgl, VikLayerSetParam *vlsp )
 {
-  switch ( id )
+  switch ( vlsp->id )
   {
     case PARAM_PROTOCOL:
-      if (data.s) {
+      if (vlsp->data.s) {
         g_free(vgl->protocol);
         // Backwards Compatibility: previous versions <v1.4 stored protocol as an array index
-        int index = data.s[0] - '0';
-        if (data.s[0] != '\0' &&
-            g_ascii_isdigit (data.s[0]) &&
-            data.s[1] == '\0' &&
+        int index = vlsp->data.s[0] - '0';
+        if (vlsp->data.s[0] != '\0' &&
+            g_ascii_isdigit (vlsp->data.s[0]) &&
+            vlsp->data.s[1] == '\0' &&
             index < OLD_NUM_PROTOCOLS)
           // It is a single digit: activate compatibility
           vgl->protocol = g_strdup(protocols_args[index]);
         else
-          vgl->protocol = g_strdup(data.s);
+          vgl->protocol = g_strdup(vlsp->data.s);
         g_debug("%s: %s", __FUNCTION__, vgl->protocol);
       }
       else
         g_warning(_("Unknown GPS Protocol"));
       break;
     case PARAM_PORT:
-      if (data.s) {
+      if (vlsp->data.s) {
         g_free(vgl->serial_port);
         // Backwards Compatibility: previous versions <v0.9.91 stored serial_port as an array index
-        int index = data.s[0] - '0';
-        if (data.s[0] != '\0' &&
-            g_ascii_isdigit (data.s[0]) &&
-            data.s[1] == '\0' &&
+        int index = vlsp->data.s[0] - '0';
+        if (vlsp->data.s[0] != '\0' &&
+            g_ascii_isdigit (vlsp->data.s[0]) &&
+            vlsp->data.s[1] == '\0' &&
             index < OLD_NUM_PORTS)
           /* It is a single digit: activate compatibility */
           vgl->serial_port = g_strdup(old_params_ports[index]);
         else
-          vgl->serial_port = g_strdup(data.s);
+          vgl->serial_port = g_strdup(vlsp->data.s);
         g_debug("%s: %s", __FUNCTION__, vgl->serial_port);
       }
       else
         g_warning(_("Unknown serial port device"));
       break;
     case PARAM_DOWNLOAD_TRACKS:
-      vgl->download_tracks = data.b;
+      vgl->download_tracks = vlsp->data.b;
       break;
     case PARAM_UPLOAD_TRACKS:
-      vgl->upload_tracks = data.b;
+      vgl->upload_tracks = vlsp->data.b;
       break;
     case PARAM_DOWNLOAD_ROUTES:
-      vgl->download_routes = data.b;
+      vgl->download_routes = vlsp->data.b;
       break;
     case PARAM_UPLOAD_ROUTES:
-      vgl->upload_routes = data.b;
+      vgl->upload_routes = vlsp->data.b;
       break;
     case PARAM_DOWNLOAD_WAYPOINTS:
-      vgl->download_waypoints = data.b;
+      vgl->download_waypoints = vlsp->data.b;
       break;
     case PARAM_UPLOAD_WAYPOINTS:
-      vgl->upload_waypoints = data.b;
+      vgl->upload_waypoints = vlsp->data.b;
       break;
 #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
     case PARAM_GPSD_CONNECT:
-      vgl->auto_connect_to_gpsd = data.b;
+      vgl->auto_connect_to_gpsd = vlsp->data.b;
       break;
     case PARAM_GPSD_HOST:
-      if (data.s) {
+      if (vlsp->data.s) {
         if (vgl->gpsd_host)
           g_free(vgl->gpsd_host);
-        vgl->gpsd_host = g_strdup(data.s);
+        vgl->gpsd_host = g_strdup(vlsp->data.s);
       }
       break;
     case PARAM_GPSD_PORT:
-      if (data.s) {
+      if (vlsp->data.s) {
         if (vgl->gpsd_port)
           g_free(vgl->gpsd_port);
-        vgl->gpsd_port = g_strdup(data.s);
+        vgl->gpsd_port = g_strdup(vlsp->data.s);
       }
       break;
     case PARAM_GPSD_RETRY_INTERVAL:
-      vgl->gpsd_retry_interval = strtol(data.s, NULL, 10);
+      vgl->gpsd_retry_interval = strtol(vlsp->data.s, NULL, 10);
       break;
     case PARAM_REALTIME_REC:
-      vgl->realtime_record = data.b;
+      vgl->realtime_record = vlsp->data.b;
       break;
     case PARAM_REALTIME_CENTER_START:
-      vgl->realtime_jump_to_start = data.b;
+      vgl->realtime_jump_to_start = vlsp->data.b;
       break;
     case PARAM_VEHICLE_POSITION:
-      vgl->vehicle_position = data.u;
+      vgl->vehicle_position = vlsp->data.u;
       break;
     case PARAM_REALTIME_UPDATE_STATUSBAR:
-      vgl->realtime_update_statusbar = data.b;
+      vgl->realtime_update_statusbar = vlsp->data.b;
       break;
 #endif /* VIK_CONFIG_REALTIME_GPS_TRACKING */
     default:
index 1f30ca2a8b4e8de0813bf807216ddbc4012ce68e..d32080aed9c9d31f9773317f0a82523e2c5e3bda 100644 (file)
@@ -381,10 +381,13 @@ void vik_layer_unmarshall_params ( VikLayer *vl, guint8 *data, gint datalen, Vik
 
   if ( params && set_param )
   {
-    VikLayerParamData d;
+    VikLayerSetParam vlsp;
+    vlsp.vp                 = vvp;
+    vlsp.is_file_operation  = FALSE;
     guint16 i, params_count = vik_layer_get_interface(vl->type)->params_count;
     for ( i = 0; i < params_count; i++ )
     {
+      vlsp.id = i;
       g_debug("%s: %s", __FUNCTION__, params[i].name);
       switch ( params[i].type )
       {
@@ -392,8 +395,8 @@ void vik_layer_unmarshall_params ( VikLayer *vl, guint8 *data, gint datalen, Vik
        s = g_malloc(vlm_size + 1);
        s[vlm_size]=0;
        vlm_read(s);
-       d.s = s;
-       set_param(vl, i, d, vvp, FALSE);
+       vlsp.data.s = s;
+       set_param(vl, &vlsp);
        g_free(s);
        break;
       case VIK_LAYER_PARAM_STRING_LIST:  {
@@ -408,16 +411,16 @@ void vik_layer_unmarshall_params ( VikLayer *vl, guint8 *data, gint datalen, Vik
          vlm_read(s);
           list = g_list_append ( list, s );
         }
-        d.sl = list;
-        set_param(vl, i, d, vvp, FALSE);
+        vlsp.data.sl = list;
+        set_param(vl, &vlsp);
         /* don't free -- string list is responsibility of the layer */
 
         break;
         }
       default:
-       vlm_read(&d);
-       set_param(vl, i, d, vvp, FALSE);
-       break;
+        vlm_read(&vlsp.data);
+        set_param(vl, &vlsp);
+        break;
       }
     }
   }
@@ -528,10 +531,10 @@ GdkPixbuf *vik_layer_load_icon ( VikLayerTypeEnum type )
   return NULL;
 }
 
-gboolean vik_layer_set_param ( VikLayer *layer, guint16 id, VikLayerParamData data, gpointer vp, gboolean is_file_operation )
+gboolean vik_layer_set_param ( VikLayer *vl, VikLayerSetParam *vlsp )
 {
-  if ( vik_layer_interfaces[layer->type]->set_param )
-    return vik_layer_interfaces[layer->type]->set_param ( layer, id, data, vp, is_file_operation );
+  if ( vik_layer_interfaces[vl->type]->set_param )
+    return vik_layer_interfaces[vl->type]->set_param ( vl, vlsp );
   return FALSE;
 }
 
@@ -549,7 +552,8 @@ static gboolean vik_layer_properties_factory ( VikLayer *vl, VikViewport *vp )
                                            vik_layer_interfaces[vl->type]->params_count,
                                            vik_layer_interfaces[vl->type]->params_groups,
                                            vik_layer_interfaces[vl->type]->params_groups_count,
-                                           (gpointer) vik_layer_interfaces[vl->type]->set_param, 
+                                           (gpointer) vik_layer_interfaces[vl->type]->set_param,
+                                           NULL,
                                            vl, 
                                            vp,
                                            (gpointer) vik_layer_interfaces[vl->type]->get_param, 
@@ -657,17 +661,20 @@ void vik_layer_set_defaults ( VikLayer *vl, VikViewport *vvp )
   vl->vvp = vvp;
   VikLayerInterface *vli = vik_layer_get_interface ( vl->type );
   const gchar *layer_name = vli->fixed_layer_name;
-  VikLayerParamData data;
+  VikLayerSetParam vlsp;
 
+  vlsp.is_file_operation = TRUE; // Possibly come from a file
+  vlsp.vp = vvp;
   int i;
   for ( i = 0; i < vli->params_count; i++ ) {
+    vlsp.id = i;
     // Ensure parameter is for use
     if ( vli->params[i].group > VIK_LAYER_NOT_IN_PROPERTIES ) {
       // ATM can't handle string lists
       // only DEM files uses this currently
       if ( vli->params[i].type != VIK_LAYER_PARAM_STRING_LIST ) {
-        data = a_layer_defaults_get ( layer_name, vli->params[i].name, vli->params[i].type );
-        vik_layer_set_param ( vl, i, data, vvp, TRUE ); // Possibly come from a file
+        vlsp.data = a_layer_defaults_get ( layer_name, vli->params[i].name, vli->params[i].type );
+        vik_layer_set_param ( vl, &vlsp );
       }
     }
   }
index 8ade4190b4371f24fd9e8c22ccadc82d836d61a9..de55e316acd537f7a310225d0df72dd0faec2721 100644 (file)
@@ -151,8 +151,7 @@ typedef void          (*VikLayerFuncMarshall)              (VikLayer *, guint8 *
 typedef VikLayer *    (*VikLayerFuncUnmarshall)            (guint8 *, gint, VikViewport *);
 
 /* returns TRUE if needs to redraw due to changed param */
-/* in parameter gboolean denotes if for file I/O, as opposed to display/cut/copy etc... operations */
-typedef gboolean      (*VikLayerFuncSetParam)              (VikLayer *, guint16, VikLayerParamData, VikViewport *, gboolean);
+typedef gboolean      (*VikLayerFuncSetParam)              (VikLayer *, VikLayerSetParam* );
 
 /* in parameter gboolean denotes if for file I/O, as opposed to display/cut/copy etc... operations */
 typedef VikLayerParamData
@@ -274,7 +273,7 @@ const gchar *vik_layer_get_name ( VikLayer *l );
 
 time_t vik_layer_get_timestamp ( VikLayer *vl );
 
-gboolean vik_layer_set_param (VikLayer *layer, guint16 id, VikLayerParamData data, gpointer vp, gboolean is_file_operation);
+gboolean vik_layer_set_param ( VikLayer *vl, VikLayerSetParam *vlsp );
 
 void vik_layer_set_defaults ( VikLayer *vl, VikViewport *vvp );
 
index f8da1aa0a15f5d46188ab549b1fff1a3e622d57f..4c41ac64e7c6ce4fdc4547f6f80a5ca546f5a088 100644 (file)
@@ -309,7 +309,8 @@ gboolean a_layer_defaults_show_window ( GtkWindow *parent, const gchar *layernam
                                              layer_params_count,
                                              vik_layer_get_interface(layer)->params_groups,
                                              vik_layer_get_interface(layer)->params_groups_count,
-                                             (gboolean (*) (gpointer,guint16,VikLayerParamData,gpointer,gboolean)) defaults_run_setparam,
+                                             NULL,
+                                             (gboolean (*) (gpointer,guint16,VikLayerParamData,gpointer)) defaults_run_setparam,
                                              GINT_TO_POINTER ( index ),
                                              params,
                                              defaults_run_getparam,
index 3e789c3db95ec3a71a02b257f1a8735e85725465..38af8c9d00b86fee4dcb7ed5a992d8ca1007ab86 100644 (file)
@@ -106,7 +106,7 @@ static void maps_layer_post_read (VikLayer *vl, VikViewport *vp, gboolean from_f
 static const gchar* maps_layer_tooltip ( VikMapsLayer *vml );
 static void maps_layer_marshall( VikMapsLayer *vml, guint8 **data, gint *len );
 static VikMapsLayer *maps_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp );
-static gboolean maps_layer_set_param ( VikMapsLayer *vml, guint16 id, VikLayerParamData data, VikViewport *vvp, gboolean is_file_operation );
+static gboolean maps_layer_set_param ( VikMapsLayer *vml, VikLayerSetParam *vlsp );
 static VikLayerParamData maps_layer_get_param ( VikMapsLayer *vml, guint16 id, gboolean is_file_operation );
 static void maps_layer_change_param ( GtkWidget *widget, ui_change_values values );
 static void maps_layer_draw ( VikMapsLayer *vml, VikViewport *vvp );
@@ -619,46 +619,49 @@ static void maps_show_license ( GtkWindow *parent, VikMapSource *map )
                     vik_map_source_get_license_url (map) );
 }
 
-static gboolean maps_layer_set_param ( VikMapsLayer *vml, guint16 id, VikLayerParamData data, VikViewport *vvp, gboolean is_file_operation )
+static gboolean maps_layer_set_param ( VikMapsLayer *vml, VikLayerSetParam *vlsp )
 {
-  switch ( id )
+  switch ( vlsp->id )
   {
-    case PARAM_CACHE_DIR: maps_layer_set_cache_dir ( vml, data.s ); break;
-    case PARAM_CACHE_LAYOUT: if ( data.u < VIK_MAPS_CACHE_LAYOUT_NUM ) vml->cache_layout = data.u; break;
-    case PARAM_FILE: maps_layer_set_file ( vml, data.s ); break;
+    case PARAM_CACHE_DIR: maps_layer_set_cache_dir ( vml, vlsp->data.s ); break;
+    case PARAM_CACHE_LAYOUT: if ( vlsp->data.u < VIK_MAPS_CACHE_LAYOUT_NUM ) vml->cache_layout = vlsp->data.u; break;
+    case PARAM_FILE: maps_layer_set_file ( vml, vlsp->data.s ); break;
     case PARAM_MAPTYPE: {
-      gint maptype = map_uniq_id_to_index(data.u);
+      gint maptype = map_uniq_id_to_index(vlsp->data.u);
       if ( maptype == NUM_MAP_TYPES )
         g_warning(_("Unknown map type"));
       else {
         vml->maptype = maptype;
 
         // When loading from a file don't need the license reminder - ensure it's saved into the 'seen' list
-        if ( is_file_operation ) {
-          a_settings_set_integer_list_containing ( VIK_SETTINGS_MAP_LICENSE_SHOWN, data.u );
+        if ( vlsp->is_file_operation ) {
+          a_settings_set_integer_list_containing ( VIK_SETTINGS_MAP_LICENSE_SHOWN, vlsp->data.u );
         }
         else {
           VikMapSource *map = MAPS_LAYER_NTH_TYPE(vml->maptype);
           if (vik_map_source_get_license (map) != NULL) {
             // Check if licence for this map type has been shown before
-            if ( ! a_settings_get_integer_list_contains ( VIK_SETTINGS_MAP_LICENSE_SHOWN, data.u ) ) {
-              if ( vvp )
-                maps_show_license ( VIK_GTK_WINDOW_FROM_WIDGET(vvp), map );
-              a_settings_set_integer_list_containing ( VIK_SETTINGS_MAP_LICENSE_SHOWN, data.u );
+            if ( ! a_settings_get_integer_list_contains ( VIK_SETTINGS_MAP_LICENSE_SHOWN, vlsp->data.u ) ) {
+              if ( vlsp->vp )
+                maps_show_license ( VIK_GTK_WINDOW_FROM_WIDGET(vlsp->vp), map );
+              a_settings_set_integer_list_containing ( VIK_SETTINGS_MAP_LICENSE_SHOWN, vlsp->data.u );
             }
           }
         }
       }
       break;
     }
-    case PARAM_ALPHA: if ( data.u <= 255 ) vml->alpha = data.u; break;
-    case PARAM_AUTODOWNLOAD: vml->autodownload = data.b; break;
-    case PARAM_ONLYMISSING: vml->adl_only_missing = data.b; break;
-    case PARAM_MAPZOOM: if ( data.u < NUM_MAPZOOMS ) {
-                          vml->mapzoom_id = data.u;
-                          vml->xmapzoom = __mapzooms_x [data.u];
-                          vml->ymapzoom = __mapzooms_y [data.u];
-                        }else g_warning (_("Unknown Map Zoom")); break;
+    case PARAM_ALPHA: if ( vlsp->data.u <= 255 ) vml->alpha = vlsp->data.u; break;
+    case PARAM_AUTODOWNLOAD: vml->autodownload = vlsp->data.b; break;
+    case PARAM_ONLYMISSING: vml->adl_only_missing = vlsp->data.b; break;
+    case PARAM_MAPZOOM:
+      if ( vlsp->data.u < NUM_MAPZOOMS ) {
+        vml->mapzoom_id = vlsp->data.u;
+        vml->xmapzoom = __mapzooms_x [vlsp->data.u];
+        vml->ymapzoom = __mapzooms_y [vlsp->data.u];
+      } else
+       g_warning (_("Unknown Map Zoom"));
+      break;
     default: break;
   }
   return TRUE;
index 97a4a5f712617079121fae4047e917fcd1d60da5..915713b7d85c0969673d1de42f96bea8dca038a2 100644 (file)
@@ -710,7 +710,7 @@ static const gchar* trw_layer_sublayer_tooltip ( VikTrwLayer *l, gint subtype, g
 static gboolean trw_layer_selected ( VikTrwLayer *l, gint subtype, gpointer sublayer, gint type, gpointer vlp );
 static void trw_layer_marshall ( VikTrwLayer *vtl, guint8 **data, gint *len );
 static VikTrwLayer *trw_layer_unmarshall ( guint8 *data, gint len, VikViewport *vvp );
-static gboolean trw_layer_set_param ( VikTrwLayer *vtl, guint16 id, VikLayerParamData data, VikViewport *vp, gboolean is_file_operation );
+static gboolean trw_layer_set_param ( VikTrwLayer *vtl, VikLayerSetParam *vlsp );
 static VikLayerParamData trw_layer_get_param ( VikTrwLayer *vtl, guint16 id, gboolean is_file_operation );
 static void trw_layer_change_param ( GtkWidget *widget, ui_change_values values );
 static void trw_layer_del_item ( VikTrwLayer *vtl, gint subtype, gpointer sublayer );
@@ -1184,17 +1184,17 @@ static void image_cache_free ( VikTrwLayer *vtl )
   g_queue_free ( vtl->image_cache );
 }
 
-static gboolean trw_layer_set_param ( VikTrwLayer *vtl, guint16 id, VikLayerParamData data, VikViewport *vp, gboolean is_file_operation )
+static gboolean trw_layer_set_param ( VikTrwLayer *vtl, VikLayerSetParam *vlsp )
 {
-  switch ( id )
+  switch ( vlsp->id )
   {
-    case PARAM_TV: vtl->tracks_visible = data.b; break;
-    case PARAM_WV: vtl->waypoints_visible = data.b; break;
-    case PARAM_RV: vtl->routes_visible = data.b; break;
-    case PARAM_TDL: vtl->track_draw_labels = data.b; break;
+    case PARAM_TV: vtl->tracks_visible = vlsp->data.b; break;
+    case PARAM_WV: vtl->waypoints_visible = vlsp->data.b; break;
+    case PARAM_RV: vtl->routes_visible = vlsp->data.b; break;
+    case PARAM_TDL: vtl->track_draw_labels = vlsp->data.b; break;
     case PARAM_TLFONTSIZE:
-      if ( data.u < FS_NUM_SIZES ) {
-        vtl->track_font_size = data.u;
+      if ( vlsp->data.u < FS_NUM_SIZES ) {
+        vtl->track_font_size = vlsp->data.u;
         g_free ( vtl->track_fsize_str );
         switch ( vtl->track_font_size ) {
           case FS_XX_SMALL: vtl->track_fsize_str = g_strdup ( "xx-small" ); break;
@@ -1207,95 +1207,98 @@ static gboolean trw_layer_set_param ( VikTrwLayer *vtl, guint16 id, VikLayerPara
         }
       }
       break;
-    case PARAM_DM: vtl->drawmode = data.u; break;
+    case PARAM_DM: vtl->drawmode = vlsp->data.u; break;
     case PARAM_TC:
-      vtl->track_color = data.c;
-      if ( vp ) trw_layer_new_track_gcs ( vtl, vp );
+      vtl->track_color = vlsp->data.c;
+      if ( vlsp->vp ) trw_layer_new_track_gcs ( vtl, vlsp->vp );
       break;
-    case PARAM_DP: vtl->drawpoints = data.b; break;
+    case PARAM_DP: vtl->drawpoints = vlsp->data.b; break;
     case PARAM_DPS:
-      if ( data.u >= MIN_POINT_SIZE && data.u <= MAX_POINT_SIZE )
-        vtl->drawpoints_size = data.u;
+      if ( vlsp->data.u >= MIN_POINT_SIZE && vlsp->data.u <= MAX_POINT_SIZE )
+        vtl->drawpoints_size = vlsp->data.u;
       break;
-    case PARAM_DE: vtl->drawelevation = data.b; break;
-    case PARAM_DS: vtl->drawstops = data.b; break;
-    case PARAM_DL: vtl->drawlines = data.b; break;
-    case PARAM_DD: vtl->drawdirections = data.b; break;
+    case PARAM_DE: vtl->drawelevation = vlsp->data.b; break;
+    case PARAM_DS: vtl->drawstops = vlsp->data.b; break;
+    case PARAM_DL: vtl->drawlines = vlsp->data.b; break;
+    case PARAM_DD: vtl->drawdirections = vlsp->data.b; break;
     case PARAM_DDS:
-      if ( data.u >= MIN_ARROW_SIZE && data.u <= MAX_ARROW_SIZE )
-        vtl->drawdirections_size = data.u;
+      if ( vlsp->data.u >= MIN_ARROW_SIZE && vlsp->data.u <= MAX_ARROW_SIZE )
+        vtl->drawdirections_size = vlsp->data.u;
+      break;
+    case PARAM_SL:
+      if ( vlsp->data.u >= MIN_STOP_LENGTH && vlsp->data.u <= MAX_STOP_LENGTH )
+        vtl->stop_length = vlsp->data.u;
+      break;
+    case PARAM_EF:
+      if ( vlsp->data.u >= 1 && vlsp->data.u <= 100 )
+        vtl->elevation_factor = vlsp->data.u;
+      break;
+    case PARAM_LT:
+      if ( vlsp->data.u > 0 && vlsp->data.u < 15 && vlsp->data.u != vtl->line_thickness ) {
+        vtl->line_thickness = vlsp->data.u;
+        if ( vlsp->vp ) trw_layer_new_track_gcs ( vtl, vlsp->vp );
+      }
+      break;
+    case PARAM_BLT:
+      if ( vlsp->data.u <= 8 && vlsp->data.u != vtl->bg_line_thickness ) {
+        vtl->bg_line_thickness = vlsp->data.u;
+        if ( vlsp->vp ) trw_layer_new_track_gcs ( vtl, vlsp->vp );
+      }
       break;
-    case PARAM_SL: if ( data.u >= MIN_STOP_LENGTH && data.u <= MAX_STOP_LENGTH )
-                     vtl->stop_length = data.u;
-                   break;
-    case PARAM_EF: if ( data.u >= 1 && data.u <= 100 )
-                     vtl->elevation_factor = data.u;
-                   break;
-    case PARAM_LT: if ( data.u > 0 && data.u < 15 && data.u != vtl->line_thickness )
-                   {
-                     vtl->line_thickness = data.u;
-                     if ( vp ) trw_layer_new_track_gcs ( vtl, vp );
-                   }
-                   break;
-    case PARAM_BLT: if ( data.u <= 8 && data.u != vtl->bg_line_thickness )
-                   {
-                     vtl->bg_line_thickness = data.u;
-                     if ( vp ) trw_layer_new_track_gcs ( vtl, vp );
-                   }
-                   break;
     case PARAM_TBGC:
-      vtl->track_bg_color = data.c;
+      vtl->track_bg_color = vlsp->data.c;
       if ( vtl->track_bg_gc )
         gdk_gc_set_rgb_fg_color(vtl->track_bg_gc, &(vtl->track_bg_color));
       break;
-    case PARAM_TDSF: vtl->track_draw_speed_factor = data.d; break;
-    case PARAM_TSO: if ( data.u < VL_SO_LAST ) vtl->track_sort_order = data.u; break;
-    case PARAM_DLA: vtl->drawlabels = data.b; break;
-    case PARAM_DI: vtl->drawimages = data.b; break;
-    case PARAM_IS: if ( data.u != vtl->image_size )
-      {
-        vtl->image_size = data.u;
+    case PARAM_TDSF: vtl->track_draw_speed_factor = vlsp->data.d; break;
+    case PARAM_TSO: if ( vlsp->data.u < VL_SO_LAST ) vtl->track_sort_order = vlsp->data.u; break;
+    case PARAM_DLA: vtl->drawlabels = vlsp->data.b; break;
+    case PARAM_DI: vtl->drawimages = vlsp->data.b; break;
+    case PARAM_IS:
+      if ( vlsp->data.u != vtl->image_size ) {
+        vtl->image_size = vlsp->data.u;
         image_cache_free ( vtl );
         vtl->image_cache = g_queue_new ();
       }
       break;
-    case PARAM_IA: if ( data.u != vtl->image_alpha )
-      {
-        vtl->image_alpha = data.u;
+    case PARAM_IA:
+      if ( vlsp->data.u != vtl->image_alpha ) {
+        vtl->image_alpha = vlsp->data.u;
         image_cache_free ( vtl );
         vtl->image_cache = g_queue_new ();
       }
       break;
-    case PARAM_ICS: vtl->image_cache_size = data.u;
+    case PARAM_ICS:
+      vtl->image_cache_size = vlsp->data.u;
       while ( vtl->image_cache->length > vtl->image_cache_size ) /* if shrinking cache_size, free pixbuf ASAP */
           cached_pixbuf_free ( g_queue_pop_tail ( vtl->image_cache ) );
       break;
     case PARAM_WPC:
-      vtl->waypoint_color = data.c;
+      vtl->waypoint_color = vlsp->data.c;
       if ( vtl->waypoint_gc )
         gdk_gc_set_rgb_fg_color(vtl->waypoint_gc, &(vtl->waypoint_color));
       break;
     case PARAM_WPTC:
-      vtl->waypoint_text_color = data.c;
+      vtl->waypoint_text_color = vlsp->data.c;
       if ( vtl->waypoint_text_gc )
         gdk_gc_set_rgb_fg_color(vtl->waypoint_text_gc, &(vtl->waypoint_text_color));
       break;
     case PARAM_WPBC:
-      vtl->waypoint_bg_color = data.c;
+      vtl->waypoint_bg_color = vlsp->data.c;
       if ( vtl->waypoint_bg_gc )
         gdk_gc_set_rgb_fg_color(vtl->waypoint_bg_gc, &(vtl->waypoint_bg_color));
       break;
     case PARAM_WPBA:
-      vtl->wpbgand = data.b;
+      vtl->wpbgand = vlsp->data.b;
       if ( vtl->waypoint_bg_gc )
-        gdk_gc_set_function(vtl->waypoint_bg_gc, data.b ? GDK_AND : GDK_COPY );
+        gdk_gc_set_function(vtl->waypoint_bg_gc, vlsp->data.b ? GDK_AND : GDK_COPY );
       break;
-    case PARAM_WPSYM: if ( data.u < WP_NUM_SYMBOLS ) vtl->wp_symbol = data.u; break;
-    case PARAM_WPSIZE: if ( data.u > 0 && data.u <= 64 ) vtl->wp_size = data.u; break;
-    case PARAM_WPSYMS: vtl->wp_draw_symbols = data.b; break;
+    case PARAM_WPSYM: if ( vlsp->data.u < WP_NUM_SYMBOLS ) vtl->wp_symbol = vlsp->data.u; break;
+    case PARAM_WPSIZE: if ( vlsp->data.u > 0 && vlsp->data.u <= 64 ) vtl->wp_size = vlsp->data.u; break;
+    case PARAM_WPSYMS: vtl->wp_draw_symbols = vlsp->data.b; break;
     case PARAM_WPFONTSIZE:
-      if ( data.u < FS_NUM_SIZES ) {
-        vtl->wp_font_size = data.u;
+      if ( vlsp->data.u < FS_NUM_SIZES ) {
+        vtl->wp_font_size = vlsp->data.u;
         g_free ( vtl->wp_fsize_str );
         switch ( vtl->wp_font_size ) {
           case FS_XX_SMALL: vtl->wp_fsize_str = g_strdup ( "xx-small" ); break;
@@ -1308,12 +1311,12 @@ static gboolean trw_layer_set_param ( VikTrwLayer *vtl, guint16 id, VikLayerPara
         }
       }
       break;
-    case PARAM_WPSO: if ( data.u < VL_SO_LAST ) vtl->wp_sort_order = data.u; break;
+    case PARAM_WPSO: if ( vlsp->data.u < VL_SO_LAST ) vtl->wp_sort_order = vlsp->data.u; break;
     // Metadata
-    case PARAM_MDDESC: if ( data.s && vtl->metadata ) vtl->metadata->description = g_strdup (data.s); break;
-    case PARAM_MDAUTH: if ( data.s && vtl->metadata ) vtl->metadata->author = g_strdup (data.s); break;
-    case PARAM_MDTIME: if ( data.s && vtl->metadata ) vtl->metadata->timestamp = g_strdup (data.s); break;
-    case PARAM_MDKEYS: if ( data.s && vtl->metadata ) vtl->metadata->keywords = g_strdup (data.s); break;
+    case PARAM_MDDESC: if ( vlsp->data.s && vtl->metadata ) vtl->metadata->description = g_strdup (vlsp->data.s); break;
+    case PARAM_MDAUTH: if ( vlsp->data.s && vtl->metadata ) vtl->metadata->author = g_strdup (vlsp->data.s); break;
+    case PARAM_MDTIME: if ( vlsp->data.s && vtl->metadata ) vtl->metadata->timestamp = g_strdup (vlsp->data.s); break;
+    case PARAM_MDKEYS: if ( vlsp->data.s && vtl->metadata ) vtl->metadata->keywords = g_strdup (vlsp->data.s); break;
     default: break;
   }
   return TRUE;