Wx-Demo

 view release on metacpan or  search on metacpan

lib/Wx/DemoModules/wxClipboard.pm  view on Meta::CPAN

  _Copy( get_text_bitmap_data_object() );
  Wx::LogMessage( "Copied both text and image" );
}

sub OnCopyData {
  my( $this, $event ) = @_;
  my $PerlData = { fruit => 'lemon', colour => 'yellow' };
  _Copy( get_perl_data_object( $PerlData ) );
  Wx::LogMessage( "Copied perl data object: fruit=$PerlData->{fruit}, colour=$PerlData->{colour}" );
}

sub OnPaste {
  my( $this, $event ) = @_;

  wxTheClipboard->Open;

  my $text = '';
  
  # The cliboard may contain a composite object
  # in which case, for GTK at least, we need to
  # check for wxDF_UNICODETEXT in addition to
  # wxDF_TEXT.
  # wxDF_UNICODETEXT may not be wrapped in the 
  # version of Wx installed, so we may have to use
  # a workaround.
  
  my $unicodetext_wxwidgets_id = 13;
  my $unicodetextformat = ( defined(&Wx::wxDF_UNICODETEXT) ) 
    ? wxDF_UNICODETEXT() : Wx::DataFormat->newNative( $unicodetext_wxwidgets_id );
  
  if( wxTheClipboard->IsSupported( wxDF_TEXT ) || wxTheClipboard->IsSupported( $unicodetextformat ) ) {
    my $data = Wx::TextDataObject->new;
    my $ok = wxTheClipboard->GetData( $data );
    if( $ok ) {
      Wx::LogMessage( "Pasted text data" );
      $text = $data->GetText;
    } else {
      Wx::LogMessage( "Error pasting text data" );
      $text = '';
    }
  }
  
  $this->text->SetLabel( $text );

  my $bitmap = wxNullBitmap;
  if( wxTheClipboard->IsSupported( wxDF_BITMAP ) ) {
    my $data = Wx::BitmapDataObject->new;
    my $ok = wxTheClipboard->GetData( $data );
    if( $ok ) {
      Wx::LogMessage( "Pasted bitmap data" );
      $bitmap =  $data->GetBitmap;
    } else {
      Wx::LogMessage( "Error pasting bitmap data" );
      $bitmap = wxNullBitmap;
    }
  }
  $this->image->SetBitmap( $bitmap );

  # testing the perl data object
  my $data = get_perl_data_object();
  Wx::LogMessage( "Testing if clipboard supports: " . $data->GetFormat->GetId() );
  if( wxTheClipboard->IsSupported( $data->GetFormat ) ) {
    Wx::LogMessage( "It does: get data from clipboard" );
    my $ok = wxTheClipboard->GetData( $data );
    if( $ok ) {
      Wx::LogMessage( "Pasted perl data object" );
      my $PerlData = $data->GetPerlData();
      foreach (keys %$PerlData) {
          $text .= "$_ = $PerlData->{$_} ";
      }
    } else {
      Wx::LogMessage( "Error pasting perl data object" );
      $text = '';
    }
    $this->text->SetLabel( $text );
  }

  wxTheClipboard->Close;
}

sub add_to_tags { qw(dnd) }
sub title { 'wxClipboard' }

1;



( run in 1.523 second using v1.01-cache-2.11-cpan-84e82930d8c )