else
{
GtkWidget *del, *prop;
+ VikStdLayerMenuItem menu_selection = vik_layer_get_menu_items_selection(layer);
menu = GTK_MENU ( gtk_menu_new () );
- prop = gtk_image_menu_item_new_from_stock ( GTK_STOCK_PROPERTIES, NULL );
- g_signal_connect_swapped ( G_OBJECT(prop), "activate", G_CALLBACK(vik_layers_panel_properties), vlp );
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), prop);
- gtk_widget_show ( prop );
-
- del = gtk_image_menu_item_new_from_stock ( GTK_STOCK_CUT, NULL );
- g_signal_connect_swapped ( G_OBJECT(del), "activate", G_CALLBACK(vik_layers_panel_cut_selected), vlp );
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), del);
- gtk_widget_show ( del );
-
- del = gtk_image_menu_item_new_from_stock ( GTK_STOCK_COPY, NULL );
- g_signal_connect_swapped ( G_OBJECT(del), "activate", G_CALLBACK(vik_layers_panel_copy_selected), vlp );
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), del);
- gtk_widget_show ( del );
-
- del = gtk_image_menu_item_new_from_stock ( GTK_STOCK_PASTE, NULL );
- g_signal_connect_swapped ( G_OBJECT(del), "activate", G_CALLBACK(vik_layers_panel_paste_selected), vlp );
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), del);
- gtk_widget_show ( del );
-
- del = gtk_image_menu_item_new_from_stock ( GTK_STOCK_DELETE, NULL );
- g_signal_connect_swapped ( G_OBJECT(del), "activate", G_CALLBACK(vik_layers_panel_delete_selected), vlp );
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), del);
- gtk_widget_show ( del );
+ if (menu_selection & VIK_MENU_ITEM_PROPERTY) {
+ prop = gtk_image_menu_item_new_from_stock ( GTK_STOCK_PROPERTIES, NULL );
+ g_signal_connect_swapped ( G_OBJECT(prop), "activate", G_CALLBACK(vik_layers_panel_properties), vlp );
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), prop);
+ gtk_widget_show ( prop );
+ }
+
+ if (menu_selection & VIK_MENU_ITEM_CUT) {
+ del = gtk_image_menu_item_new_from_stock ( GTK_STOCK_CUT, NULL );
+ g_signal_connect_swapped ( G_OBJECT(del), "activate", G_CALLBACK(vik_layers_panel_cut_selected), vlp );
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), del);
+ gtk_widget_show ( del );
+ }
+
+ if (menu_selection & VIK_MENU_ITEM_COPY) {
+ del = gtk_image_menu_item_new_from_stock ( GTK_STOCK_COPY, NULL );
+ g_signal_connect_swapped ( G_OBJECT(del), "activate", G_CALLBACK(vik_layers_panel_copy_selected), vlp );
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), del);
+ gtk_widget_show ( del );
+ }
+
+ if (menu_selection & VIK_MENU_ITEM_PASTE) {
+ del = gtk_image_menu_item_new_from_stock ( GTK_STOCK_PASTE, NULL );
+ g_signal_connect_swapped ( G_OBJECT(del), "activate", G_CALLBACK(vik_layers_panel_paste_selected), vlp );
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), del);
+ gtk_widget_show ( del );
+ }
+
+ if (menu_selection & VIK_MENU_ITEM_DELETE) {
+ del = gtk_image_menu_item_new_from_stock ( GTK_STOCK_DELETE, NULL );
+ g_signal_connect_swapped ( G_OBJECT(del), "activate", G_CALLBACK(vik_layers_panel_delete_selected), vlp );
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), del);
+ gtk_widget_show ( del );
+ }
vik_layer_add_menu_items ( layer, menu, vlp );
}
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;