From: Rob Kinyon Date: Fri, 2 Jun 2006 19:20:47 +0000 (+0000) Subject: r13919@rob-kinyons-powerbook58: rob | 2006-06-02 10:30:39 -0400 X-Git-Tag: v0.27~8 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=p5sagit%2FExcel-Template.git;a=commitdiff_plain;h=d301803791daffbde0599af209360e17a0412ff5 r13919@rob-kinyons-powerbook58: rob | 2006-06-02 10:30:39 -0400 Added as a functioning tag --- diff --git a/MANIFEST b/MANIFEST index 80cd782..5fc2f97 100644 --- a/MANIFEST +++ b/MANIFEST @@ -72,6 +72,7 @@ t/020_worksheet_attributes.t t/021_loop_error.t t/022_keep_leading_zeros.t t/023_relative_values.t +t/024_image.t t/998_pod.t t/999_pod_coverage.t t/mock.pm diff --git a/lib/Excel/Template/Element/Image.pm b/lib/Excel/Template/Element/Image.pm index 5d9c97b..2817ad4 100644 --- a/lib/Excel/Template/Element/Image.pm +++ b/lib/Excel/Template/Element/Image.pm @@ -9,6 +9,38 @@ BEGIN { use Excel::Template::Element; } +sub render { + my $self = shift; + my ($context) = @_; + + my $path = $context->get( $self, 'PATH' ); + my ($row, $col, $offset, $scale) = map { + $context->get($self, $_) + } qw( ROW COL OFFSET SCALE ); + + my @offsets = (0,0); + if ( $offset =~ /^\s*([\d.]+)\s*,\s*([\d.]+)/ ) { + @offsets = ($1,$2); + } + + my @scales = (0,0); + if ( $scale =~ /^\s*([\d.]+)\s*,\s*([\d.]+)/ ) { + @scales = ($1,$2); + } + + $context->active_worksheet->insert_image( + $row, $col, $path, @offsets, @scales, + ); + + return 1; +} + +sub deltas { + return { + COL => +1, + }; +} + 1; __END__ @@ -34,7 +66,12 @@ None =head1 USAGE - + + + + + +Please see L for more information about the offset and scaling options as well as any other restrictions that might be in place. This node does B perform any sort of validation upon your parameters. You are assumed to know what you are doing. =head1 AUTHOR diff --git a/lib/Excel/Template/Factory.pm b/lib/Excel/Template/Factory.pm index 98187b2..3c86dc0 100644 --- a/lib/Excel/Template/Factory.pm +++ b/lib/Excel/Template/Factory.pm @@ -15,6 +15,7 @@ my %Manifest = ( 'BACKREF' => 'Excel::Template::Element::Backref', 'CELL' => 'Excel::Template::Element::Cell', 'FORMULA' => 'Excel::Template::Element::Formula', + 'IMAGE' => 'Excel::Template::Element::Image', 'RANGE' => 'Excel::Template::Element::Range', 'VAR' => 'Excel::Template::Element::Var', @@ -48,7 +49,7 @@ my %isBuildable = map { $_ => ~~1 } qw( WORKBOOK WORKSHEET FORMAT BOLD HIDDEN ITALIC LOCKED OUTLINE SHADOW STRIKEOUT IF ROW LOOP SCOPE KEEP_LEADING_ZEROS - CELL FORMULA + CELL FORMULA IMAGE VAR BACKREF RANGE ); diff --git a/t/024_image.t b/t/024_image.t new file mode 100644 index 0000000..0d5b33e --- /dev/null +++ b/t/024_image.t @@ -0,0 +1,46 @@ +BEGIN{ $^W = 0 } +use strict; + +use Test::More tests => 4; + +use lib 't'; +use mock; +mock::reset; + +my $CLASS = 'Excel::Template'; +use_ok( $CLASS ); + +my $object = $CLASS->new( + file => \*DATA, +); +isa_ok( $object, $CLASS ); + +ok( $object->write_file( 'filename' ), 'Successfuly wrote file' ); + +my @calls = mock::get_calls; +is( join( $/, @calls, '' ), <<__END_EXPECTED__, 'Calls match up' ); +Spreadsheet::WriteExcel::new( 'filename' ) +Spreadsheet::WriteExcel::add_format( '' ) +Spreadsheet::WriteExcel::add_worksheet( '' ) +Spreadsheet::WriteExcel::Worksheet::new( '' ) +Spreadsheet::WriteExcel::Worksheet::write( '0', '0', 'before', '1' ) +Spreadsheet::WriteExcel::Worksheet::insert_image( '0', '1', '/full/path', '0', '0', '0', '0' ) +Spreadsheet::WriteExcel::Worksheet::write( '0', '2', 'after', '1' ) +Spreadsheet::WriteExcel::Worksheet::insert_image( '0', '3', '/full/path', '2', '2', '0', '0' ) +Spreadsheet::WriteExcel::Worksheet::insert_image( '0', '4', '/full/path', '0', '0', '2', '2' ) +Spreadsheet::WriteExcel::Worksheet::insert_image( '0', '5', '/full/path', '0', '1', '1.1', '0' ) +Spreadsheet::WriteExcel::close( '' ) +__END_EXPECTED__ + +__DATA__ + + + + + + + + + + + diff --git a/t/Spreadsheet/WriteExcel/Worksheet.pm b/t/Spreadsheet/WriteExcel/Worksheet.pm index 450f401..2f6428a 100644 --- a/t/Spreadsheet/WriteExcel/Worksheet.pm +++ b/t/Spreadsheet/WriteExcel/Worksheet.pm @@ -97,5 +97,14 @@ sub keep_leading_zeros { } } +sub insert_image { + my $self = shift; + + { + local $" = "', '"; + push @mock::calls, __PACKAGE__ . "::insert_image( '@_' )"; + } +} + 1; __END__