r13919@rob-kinyons-powerbook58: rob | 2006-06-02 10:30:39 -0400
Rob Kinyon [Fri, 2 Jun 2006 19:20:47 +0000 (19:20 +0000)]
 Added <image> as a functioning tag

MANIFEST
lib/Excel/Template/Element/Image.pm
lib/Excel/Template/Factory.pm
t/024_image.t [new file with mode: 0644]
t/Spreadsheet/WriteExcel/Worksheet.pm

index 80cd782..5fc2f97 100644 (file)
--- 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
index 5d9c97b..2817ad4 100644 (file)
@@ -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
 
-  <image path="/Some/Full/Path"/>
+  <image path="/Some/Full/Path" />
+  <image path="/Some/Full/Path" offset="2,5" />
+  <image path="/Some/Full/Path" scale="2,0.4" />
+  <image path="/Some/Full/Path" offset="4,0" scale="0,2" />
+
+Please see L<Spreadsheet::WriteExcel/> for more information about the offset and scaling options as well as any other restrictions that might be in place. This node does B<NOT> perform any sort of validation upon your parameters. You are assumed to know what you are doing.
 
 =head1 AUTHOR
 
index 98187b2..3c86dc0 100644 (file)
@@ -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 (file)
index 0000000..0d5b33e
--- /dev/null
@@ -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__
+<workbook>
+  <worksheet>
+    <cell text="before" />
+    <image path="/full/path" />
+    <cell text="after" />
+    <image path="/full/path" offset="2,2"/>
+    <image path="/full/path" scale="2,2"/>
+    <image path="/full/path" scale="1.1,0" offset="0,1"/>
+  </worksheet>
+</workbook>
+
index 450f401..2f6428a 100644 (file)
@@ -97,5 +97,14 @@ sub keep_leading_zeros {
     }
 }
 
+sub insert_image {
+    my $self = shift;
+
+    {
+        local $" = "', '";
+        push @mock::calls, __PACKAGE__ . "::insert_image( '@_' )";
+    }
+}
+
 1;
 __END__