示例#1
0
/**
 * vik_layers_panel_new_layer:
 * @type: type of the new layer
 * 
 * Create a new layer and add to panel.
 */
gboolean vik_layers_panel_new_layer ( VikLayersPanel *vlp, gint type )
{
  VikLayer *l;
  g_assert ( vlp->vvp );
  l = vik_layer_create ( type, vlp->vvp, VIK_GTK_WINDOW_FROM_WIDGET(vlp), TRUE );
  if ( l )
  {
    vik_layers_panel_add_layer ( vlp, l );
    return TRUE;
  }
  return FALSE;
}
示例#2
0
/* our own data type */
static void clip_receive_viking ( GtkClipboard *c, GtkSelectionData *sd, gpointer p ) 
{
  VikLayersPanel *vlp = p;
  vik_clipboard_t *vc;
  if (sd->length == -1) {
    g_warning ( _("paste failed") );
    return;
  } 
  //  g_print("clip receive: target = %s, type = %s\n", gdk_atom_name(sd->target), gdk_atom_name(sd->type));
  g_assert(!strcmp(gdk_atom_name(sd->target), target_table[0].target));

  vc = (vik_clipboard_t *)sd->data;
  //  g_print("  sd->data = %p, sd->length = %d, vc->len = %d\n", sd->data, sd->length, vc->len);

  if (sd->length != sizeof(*vc) + vc->len) {
    g_warning ( _("wrong clipboard data size") );
    return;
  }

  if ( vc->type == VIK_CLIPBOARD_DATA_LAYER )
  {
    VikLayer *new_layer = vik_layer_unmarshall ( vc->data, vc->len, vik_layers_panel_get_viewport(vlp) );
    vik_layers_panel_add_layer ( vlp, new_layer );
  }
  else if ( vc->type == VIK_CLIPBOARD_DATA_SUBLAYER )
  {
    VikLayer *sel = vik_layers_panel_get_selected ( vlp );
    if ( sel && sel->type == vc->layer_type)
    {
      if ( vik_layer_get_interface(vc->layer_type)->paste_item )
        vik_layer_get_interface(vc->layer_type)->paste_item ( sel, vc->subtype, vc->data, vc->len);
    }
    else
      a_dialog_error_msg_extra ( VIK_GTK_WINDOW_FROM_WIDGET(GTK_WIDGET(vlp)),
				 _("The clipboard contains sublayer data for %s layers. "
				   "You must select a layer of this type to paste the clipboard data."),
				 vik_layer_get_interface(vc->layer_type)->name );
  }
}