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
