VikAggregateLayer *addtoagg;
if (vik_treeview_item_get_type ( vlp->vt, &iter ) == VIK_TREEVIEW_TYPE_LAYER )
{
- if ( ! IS_VIK_AGGREGATE_LAYER(vik_treeview_item_get_pointer ( vlp->vt, &iter )) ) {
- addtoagg = VIK_AGGREGATE_LAYER(vik_treeview_item_get_parent ( vlp->vt, &iter ));
- replace_iter = &iter;
+ if ( IS_VIK_AGGREGATE_LAYER(vik_treeview_item_get_pointer ( vlp->vt, &iter )) )
+ addtoagg = VIK_AGGREGATE_LAYER(vik_treeview_item_get_pointer ( vlp->vt, &iter ));
+ else {
+ VikLayer *vl = VIK_LAYER(vik_treeview_item_get_parent ( vlp->vt, &iter ));
+ while ( ! IS_VIK_AGGREGATE_LAYER(vl) ) {
+ iter = vl->iter;
+ vl = VIK_LAYER(vik_treeview_item_get_parent ( vlp->vt, &vl->iter ));
+ g_assert ( vl->realized );
+ }
+ addtoagg = VIK_AGGREGATE_LAYER(vl);
+ replace_iter = &iter;
}
- else
- addtoagg = VIK_AGGREGATE_LAYER(vik_treeview_item_get_pointer ( vlp->vt, &iter ));
}
else
{
VikAggregateLayer *parent = vik_treeview_item_get_parent ( vlp->vt, &iter );
if ( parent )
{
- a_clipboard_copy ( vlp );
+ a_clipboard_copy_selected ( vlp );
if ( vik_aggregate_layer_delete ( parent, &iter ) )
vik_layers_panel_emit_update ( vlp );
}
type = vik_treeview_item_get_type ( vlp->vt, &iter );
if ( type == VIK_TREEVIEW_TYPE_LAYER ) {
- a_clipboard_copy ( vlp );
+ a_clipboard_copy_selected ( vlp );
}
}
void vik_layers_panel_paste_selected ( VikLayersPanel *vlp )
{
- gint type;
GtkTreeIter iter;
g_return_if_fail ( vik_treeview_get_selected_iter ( vlp->vt, &iter ) );
a_clipboard_paste ( vlp );
VikAggregateLayer *parent = vik_treeview_item_get_parent ( vlp->vt, &iter );
if ( parent )
{
- if ( vik_aggregate_layer_delete ( parent, &iter ) )
- vik_layers_panel_emit_update ( vlp );
+ if (IS_VIK_AGGREGATE_LAYER(parent)) {
+ if ( vik_aggregate_layer_delete ( parent, &iter ) )
+ vik_layers_panel_emit_update ( vlp );
+ }
}
else
a_dialog_info_msg ( VIK_GTK_WINDOW_FROM_WIDGET(vlp), "You cannot delete the Top Layer." );
else if (type == VIK_TREEVIEW_TYPE_SUBLAYER) {
VikLayer *sel = vik_layers_panel_get_selected ( vlp );
if ( vik_layer_get_interface(sel->type)->delete_item ) {
- vik_layer_get_interface(sel->type)->delete_item ( sel, type, vik_treeview_item_get_pointer(sel->vt, &iter) );
+ gint subtype = vik_treeview_item_get_data( vlp->vt, &iter);
+ vik_layer_get_interface(sel->type)->delete_item ( sel, subtype, vik_treeview_item_get_pointer(sel->vt, &iter) );
}
}
}
return rv;
}
+GList *vik_layers_panel_get_all_layers_of_type(VikLayersPanel *vlp, gint type)
+{
+ GList *layers = NULL;
+
+ return (vik_aggregate_layer_get_all_layers_of_type ( vlp->toplayer, layers, type ));
+}
+
VikAggregateLayer *vik_layers_panel_get_top_layer ( VikLayersPanel *vlp )
{
return vlp->toplayer;