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]