void vik_aggregate_layer_insert_layer ( VikAggregateLayer *val, VikLayer *l, GtkTreeIter *replace_iter ) { GtkTreeIter iter; VikLayer *vl = VIK_LAYER(val); if ( vl->realized ) { vik_treeview_insert_layer ( vl->vt, &(vl->iter), &iter, l->name, val, l, l->type, l->type, replace_iter ); if ( ! l->visible ) vik_treeview_item_set_visible ( vl->vt, &iter, FALSE ); vik_layer_realize ( l, vl->vt, &iter ); if ( val->children == NULL ) vik_treeview_expand ( vl->vt, &(vl->iter) ); } if (replace_iter) { GList *theone = g_list_find ( val->children, vik_treeview_item_get_pointer ( vl->vt, replace_iter ) ); val->children = g_list_insert ( val->children, l, g_list_position(val->children,theone)+1 ); } else { // Effectively insert at 'end' of the list to match how displayed in the treeview // - but since it is drawn from 'bottom first' it is actually the first in the child list // This ordering is especially important if it is a map or similar type, // which needs be drawn first for the layering draw method to work properly. // ATM this only happens when a layer is drag/dropped to the end of an aggregate layer val->children = g_list_prepend ( val->children, l ); } g_signal_connect_swapped ( G_OBJECT(l), "update", G_CALLBACK(vik_layer_emit_update_secondary), val ); }
void vik_aggregate_layer_insert_layer ( VikAggregateLayer *val, VikLayer *l, GtkTreeIter *replace_iter ) { GtkTreeIter iter; VikLayer *vl = VIK_LAYER(val); // By default layers are inserted above the selected layer gboolean put_above = TRUE; // These types are 'base' types in that you what other information on top if ( l->type == VIK_LAYER_MAPS || l->type == VIK_LAYER_DEM || l->type == VIK_LAYER_GEOREF ) put_above = FALSE; if ( vl->realized ) { vik_treeview_insert_layer ( vl->vt, &(vl->iter), &iter, l->name, val, put_above, l, l->type, l->type, replace_iter ); if ( ! l->visible ) vik_treeview_item_set_visible ( vl->vt, &iter, FALSE ); vik_layer_realize ( l, vl->vt, &iter ); if ( val->children == NULL ) vik_treeview_expand ( vl->vt, &(vl->iter) ); } if (replace_iter) { GList *theone = g_list_find ( val->children, vik_treeview_item_get_pointer ( vl->vt, replace_iter ) ); if ( put_above ) val->children = g_list_insert ( val->children, l, g_list_position(val->children,theone)+1 ); else // Thus insert 'here' (so don't add 1) val->children = g_list_insert ( val->children, l, g_list_position(val->children,theone) ); } else { // Effectively insert at 'end' of the list to match how displayed in the treeview // - but since it is drawn from 'bottom first' it is actually the first in the child list // This ordering is especially important if it is a map or similar type, // which needs be drawn first for the layering draw method to work properly. // ATM this only happens when a layer is drag/dropped to the end of an aggregate layer val->children = g_list_prepend ( val->children, l ); } g_signal_connect_swapped ( G_OBJECT(l), "update", G_CALLBACK(vik_layer_emit_update_secondary), val ); }