Added new tests, fixed a bug, and cleaned up more code: Intermediate check-in
[p5sagit/Excel-Template.git] / lib / Excel / Template / Container.pm
1 package Excel::Template::Container;
2
3 use strict;
4
5 BEGIN {
6     use vars qw(@ISA);
7     @ISA = qw(Excel::Template::Base);
8
9     use Excel::Template::Base;
10 }
11
12 # Containers are objects that can contain arbitrary elements, such as
13 # PageDefs or Loops.
14
15 sub new
16 {
17     my $class = shift;
18     my $self = $class->SUPER::new(@_);
19
20     $self->{ELEMENTS} = []
21         unless exists $self->{ELEMENTS} &&
22             ref $self->{ELEMENTS} eq 'ARRAY';
23
24     return $self;
25 }
26
27 # Removed as unused code
28 #sub _do_page
29 #{
30 #    my $self = shift;
31 #    my ($method, $context) = @_;
32 #
33 #    for my $e (@{$self->{ELEMENTS}})
34 #    {
35 #        $e->enter_scope($context);
36 #        $e->$method($context);
37 #        $e->exit_scope($context, 1);
38 #    }
39 #
40 #    return 1;
41 #}
42 #
43 #sub begin_page { _do_page 'begin_page', @_ }
44 #sub end_page   { _do_page 'end_page', @_   }
45
46 sub iterate_over_children
47 {
48     my $self = shift;
49     my ($context) = @_;
50
51     my $continue = 1;
52
53     for my $e (
54         @{$self->{ELEMENTS}})
55     {
56         $e->enter_scope($context);
57
58         my $rc = $e->render($context);
59         $continue = $rc if $continue;
60
61         $e->exit_scope($context);
62     }
63
64     return $continue;
65 }
66
67 sub render { $_[0]->iterate_over_children($_[1]) }
68 #{
69 #    my $self = shift;
70 #    my ($context) = @_;
71 #
72 #    return $self->iterate_over_children($context);
73 #}
74
75 # Removed as unused code
76 #sub max_of
77 #{
78 #    my $self = shift;
79 #    my ($context, $attr) = @_;
80 #
81 #    my $max = $context->get($self, $attr);
82 #
83 #    ELEMENT:
84 #    foreach my $e (@{$self->{ELEMENTS}})
85 #    {
86 #        $e->enter_scope($context);
87 #
88 #        my $v = $e->isa('CONTAINER')
89 #            ? $e->max_of($context, $attr)
90 #            : $e->calculate($context, $attr);
91 #
92 #        $max = $v if $max < $v;
93 #
94 #        $e->exit_scope($context, 1);
95 #    }
96 #
97 #    return $max;
98 #}
99 #
100 #sub total_of
101 #{
102 #    my $self = shift;
103 #    my ($context, $attr) = @_;
104 #
105 #    my $total = 0;
106 #
107 #    ELEMENT:
108 #    foreach my $e (@{$self->{ELEMENTS}})
109 #    {
110 #        $e->enter_scope($context);
111 #
112 #        $total += $e->isa('CONTAINER')
113 #            ? $e->total_of($context, $attr)
114 #            : $e->calculate($context, $attr);
115 #
116 #        $e->exit_scope($context, 1);
117 #    }
118 #
119 #    return $total;
120 #}
121
122 1;
123 __END__
124
125 =head1 NAME
126
127 Excel::Template::Container
128
129 =head1 PURPOSE
130
131 =head1 NODE NAME
132
133 =head1 INHERITANCE
134
135 =head1 ATTRIBUTES
136
137 =head1 CHILDREN
138
139 =head1 AFFECTS
140
141 =head1 DEPENDENCIES
142
143 =head1 USAGE
144
145 =head1 AUTHOR
146
147 Rob Kinyon (rob.kinyon@gmail.com)
148
149 =head1 SEE ALSO
150
151 =cut