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]

Reply via email to