Switch from individual variables as function parameters to a single type.
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 );
}
/**
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 );
/* 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;
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();
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;
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++;
}
params_count,
groups,
groups_count,
+ NULL,
(gpointer) uibuilder_run_setparam,
paramdatas,
params,
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,
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,
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 );
}
// 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;
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 );
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;
}
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 );
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;
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 );
#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:
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 )
{
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: {
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;
}
}
}
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;
}
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,
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 );
}
}
}
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
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 );
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,
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 );
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;
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 );
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;
}
}
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;
}
}
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;