- fprintf ( f, "%s=", params[i].name );
- switch ( params[i].type )
- {
- case VIK_LAYER_PARAM_DOUBLE: fprintf ( f, "%f\n", data.d ); break;
- case VIK_LAYER_PARAM_UINT: fprintf ( f, "%d\n", data.u ); break;
- case VIK_LAYER_PARAM_INT: fprintf ( f, "%d\n", data.i ); break;
- case VIK_LAYER_PARAM_BOOLEAN: fprintf ( f, "%c\n", data.b ? 't' : 'f' ); break;
- case VIK_LAYER_PARAM_STRING: fprintf ( f, "%s\n", data.s ); break;
- case VIK_LAYER_PARAM_COLOR: fprintf ( f, "#%.2x%.2x%.2x\n", (int)(data.c.red/256),(int)(data.c.green/256),(int)(data.c.blue/256)); break;
+
+ /* string lists are handled differently. We get a GList (that shouldn't
+ * be freed) back for get_param and if it is null we shouldn't write
+ * anything at all (otherwise we'd read in a list with an empty string,
+ * not an empty string list.
+ */
+ if ( params[i].type == VIK_LAYER_PARAM_STRING_LIST ) {
+ if ( data.sl ) {
+ GList *iter = (GList *)data.sl;
+ while ( iter ) {
+ fprintf ( f, "%s=", params[i].name );
+ fprintf ( f, "%s\n", (gchar *)(iter->data) );
+ iter = iter->next;
+ }
+ }
+ } else {
+ fprintf ( f, "%s=", params[i].name );
+ switch ( params[i].type )
+ {
+ case VIK_LAYER_PARAM_DOUBLE: {
+ // char buf[15]; /* locale independent */
+ // fprintf ( f, "%s\n", (char *) g_dtostr (data.d, buf, sizeof (buf)) ); break;
+ fprintf ( f, "%f\n", data.d );
+ break;
+ }
+ case VIK_LAYER_PARAM_UINT: fprintf ( f, "%d\n", data.u ); break;
+ case VIK_LAYER_PARAM_INT: fprintf ( f, "%d\n", data.i ); break;
+ case VIK_LAYER_PARAM_BOOLEAN: fprintf ( f, "%c\n", data.b ? 't' : 'f' ); break;
+ case VIK_LAYER_PARAM_STRING: fprintf ( f, "%s\n", data.s ); break;
+ case VIK_LAYER_PARAM_COLOR: fprintf ( f, "#%.2x%.2x%.2x\n", (int)(data.c.red/256),(int)(data.c.green/256),(int)(data.c.blue/256)); break;
+ }