import org.apache.fop.datatypes.Length;
import org.apache.fop.datatypes.PercentBase;
import org.apache.fop.fo.flow.Table;
-import org.apache.fop.fo.flow.TableBody;
-import org.apache.fop.fo.flow.TableRow;
import org.apache.fop.fo.properties.TableColLength;
import org.apache.fop.layoutmgr.BlockStackingLayoutManager;
import org.apache.fop.layoutmgr.LayoutManager;
import org.apache.fop.traits.MinOptMax;
import org.apache.fop.traits.SpaceVal;
-import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
private Table fobj;
private List columns = null;
- private Body tableHeader = null;
- private Body tableFooter = null;
private Block curBlockArea;
- private List bodyBreaks = new ArrayList();
+ private List bodyBreaks = new java.util.ArrayList();
private BreakPoss headerBreak;
private BreakPoss footerBreak;
columns = cols;
}
- /**
- * Set the table header.
- *
- * @param th the table header layout manager
- */
- public void setTableHeader(Body th) {
- tableHeader = th;
- tableHeader.setParent(this);
- }
-
- /**
- * Set the table footer.
- *
- * @param tf the table footer layout manager
- */
- public void setTableFooter(Body tf) {
- tableFooter = tf;
- tableFooter.setParent(this);
- }
-
/** @see org.apache.fop.layoutmgr.AbstractLayoutManager#initProperties() */
protected void initProperties() {
super.initProperties();
(contentIPD - sumCols) / factors);
}
}
- MinOptMax headerSize = null;
- if (tableHeader != null) {
- tableHeader.resetPosition(null);
- headerBreak = getHeight(tableHeader, context);
- headerSize = headerBreak.getStackingSize();
- stackSize.add(headerSize);
- }
+
+ boolean headerFooterBuilt = false;
- MinOptMax footerSize = null;
- if (tableFooter != null) {
- tableFooter.resetPosition(null);
- footerBreak = getHeight(tableFooter, context);
- footerSize = footerBreak.getStackingSize();
- stackSize.add(footerSize);
- }
+ while ((curLM = (Body)getChildLM()) != null) {
+ if (!headerFooterBuilt) {
+ //Calculate the headers and footers only when needed
+ MinOptMax headerSize = null;
+ if (getTable().getTableHeader() != null) {
+ Body tableHeader = new Body(getTable().getTableHeader());
+ tableHeader.setParent(this);
+ headerBreak = getHeight(tableHeader, context);
+ headerSize = headerBreak.getStackingSize();
+ stackSize.add(headerSize);
+ }
- if (stackSize.opt > context.getStackLimit().max) {
- BreakPoss breakPoss = new BreakPoss(
- new LeafPosition(this, 0));
- breakPoss.setFlag(BreakPoss.NEXT_OVERFLOWS, true);
- breakPoss.setStackingSize(stackSize);
- return breakPoss;
- }
+ MinOptMax footerSize = null;
+ if (getTable().getTableFooter() != null) {
+ Body tableFooter = new Body(getTable().getTableFooter());
+ tableFooter.setParent(this);
+ footerBreak = getHeight(tableFooter, context);
+ footerSize = footerBreak.getStackingSize();
+ stackSize.add(footerSize);
+ }
- while ((curLM = (Body)getChildLM()) != null) {
+ if (stackSize.opt > context.getStackLimit().max) {
+ BreakPoss breakPoss = new BreakPoss(
+ new LeafPosition(this, 0));
+ breakPoss.setFlag(BreakPoss.NEXT_OVERFLOWS, true);
+ breakPoss.setStackingSize(stackSize);
+ return breakPoss;
+ }
+ headerFooterBuilt = true;
+ }
+
// Make break positions
// Set up a LayoutContext
int ipd = context.getRefIPD();
lm.setColumns(columns);
- List breaks = new ArrayList();
+ List breaks = new java.util.ArrayList();
while (!lm.isFinished()) {
if ((bp = lm.getNextBreakPoss(childLC)) != null) {
stackSize.add(bp.getStackingSize());