KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > fop > layout > SpanArea


1 /*
2  * $Id: SpanArea.java,v 1.3.2.3 2003/02/25 14:07:05 jeremias Exp $
3  * ============================================================================
4  * The Apache Software License, Version 1.1
5  * ============================================================================
6  *
7  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without modifica-
10  * tion, are permitted provided that the following conditions are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright notice,
13  * this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright notice,
16  * this list of conditions and the following disclaimer in the documentation
17  * and/or other materials provided with the distribution.
18  *
19  * 3. The end-user documentation included with the redistribution, if any, must
20  * include the following acknowledgment: "This product includes software
21  * developed by the Apache Software Foundation (http://www.apache.org/)."
22  * Alternately, this acknowledgment may appear in the software itself, if
23  * and wherever such third-party acknowledgments normally appear.
24  *
25  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
26  * endorse or promote products derived from this software without prior
27  * written permission. For written permission, please contact
28  * apache@apache.org.
29  *
30  * 5. Products derived from this software may not be called "Apache", nor may
31  * "Apache" appear in their name, without prior written permission of the
32  * Apache Software Foundation.
33  *
34  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
35  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
36  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
37  * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
38  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
39  * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
40  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
41  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
42  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
43  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
44  * ============================================================================
45  *
46  * This software consists of voluntary contributions made by many individuals
47  * on behalf of the Apache Software Foundation and was originally created by
48  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
49  * Software Foundation, please see <http://www.apache.org/>.
50  */

51 package org.apache.fop.layout;
52
53 // FOP
54
import org.apache.fop.render.Renderer;
55 import org.apache.fop.fo.properties.Position;
56
57 // Java
58
import java.util.Iterator JavaDoc;
59
60 public class SpanArea extends AreaContainer {
61
62     private int columnCount;
63     private int currentColumn = 1;
64     private int columnGap = 0;
65
66     // has the area been balanced?
67
private boolean isBalanced = false;
68
69     public SpanArea(FontState fontState, int xPosition, int yPosition,
70                     int allocationWidth, int maxHeight, int columnCount,
71                     int columnGap) {
72         super(fontState, xPosition, yPosition, allocationWidth, maxHeight,
73               Position.ABSOLUTE);
74
75         this.contentRectangleWidth = allocationWidth;
76         this.columnCount = columnCount;
77         this.columnGap = columnGap;
78
79         int columnWidth = (allocationWidth - columnGap * (columnCount - 1))
80                           / columnCount;
81         for (int columnIndex = 0; columnIndex < columnCount; columnIndex++) {
82             int colXPosition = (xPosition
83                                 + columnIndex * (columnWidth + columnGap));
84             int colYPosition = yPosition;
85             ColumnArea colArea = new ColumnArea(fontState, colXPosition,
86                                                 colYPosition, columnWidth,
87                                                 maxHeight, columnCount);
88             addChild(colArea);
89             colArea.setColumnIndex(columnIndex + 1);
90         }
91     }
92
93     public void render(Renderer renderer) {
94         renderer.renderSpanArea(this);
95     }
96
97     public void end() {}
98
99     public void start() {}
100
101     public int spaceLeft() {
102         return maxHeight - currentHeight;
103     }
104
105     public int getColumnCount() {
106         return columnCount;
107     }
108
109     public int getCurrentColumn() {
110         return currentColumn;
111     }
112
113     public void setCurrentColumn(int currentColumn) {
114         if (currentColumn <= columnCount)
115             this.currentColumn = currentColumn;
116         else
117             this.currentColumn = columnCount;
118     }
119
120     public AreaContainer getCurrentColumnArea() {
121         return (AreaContainer)getChildren().get(currentColumn - 1);
122     }
123
124     public boolean isBalanced() {
125         return isBalanced;
126     }
127
128     public void setIsBalanced() {
129         this.isBalanced = true;
130     }
131
132     public int getTotalContentHeight() {
133         int totalContentHeight = 0;
134         for (Iterator JavaDoc e = getChildren().iterator(); e.hasNext(); ) {
135             totalContentHeight +=
136                 ((AreaContainer)e.next()).getContentHeight();
137         }
138         return totalContentHeight;
139     }
140
141     public int getMaxContentHeight() {
142         int maxContentHeight = 0;
143         for (Iterator JavaDoc e = getChildren().iterator(); e.hasNext(); ) {
144             AreaContainer nextElm = (AreaContainer)e.next();
145             if (nextElm.getContentHeight() > maxContentHeight)
146                 maxContentHeight = nextElm.getContentHeight();
147         }
148         return maxContentHeight;
149     }
150
151     public void setPage(Page page) {
152         this.page = page;
153         for (Iterator JavaDoc e = getChildren().iterator(); e.hasNext(); ) {
154             ((AreaContainer)e.next()).setPage(page);
155         }
156     }
157
158     public boolean isLastColumn() {
159         return (currentColumn == columnCount);
160     }
161
162 }
163
Popular Tags