void vik_layers_panel_paste_selected ( VikLayersPanel *vlp ) { GtkTreeIter iter; if ( ! vik_treeview_get_selected_iter ( vlp->vt, &iter ) ) /* Nothing to do */ return; a_clipboard_paste ( vlp ); }
void vik_layers_panel_copy_selected ( VikLayersPanel *vlp ) { GtkTreeIter iter; if ( ! vik_treeview_get_selected_iter ( vlp->vt, &iter ) ) /* Nothing to do */ return; // NB clipboard contains layer vs sublayer logic, so don't need to do it here a_clipboard_copy_selected ( vlp ); }
/** * vik_layers_panel_add_layer: * @l: existing layer * * Add an existing layer to panel. */ void vik_layers_panel_add_layer ( VikLayersPanel *vlp, VikLayer *l ) { GtkTreeIter iter; GtkTreeIter *replace_iter = NULL; /* could be something different so we have to do this */ vik_layer_change_coord_mode ( l, vik_viewport_get_coord_mode(vlp->vvp) ); if ( ! vik_treeview_get_selected_iter ( vlp->vt, &iter ) ) vik_aggregate_layer_add_layer ( vlp->toplayer, l ); else { 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_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 { /* a sublayer is selected, first get its parent (layer), then find the layer's parent (aggr. layer) */ VikLayer *vl = VIK_LAYER(vik_treeview_item_get_parent ( vlp->vt, &iter )); replace_iter = &(vl->iter); g_assert ( vl->realized ); VikLayer *grandpa = (vik_treeview_item_get_parent ( vlp->vt, &(vl->iter) ) ); if (IS_VIK_AGGREGATE_LAYER(grandpa)) addtoagg = VIK_AGGREGATE_LAYER(grandpa); else { addtoagg = vlp->toplayer; replace_iter = &grandpa->iter; } } if ( replace_iter ) vik_aggregate_layer_insert_layer ( addtoagg, l, replace_iter ); else vik_aggregate_layer_add_layer ( addtoagg, l ); } vik_layers_panel_emit_update ( vlp ); }
gboolean vik_layers_panel_properties ( VikLayersPanel *vlp ) { GtkTreeIter iter; g_assert ( vlp->vvp ); if ( vik_treeview_get_selected_iter ( vlp->vt, &iter ) && vik_treeview_item_get_type ( vlp->vt, &iter ) == VIK_TREEVIEW_TYPE_LAYER ) { if ( vik_treeview_item_get_data ( vlp->vt, &iter ) == VIK_LAYER_AGGREGATE ) a_dialog_info_msg ( VIK_GTK_WINDOW_FROM_WIDGET(vlp), _("Aggregate Layers have no settable properties.") ); VikLayer *layer = VIK_LAYER( vik_treeview_item_get_pointer ( vlp->vt, &iter ) ); if (vik_layer_properties ( layer, vlp->vvp )) vik_layer_emit_update ( layer, FALSE ); return TRUE; } else return FALSE; }
void vik_layers_panel_delete_selected ( VikLayersPanel *vlp ) { gint type; GtkTreeIter iter; if ( ! vik_treeview_get_selected_iter ( vlp->vt, &iter ) ) /* Nothing to do */ return; type = vik_treeview_item_get_type ( vlp->vt, &iter ); if ( type == VIK_TREEVIEW_TYPE_LAYER ) { // Get confirmation from the user if ( ! a_dialog_yes_or_no ( VIK_GTK_WINDOW_FROM_WIDGET(vlp), _("Are you sure you want to delete %s?"), vik_layer_get_name ( VIK_LAYER(vik_treeview_item_get_pointer ( vlp->vt, &iter )) ) ) ) return; VikAggregateLayer *parent = vik_treeview_item_get_parent ( vlp->vt, &iter ); if ( parent ) { /* reset trigger if trigger deleted */ if ( vik_layers_panel_get_selected ( vlp ) == vik_viewport_get_trigger ( vlp->vvp ) ) vik_viewport_set_trigger ( vlp->vvp, NULL ); 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 ) { 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) ); } } }
VikLayer *vik_layers_panel_get_selected ( VikLayersPanel *vlp ) { GtkTreeIter iter, parent; gint type; if ( ! vik_treeview_get_selected_iter ( vlp->vt, &iter ) ) return NULL; type = vik_treeview_item_get_type ( vlp->vt, &iter ); while ( type != VIK_TREEVIEW_TYPE_LAYER ) { if ( ! vik_treeview_item_get_parent_iter ( vlp->vt, &iter, &parent ) ) return NULL; iter = parent; type = vik_treeview_item_get_type ( vlp->vt, &iter ); } return VIK_LAYER( vik_treeview_item_get_pointer ( vlp->vt, &iter ) ); }
static void layers_move_item ( VikLayersPanel *vlp, gboolean up ) { GtkTreeIter iter; VikAggregateLayer *parent; /* TODO: deactivate the buttons and stuff */ if ( ! vik_treeview_get_selected_iter ( vlp->vt, &iter ) ) return; vik_treeview_select_iter ( vlp->vt, &iter, FALSE ); /* cancel any layer-name editing going on... */ if ( vik_treeview_item_get_type ( vlp->vt, &iter ) == VIK_TREEVIEW_TYPE_LAYER ) { parent = VIK_AGGREGATE_LAYER(vik_treeview_item_get_parent ( vlp->vt, &iter )); if ( parent ) /* not toplevel */ { vik_aggregate_layer_move_layer ( parent, &iter, up ); vik_layers_panel_emit_update ( vlp ); } } }
/** * a_clipboard_copy_selected: * * Make a copy of selected object and associate ourselves with the clipboard. */ void a_clipboard_copy_selected ( VikLayersPanel *vlp ) { VikLayer *sel = vik_layers_panel_get_selected ( vlp ); GtkTreeIter iter; VikClipboardDataType type; guint16 layer_type = 0; gint subtype = 0; guint8 *data = NULL; guint len; const gchar *name = NULL; if ( ! sel ) return; vik_treeview_get_selected_iter ( sel->vt, &iter ); layer_type = sel->type; if ( vik_treeview_item_get_type ( sel->vt, &iter ) == VIK_TREEVIEW_TYPE_SUBLAYER ) { type = VIK_CLIPBOARD_DATA_SUBLAYER; if ( vik_layer_get_interface(layer_type)->copy_item) { subtype = vik_treeview_item_get_data(sel->vt, &iter); vik_layer_get_interface(layer_type)->copy_item(sel, subtype, vik_treeview_item_get_pointer(sel->vt, &iter), &data, &len ); // This name is used in setting the text representation of the item on the clipboard. name = vik_treeview_item_get_name(sel->vt, &iter); } } else { gint ilen; type = VIK_CLIPBOARD_DATA_LAYER; vik_layer_marshall ( sel, &data, &ilen ); len = ilen; name = vik_layer_get_name ( vik_treeview_item_get_pointer(sel->vt, &iter) ); } if (data) { a_clipboard_copy( type, layer_type, subtype, len, name, data); } }
void vik_layers_panel_cut_selected ( VikLayersPanel *vlp ) { gint type; GtkTreeIter iter; if ( ! vik_treeview_get_selected_iter ( vlp->vt, &iter ) ) /* Nothing to do */ return; type = vik_treeview_item_get_type ( vlp->vt, &iter ); if ( type == VIK_TREEVIEW_TYPE_LAYER ) { VikAggregateLayer *parent = vik_treeview_item_get_parent ( vlp->vt, &iter ); if ( parent ) { /* reset trigger if trigger deleted */ if ( vik_layers_panel_get_selected ( vlp ) == vik_viewport_get_trigger ( vlp->vvp ) ) vik_viewport_set_trigger ( vlp->vvp, NULL ); a_clipboard_copy_selected ( 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 cut 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)->cut_item ) { gint subtype = vik_treeview_item_get_data( vlp->vt, &iter); vik_layer_get_interface(sel->type)->cut_item ( sel, subtype, vik_treeview_item_get_pointer(sel->vt, &iter) ); } } }
static void menu_popup_cb ( VikLayersPanel *vlp ) { GtkTreeIter iter; layers_popup ( vlp, vik_treeview_get_selected_iter ( vlp->vt, &iter ) ? &iter : NULL, 0 ); }