File Coverage

blib/lib/Wx/DemoModules/wxClipboard.pm
Criterion Covered Total %
statement 1 3 33.3
branch n/a
condition n/a
subroutine 1 1 100.0
pod n/a
total 2 4 50.0


line stmt bran cond sub pod time code
1             #############################################################################
2             ## Name: lib/Wx/DemoModules/wxClipboard.pm
3             ## Purpose: wxPerl demo helper for Wx::Clipboard
4             ## Author: Mattia Barbon
5             ## Modified by:
6             ## Created: 12/09/2001
7             ## RCS-ID: $Id: wxClipboard.pm 3082 2011-07-04 16:40:16Z mdootson $
8             ## Copyright: (c) 2001, 2003, 2006, 2011 Mattia Barbon
9             ## Licence: This program is free software; you can redistribute it and/or
10             ## modify it under the same terms as Perl itself
11             #############################################################################
12              
13 1     1   1584 use Wx::DND;
  0            
  0            
14              
15             package Wx::DemoModules::wxClipboard;
16              
17             use strict;
18             use base qw(Wx::Panel Class::Accessor::Fast);
19              
20             use Wx qw(:dnd wxTheClipboard wxNullBitmap);
21             use Wx::Event qw(EVT_BUTTON);
22              
23             use Wx::DemoModules::lib::DataObjects;
24              
25             __PACKAGE__->mk_ro_accessors( qw(text image) );
26              
27             sub new {
28             my $class = shift;
29             my $this = $class->SUPER::new( $_[0], -1 );
30              
31             my $copy = Wx::Button->new( $this, -1, 'Copy Text', [ 20, 20 ] );
32             my $paste = Wx::Button->new( $this, -1, 'Paste', [ 120, 20 ] );
33             my $copy_im = Wx::Button->new( $this, -1, 'Copy Image', [ 20, 50 ] );
34              
35             $this->{text} = Wx::StaticText->new( $this, -1, '', [ 220, 20 ] );
36             $this->{image} = Wx::StaticBitmap->new( $this, -1, wxNullBitmap,
37             [ 220, 150 ], [ 100, 100 ] );
38              
39             EVT_BUTTON( $this, $copy, \&OnCopyText );
40             EVT_BUTTON( $this, $paste, \&OnPaste );
41             EVT_BUTTON( $this, $copy_im, \&OnCopyImage );
42              
43             my $copy_both = Wx::Button->new( $this, -1, 'Copy Both', [ 20, 80 ] );
44             EVT_BUTTON( $this, $copy_both, \&OnCopyBoth );
45              
46             # this does NOT work on WinXP
47             my $copy_pd = Wx::Button->new( $this, -1, 'Copy Data', [ 20, 110 ] );
48             EVT_BUTTON( $this, $copy_pd, \&OnCopyData );
49              
50             # wxTheClipboard->UsePrimarySelection( 0 );
51              
52             return $this;
53             }
54              
55             sub _Copy {
56             my $data = shift;
57              
58             wxTheClipboard->Open;
59             wxTheClipboard->SetData( $data );
60             wxTheClipboard->Close;
61             }
62              
63             sub OnCopyText {
64             my( $this, $event ) = @_;
65              
66             _Copy( get_text_data_object() );
67             Wx::LogMessage( "Copied some text" );
68             }
69              
70             sub OnCopyImage {
71             my( $this, $event ) = @_;
72              
73             _Copy( get_bitmap_data_object() );
74             Wx::LogMessage( "Copied an image" );
75             }
76              
77             sub OnCopyBoth {
78             my( $this, $event ) = @_;
79              
80             _Copy( get_text_bitmap_data_object() );
81             Wx::LogMessage( "Copied both text and image" );
82             }
83              
84             sub OnCopyData {
85             my( $this, $event ) = @_;
86             my $PerlData = { fruit => 'lemon', colour => 'yellow' };
87             _Copy( get_perl_data_object( $PerlData ) );
88             Wx::LogMessage( "Copied perl data object: fruit=$PerlData->{fruit}, colour=$PerlData->{colour}" );
89             }
90              
91             sub OnPaste {
92             my( $this, $event ) = @_;
93              
94             wxTheClipboard->Open;
95              
96             my $text = '';
97            
98             # The cliboard may contain a composite object
99             # in which case, for GTK at least, we need to
100             # check for wxDF_UNICODETEXT in addition to
101             # wxDF_TEXT.
102             # wxDF_UNICODETEXT may not be wrapped in the
103             # version of Wx installed, so we may have to use
104             # a workaround.
105            
106             my $unicodetext_wxwidgets_id = 13;
107             my $unicodetextformat = ( defined(&Wx::wxDF_UNICODETEXT) )
108             ? wxDF_UNICODETEXT() : Wx::DataFormat->newNative( $unicodetext_wxwidgets_id );
109            
110             if( wxTheClipboard->IsSupported( wxDF_TEXT ) || wxTheClipboard->IsSupported( $unicodetextformat ) ) {
111             my $data = Wx::TextDataObject->new;
112             my $ok = wxTheClipboard->GetData( $data );
113             if( $ok ) {
114             Wx::LogMessage( "Pasted text data" );
115             $text = $data->GetText;
116             } else {
117             Wx::LogMessage( "Error pasting text data" );
118             $text = '';
119             }
120             }
121            
122             $this->text->SetLabel( $text );
123              
124             my $bitmap = wxNullBitmap;
125             if( wxTheClipboard->IsSupported( wxDF_BITMAP ) ) {
126             my $data = Wx::BitmapDataObject->new;
127             my $ok = wxTheClipboard->GetData( $data );
128             if( $ok ) {
129             Wx::LogMessage( "Pasted bitmap data" );
130             $bitmap = $data->GetBitmap;
131             } else {
132             Wx::LogMessage( "Error pasting bitmap data" );
133             $bitmap = wxNullBitmap;
134             }
135             }
136             $this->image->SetBitmap( $bitmap );
137              
138             # testing the perl data object
139             my $data = get_perl_data_object();
140             Wx::LogMessage( "Testing if clipboard supports: " . $data->GetFormat->GetId() );
141             if( wxTheClipboard->IsSupported( $data->GetFormat ) ) {
142             Wx::LogMessage( "It does: get data from clipboard" );
143             my $ok = wxTheClipboard->GetData( $data );
144             if( $ok ) {
145             Wx::LogMessage( "Pasted perl data object" );
146             my $PerlData = $data->GetPerlData();
147             foreach (keys %$PerlData) {
148             $text .= "$_ = $PerlData->{$_} ";
149             }
150             } else {
151             Wx::LogMessage( "Error pasting perl data object" );
152             $text = '';
153             }
154             $this->text->SetLabel( $text );
155             }
156              
157             wxTheClipboard->Close;
158             }
159              
160             sub add_to_tags { qw(dnd) }
161             sub title { 'wxClipboard' }
162              
163             1;