KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > fop > fo > flow > ListBlock


1 /*
2  * $Id: ListBlock.java,v 1.21.2.9 2003/04/11 00:24:38 pietsch 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.fo.flow;
52
53 // FOP
54
import org.apache.fop.fo.*;
55 import org.apache.fop.layout.*;
56 import org.apache.fop.layout.BlockArea;
57 import org.apache.fop.apps.FOPException;
58
59 public class ListBlock extends FObj {
60
61     public static class Maker extends FObj.Maker {
62         public FObj make(FObj parent, PropertyList propertyList,
63                          String JavaDoc systemId, int line, int column)
64             throws FOPException {
65             return new ListBlock(parent, propertyList,
66                                  systemId, line, column);
67         }
68
69     }
70
71     public static FObj.Maker maker() {
72         return new ListBlock.Maker();
73     }
74
75     int align;
76     int alignLast;
77     int breakBefore;
78     int breakAfter;
79     int lineHeight;
80     int startIndent;
81     int endIndent;
82     int spaceBefore;
83     int spaceAfter;
84     int spaceBetweenListRows = 0;
85
86     public ListBlock(FObj parent, PropertyList propertyList,
87                      String JavaDoc systemId, int line, int column) {
88         super(parent, propertyList, systemId, line, column);
89     }
90
91     public String JavaDoc getName() {
92         return "fo:list-block";
93     }
94
95     public int layout(Area area) throws FOPException {
96         if (this.marker == START) {
97
98             // Common Accessibility Properties
99
AccessibilityProps mAccProps = propMgr.getAccessibilityProps();
100         
101             // Common Aural Properties
102
AuralProps mAurProps = propMgr.getAuralProps();
103
104             // Common Border, Padding, and Background Properties
105
BorderAndPadding bap = propMgr.getBorderAndPadding();
106             BackgroundProps bProps = propMgr.getBackgroundProps();
107
108             // Common Margin Properties-Block
109
MarginProps mProps = propMgr.getMarginProps();
110
111             // Common Relative Position Properties
112
RelativePositionProps mRelProps = propMgr.getRelativePositionProps();
113
114             // this.properties.get("break-after");
115
// this.properties.get("break-before");
116
// this.properties.get("id");
117
// this.properties.get("keep-together");
118
// this.properties.get("keep-with-next");
119
// this.properties.get("keep-with-previous");
120
// this.properties.get("provisional-distance-between-starts");
121
// this.properties.get("provisional-label-separation");
122

123             this.align = this.properties.get("text-align").getEnum();
124             this.alignLast = this.properties.get("text-align-last").getEnum();
125             this.lineHeight =
126                 this.properties.get("line-height").getLength().mvalue();
127             this.startIndent =
128                 this.properties.get("start-indent").getLength().mvalue();
129             this.endIndent =
130                 this.properties.get("end-indent").getLength().mvalue();
131             this.spaceBefore =
132                 this.properties.get("space-before.optimum").getLength().mvalue();
133             this.spaceAfter =
134                 this.properties.get("space-after.optimum").getLength().mvalue();
135             this.spaceBetweenListRows = 0; // not used at present
136

137             this.marker = 0;
138
139             if (area instanceof BlockArea) {
140                 area.end();
141             }
142
143             if (spaceBefore != 0) {
144                 area.addDisplaySpace(spaceBefore);
145             }
146
147             if (this.isInTableCell) {
148                 startIndent += forcedStartOffset;
149                 endIndent += area.getAllocationWidth() - forcedWidth
150                              - forcedStartOffset;
151             }
152
153             // initialize id
154
String JavaDoc id = this.properties.get("id").getString();
155             try {
156                 area.getIDReferences().initializeID(id, area);
157             }
158             catch(FOPException e) {
159                 if (!e.isLocationSet()) {
160                     e.setLocation(systemId, line, column);
161                 }
162                 throw e;
163             }
164         }
165
166         BlockArea blockArea =
167             new BlockArea(propMgr.getFontState(area.getFontInfo()),
168                           area.getAllocationWidth(), area.spaceLeft(),
169                           startIndent, endIndent, 0, align, alignLast,
170                           lineHeight);
171         // Fix links in lists in tables problem
172
blockArea.setTableCellXOffset(area.getTableCellXOffset());
173         blockArea.setGeneratedBy(this);
174         this.areasGenerated++;
175         if (this.areasGenerated == 1)
176             blockArea.isFirst(true);
177             // for normal areas this should be the only pair
178
// blockArea.addLineagePair(this, this.areasGenerated);
179

180         // markers
181
// if (this.hasMarkers())
182
// blockArea.addMarkers(this.getMarkers());
183

184
185         blockArea.setParent(area);
186         blockArea.setPage(area.getPage());
187         blockArea.setBackground(propMgr.getBackgroundProps());
188         blockArea.start();
189
190         blockArea.setAbsoluteHeight(area.getAbsoluteHeight());
191         blockArea.setIDReferences(area.getIDReferences());
192
193         int numChildren = this.children.size();
194         for (int i = this.marker; i < numChildren; i++) {
195             if (!(children.get(i) instanceof ListItem)) {
196                 log.error("children of list-blocks must be list-items");
197                 return Status.OK;
198             }
199             ListItem listItem = (ListItem)children.get(i);
200             int status;
201             if (Status.isIncomplete((status = listItem.layout(blockArea)))) {
202                 if (status == Status.AREA_FULL_NONE && i > 0) {
203                     status = Status.AREA_FULL_SOME;
204                 }
205                 this.marker = i;
206                 blockArea.end();
207                 area.addChild(blockArea);
208                 area.increaseHeight(blockArea.getHeight());
209                 return status;
210             }
211         }
212
213         blockArea.end();
214         area.addChild(blockArea);
215         area.increaseHeight(blockArea.getHeight());
216
217         if (spaceAfter != 0) {
218             area.addDisplaySpace(spaceAfter);
219         }
220
221         if (area instanceof BlockArea) {
222             area.start();
223         }
224
225         blockArea.isLast(true);
226         return Status.OK;
227     }
228
229 }
230
Popular Tags