App-Guiio
view release on metacpan or search on metacpan
setup/actions/clipboard.pl view on Meta::CPAN
use List::Util qw(min max) ;
#----------------------------------------------------------------------------------------------
register_action_handlers
(
'Copy to clipboard' =>
[
['C00-c', 'C00-Insert']
, \&export_to_clipboard_as_ascii
],
'Insert from clipboard' =>
[
['C00-v', '00S-Insert']
, \&insert_from_clipboard
],
#'Export to clipboard & primary as ascii'=> ['C00-e', \&export_to_clipboard_as_ascii] ,
#'Import from clipboard to box'=> ['C0S-E', \&import_from_clipboard_to_box] ,
#'Import from primary to box'=> ['0A0-e', \&import_from_primary_to_box] ,
) ;
#----------------------------------------------------------------------------------------------
sub export_to_clipboard_as_ascii
{
my ($self) = @_ ;
my $ascii = $self->transform_elements_to_ascii_buffer($self->get_selected_elements(1)) ;
Gtk2::Clipboard->get (Gtk2::Gdk->SELECTION_CLIPBOARD)->set_text($ascii);
# also put in selection -- DH
Gtk2::Clipboard->get (Gtk2::Gdk->SELECTION_PRIMARY)->set_text($ascii);
}
#----------------------------------------------------------------------------------------------
sub import_from_clipboard_to_box
{
my ($self) = @_ ;
my $ascii = Gtk2::Clipboard->get (Gtk2::Gdk->SELECTION_CLIPBOARD)->wait_for_text();
my $element = $self->add_new_element_named('stencils/guiio/box', $self->{MOUSE_X}, $self->{MOUSE_Y}) ;
$element->set_text('', $ascii) ;
$self->select_elements(1, $element) ;
$self->update_display() ;
}
#----------------------------------------------------------------------------------------------
sub import_from_primary_to_box
{
my ($self) = @_ ;
my $ascii = Gtk2::Clipboard->get (Gtk2::Gdk->SELECTION_PRIMARY)->wait_for_text();
my $element = $self->add_new_element_named('stencils/guiio/box', $self->{MOUSE_X}, $self->{MOUSE_Y}) ;
$element->set_text('', $ascii) ;
$self->select_elements(1, $element) ;
$self->update_display() ;
}
#----------------------------------------------------------------------------------------------
sub copy_to_clipboard
{
my ($self) = @_ ;
my @selected_elements = $self->get_selected_elements(1) ;
return unless @selected_elements ;
my %selected_elements = map { $_ => 1} @selected_elements ;
my @connections =
grep
{
exists $selected_elements{$_->{CONNECTED}} && exists $selected_elements{$_->{CONNECTEE}}
}
$self->get_connections_containing(@selected_elements) ;
my $elements_and_connections =
{
ELEMENTS => \@selected_elements,
CONNECTIONS => \@connections ,
};
# print Data::TreeDumper::DumpTree $elements_and_connections, '$elements_and_connections:', MAX_DEPTH => 2 ;
#~ print Data::Dumper::Dumper $elements_and_connections ;#, '$elements_and_connections:', MAX_DEPTH => 2 ;
$self->{CLIPBOARD} = Clone::clone($elements_and_connections) ;
} ;
#----------------------------------------------------------------------------------------------
sub insert_from_clipboard
{
my ($self) = @_ ;
$self->create_undo_snapshot() ;
my $ascii = Gtk2::Clipboard->get (Gtk2::Gdk->SELECTION_CLIPBOARD)->wait_for_text();
$self->transform_ascii_string_to_elements($ascii);
# $self->select_elements(0, @{$self->{ELEMENTS}}) ;
# unless(defined $x_offset)
# {
# my $min_x = min(map {$_->{X}} @{$self->{CLIPBOARD}{ELEMENTS}}) ;
# $x_offset = $min_x - $self->{MOUSE_X} ;
# }
# unless(defined $y_offset)
# {
# my $min_y = min(map {$_->{Y}} @{$self->{CLIPBOARD}{ELEMENTS}}) ;
# $y_offset = $min_y - $self->{MOUSE_Y} ;
# }
# my %new_group ;
# for my $element (@{$self->{CLIPBOARD}{ELEMENTS}})
# {
# @$element{'X', 'Y'}= ($element->{X} - $x_offset, $element->{Y} - $y_offset) ;
# if(exists $element->{GROUP} && scalar(@{$element->{GROUP}}) > 0)
# {
# my $group = $element->{GROUP}[-1] ;
# unless(exists $new_group{$group})
# {
# $new_group{$group} = {'GROUP_COLOR' => $self->get_group_color()} ;
# }
# pop @{$element->{GROUP}} ;
# push @{$element->{GROUP}}, $new_group{$group} ;
# }
# else
# {
# delete $element->{GROUP} ;
# }
# }
# my $clipboard = Clone::clone($self->{CLIPBOARD}) ;
# $self->add_elements(@{$clipboard->{ELEMENTS}}) ;
# $self->add_connections(@{$clipboard->{CONNECTIONS}}) ;
$self->update_display() ;
} ;
( run in 1.229 second using v1.01-cache-2.11-cpan-2398b32b56e )