jeremias 2005/02/10 11:40:47 Modified: src/java/org/apache/fop/layoutmgr/table TableLayoutManager.java src/java/org/apache/fop/layoutmgr LayoutManagerMapping.java Log: Table headers/footers need to be recalculated for each page (for dynamic elements like page-numbers and changing page-masters together with auto layout). Therefore a new LM is created for each page. Revision Changes Path 1.17 +34 -50 xml-fop/src/java/org/apache/fop/layoutmgr/table/TableLayoutManager.java Index: TableLayoutManager.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/table/TableLayoutManager.java,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- TableLayoutManager.java 9 Feb 2005 15:38:15 -0000 1.16 +++ TableLayoutManager.java 10 Feb 2005 19:40:46 -0000 1.17 @@ -21,8 +21,6 @@ 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; @@ -38,7 +36,6 @@ import org.apache.fop.traits.MinOptMax; import org.apache.fop.traits.SpaceVal; -import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -54,12 +51,10 @@ 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; @@ -102,26 +97,6 @@ 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(); @@ -202,31 +177,40 @@ (contentIPD - sumCols) / factors); } } - MinOptMax headerSize = null; - if (tableHeader != null) { - tableHeader.resetPosition(null); - headerBreak = getHeight(tableHeader, context); - headerSize = headerBreak.getStackingSize(); - stackSize.add(headerSize); - } - - MinOptMax footerSize = null; - if (tableFooter != null) { - tableFooter.resetPosition(null); - footerBreak = getHeight(tableFooter, context); - footerSize = footerBreak.getStackingSize(); - stackSize.add(footerSize); - } - - 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; - } + + boolean headerFooterBuilt = false; 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); + } + + 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); + } + + 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(); @@ -314,7 +298,7 @@ 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()); 1.6 +1 -7 xml-fop/src/java/org/apache/fop/layoutmgr/LayoutManagerMapping.java Index: LayoutManagerMapping.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/LayoutManagerMapping.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- LayoutManagerMapping.java 4 Feb 2005 10:33:39 -0000 1.5 +++ LayoutManagerMapping.java 10 Feb 2005 19:40:47 -0000 1.6 @@ -354,12 +354,6 @@ if (columnLMs != null) { tlm.setColumns(columnLMs); } - if (table.getTableHeader() != null) { - tlm.setTableHeader(new Body(table.getTableHeader())); - } - if (table.getTableFooter() != null) { - tlm.setTableFooter(new Body(table.getTableFooter())); - } lms.add(tlm); } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]