void vik_layers_panel_clear ( VikLayersPanel *vlp ) { if ( (! vik_aggregate_layer_is_empty(vlp->toplayer)) && a_dialog_yes_or_no ( VIK_GTK_WINDOW_FROM_WIDGET(vlp), _("Are you sure you wish to delete all layers?"), NULL ) ) vik_aggregate_layer_clear ( vlp->toplayer ); /* simply deletes all layers */ }
static void file_write ( VikAggregateLayer *top, FILE *f, gpointer vp ) { Stack *stack = NULL; VikLayer *current_layer; struct LatLon ll; VikViewportDrawMode mode; gchar *modestring = NULL; push(&stack); stack->data = (gpointer) vik_aggregate_layer_get_children(VIK_AGGREGATE_LAYER(top)); stack->under = NULL; /* crazhy CRAZHY */ vik_coord_to_latlon ( vik_viewport_get_center ( VIK_VIEWPORT(vp) ), &ll ); mode = vik_viewport_get_drawmode ( VIK_VIEWPORT(vp) ); switch ( mode ) { case VIK_VIEWPORT_DRAWMODE_UTM: modestring = "utm"; break; case VIK_VIEWPORT_DRAWMODE_EXPEDIA: modestring = "expedia"; break; case VIK_VIEWPORT_DRAWMODE_MERCATOR: modestring = "mercator"; break; case VIK_VIEWPORT_DRAWMODE_LATLON: modestring = "latlon"; break; default: g_critical("Houston, we've had a problem. mode=%d", mode); } fprintf ( f, "#VIKING GPS Data file " VIKING_URL "\n" ); fprintf ( f, "FILE_VERSION=%d\n", VIKING_FILE_VERSION ); fprintf ( f, "\nxmpp=%f\nympp=%f\nlat=%f\nlon=%f\nmode=%s\ncolor=%s\nhighlightcolor=%s\ndrawscale=%s\ndrawcentermark=%s\ndrawhighlight=%s\n", vik_viewport_get_xmpp ( VIK_VIEWPORT(vp) ), vik_viewport_get_ympp ( VIK_VIEWPORT(vp) ), ll.lat, ll.lon, modestring, vik_viewport_get_background_color(VIK_VIEWPORT(vp)), vik_viewport_get_highlight_color(VIK_VIEWPORT(vp)), vik_viewport_get_draw_scale(VIK_VIEWPORT(vp)) ? "t" : "f", vik_viewport_get_draw_centermark(VIK_VIEWPORT(vp)) ? "t" : "f", vik_viewport_get_draw_highlight(VIK_VIEWPORT(vp)) ? "t" : "f" ); if ( ! VIK_LAYER(top)->visible ) fprintf ( f, "visible=f\n" ); while (stack && stack->data) { current_layer = VIK_LAYER(((GList *)stack->data)->data); fprintf ( f, "\n~Layer %s\n", vik_layer_get_interface(current_layer->type)->fixed_layer_name ); write_layer_params_and_data ( current_layer, f ); if ( current_layer->type == VIK_LAYER_AGGREGATE && !vik_aggregate_layer_is_empty(VIK_AGGREGATE_LAYER(current_layer)) ) { push(&stack); stack->data = (gpointer) vik_aggregate_layer_get_children(VIK_AGGREGATE_LAYER(current_layer)); } else if ( current_layer->type == VIK_LAYER_GPS && !vik_gps_layer_is_empty(VIK_GPS_LAYER(current_layer)) ) { push(&stack); stack->data = (gpointer) vik_gps_layer_get_children(VIK_GPS_LAYER(current_layer)); } else { stack->data = (gpointer) ((GList *)stack->data)->next; fprintf ( f, "~EndLayer\n\n" ); while ( stack && (!stack->data) ) { pop(&stack); if ( stack ) { stack->data = (gpointer) ((GList *)stack->data)->next; fprintf ( f, "~EndLayer\n\n" ); } } } } /* get vikaggregatelayer's children (?) foreach write ALL params, then layer data (IF function exists) then endlayer impl: stack of layers (LIST) we are working on when layer->next == NULL ... we move on. */ }