package Excel::Template::Container; use strict; BEGIN { use vars qw(@ISA); @ISA = qw(Excel::Template::Base); use Excel::Template::Base; } # Containers are objects that can contain arbitrary elements, such as # PageDefs or Loops. sub new { my $class = shift; my $self = $class->SUPER::new(@_); $self->{ELEMENTS} = [] unless exists $self->{ELEMENTS} && ref $self->{ELEMENTS} eq 'ARRAY'; return $self; } # Removed as unused code #sub _do_page #{ # my $self = shift; # my ($method, $context) = @_; # # for my $e (@{$self->{ELEMENTS}}) # { # $e->enter_scope($context); # $e->$method($context); # $e->exit_scope($context, 1); # } # # return 1; #} # #sub begin_page { _do_page 'begin_page', @_ } #sub end_page { _do_page 'end_page', @_ } sub iterate_over_children { my $self = shift; my ($context) = @_; my $continue = 1; for my $e ( @{$self->{ELEMENTS}}) { $e->enter_scope($context); my $rc = $e->render($context); $continue = $rc if $continue; $e->exit_scope($context); } return $continue; } sub render { $_[0]->iterate_over_children($_[1]) } #{ # my $self = shift; # my ($context) = @_; # # return $self->iterate_over_children($context); #} # Removed as unused code #sub max_of #{ # my $self = shift; # my ($context, $attr) = @_; # # my $max = $context->get($self, $attr); # # ELEMENT: # foreach my $e (@{$self->{ELEMENTS}}) # { # $e->enter_scope($context); # # my $v = $e->isa('CONTAINER') # ? $e->max_of($context, $attr) # : $e->calculate($context, $attr); # # $max = $v if $max < $v; # # $e->exit_scope($context, 1); # } # # return $max; #} # #sub total_of #{ # my $self = shift; # my ($context, $attr) = @_; # # my $total = 0; # # ELEMENT: # foreach my $e (@{$self->{ELEMENTS}}) # { # $e->enter_scope($context); # # $total += $e->isa('CONTAINER') # ? $e->total_of($context, $attr) # : $e->calculate($context, $attr); # # $e->exit_scope($context, 1); # } # # return $total; #} 1; __END__ =head1 NAME Excel::Template::Container =head1 PURPOSE =head1 NODE NAME =head1 INHERITANCE =head1 ATTRIBUTES =head1 CHILDREN =head1 AFFECTS =head1 DEPENDENCIES =head1 USAGE =head1 AUTHOR Rob Kinyon (rob.kinyon@gmail.com) =head1 SEE ALSO =cut