jeremias 2005/01/28 08:59:28 Modified: src/java/org/apache/fop/layoutmgr/list ListItemLayoutManager.java ListBlockLayoutManager.java Log: Added border, padding and spacing for list-blocks and list-items. Revision Changes Path 1.18 +63 -11 xml-fop/src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java Index: ListItemLayoutManager.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- ListItemLayoutManager.java 28 Jan 2005 11:05:35 -0000 1.17 +++ ListItemLayoutManager.java 28 Jan 2005 16:59:28 -0000 1.18 @@ -29,9 +29,11 @@ import org.apache.fop.layoutmgr.PositionIterator; import org.apache.fop.layoutmgr.BreakPossPosIter; import org.apache.fop.layoutmgr.Position; +import org.apache.fop.layoutmgr.TraitSetter; import org.apache.fop.area.Area; import org.apache.fop.area.Block; import org.apache.fop.traits.MinOptMax; +import org.apache.fop.traits.SpaceVal; import java.util.Iterator; import java.util.ArrayList; @@ -47,11 +49,17 @@ private Item label; private Item body; + private int referenceIPD = 0; + private Block curBlockArea = null; - private List cellList = null; + //private List cellList = null; private int listItemHeight; + //TODO space-before|after: handle space-resolution rules + private MinOptMax spaceBefore; + private MinOptMax spaceAfter; + private class ItemPosition extends LeafPosition { protected List cellBreaks; protected ItemPosition(LayoutManager lm, int pos, List l) { @@ -62,7 +70,7 @@ /** * Create a new list item layout manager. - * + * @param node list-item to create the layout manager for */ public ListItemLayoutManager(ListItem node) { super(node); @@ -89,6 +97,20 @@ body.setParent(this); } + /** @see org.apache.fop.layoutmgr.AbstractLayoutManager#initProperties() */ + protected void initProperties() { + super.initProperties(); + spaceBefore = new SpaceVal(fobj.getCommonMarginBlock().spaceBefore).getSpace(); + spaceAfter = new SpaceVal(fobj.getCommonMarginBlock().spaceAfter).getSpace(); + } + + private int getIPIndents() { + int iIndents = 0; + iIndents += fobj.getCommonMarginBlock().startIndent.getValue(); + iIndents += fobj.getCommonMarginBlock().endIndent.getValue(); + return iIndents; + } + /** * Get the next break possibility. * @@ -99,6 +121,9 @@ // currently active LM Item curLM; + //int allocBPD = context. + referenceIPD = context.getRefIPD(); + BreakPoss lastPos = null; List breakList = new ArrayList(); @@ -121,14 +146,14 @@ // Set up a LayoutContext // the ipd is from the current column - int ipd = context.getRefIPD(); + //int ipd = context.getRefIPD(); BreakPoss bp; LayoutContext childLC = new LayoutContext(0); childLC.setStackLimit( MinOptMax.subtract(context.getStackLimit(), stackSize)); - childLC.setRefIPD(context.getRefIPD()); + childLC.setRefIPD(referenceIPD); stage++; while (!curLM.isFinished()) { @@ -178,12 +203,20 @@ } listItemHeight = opt; - MinOptMax itemSize = new MinOptMax(min, opt, max); - if (label.isFinished() && body.isFinished()) { setFinished(true); } + MinOptMax itemSize = new MinOptMax(min, opt, max); + + //Add spacing + if (spaceAfter != null) { + itemSize.add(spaceAfter); + } + if (spaceBefore != null) { + itemSize.add(spaceBefore); + } + ItemPosition rp = new ItemPosition(this, breakList.size() - 1, breakList); BreakPoss breakPoss = new BreakPoss(rp); if (over) { @@ -203,6 +236,12 @@ public void addAreas(PositionIterator parentIter, LayoutContext layoutContext) { getParentArea(null); + + // if adjusted space before + double adjust = layoutContext.getSpaceAdjust(); + addBlockSpacing(adjust, spaceBefore); + spaceBefore = null; + addID(fobj.getId()); Item childLM; @@ -226,6 +265,9 @@ flush(); + // if adjusted space after + addBlockSpacing(adjust, spaceAfter); + curBlockArea = null; } @@ -257,11 +299,21 @@ curBlockArea = new Block(); // Set up dimensions - Area parentArea = parentLM.getParentArea(curBlockArea); - int referenceIPD = parentArea.getIPD(); - curBlockArea.setIPD(referenceIPD); - // Get reference IPD from parentArea - setCurrentArea(curBlockArea); // ??? for generic operations + /*Area parentArea =*/ parentLM.getParentArea(curBlockArea); + + // set traits + TraitSetter.addBorders(curBlockArea, fobj.getCommonBorderPaddingBackground()); + TraitSetter.addBackground(curBlockArea, fobj.getCommonBorderPaddingBackground()); + TraitSetter.addMargins(curBlockArea, + fobj.getCommonBorderPaddingBackground(), + fobj.getCommonMarginBlock()); + TraitSetter.addBreaks(curBlockArea, + fobj.getBreakBefore(), fobj.getBreakAfter()); + + int contentIPD = referenceIPD - getIPIndents(); + curBlockArea.setIPD(contentIPD); + + setCurrentArea(curBlockArea); } return curBlockArea; } 1.10 +66 -18 xml-fop/src/java/org/apache/fop/layoutmgr/list/ListBlockLayoutManager.java Index: ListBlockLayoutManager.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/list/ListBlockLayoutManager.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- ListBlockLayoutManager.java 20 Oct 2004 13:19:25 -0000 1.9 +++ ListBlockLayoutManager.java 28 Jan 2005 16:59:28 -0000 1.10 @@ -31,6 +31,7 @@ import org.apache.fop.area.Area; import org.apache.fop.area.Block; import org.apache.fop.traits.MinOptMax; +import org.apache.fop.traits.SpaceVal; import java.util.ArrayList; import java.util.List; @@ -45,25 +46,46 @@ private Block curBlockArea; + private int referenceIPD = 0; + private List bodyBreaks = new ArrayList(); + //TODO space-before|after: handle space-resolution rules + private MinOptMax spaceBefore; + private MinOptMax spaceAfter; + + /* private class SectionPosition extends LeafPosition { protected List list; protected SectionPosition(LayoutManager lm, int pos, List l) { super(lm, pos); list = l; } - } + }*/ /** * Create a new table layout manager. - * + * @param node list-block to create the layout manager for */ public ListBlockLayoutManager(ListBlock node) { super(node); fobj = node; } + /** @see org.apache.fop.layoutmgr.AbstractLayoutManager#initProperties() */ + protected void initProperties() { + super.initProperties(); + spaceBefore = new SpaceVal(fobj.getCommonMarginBlock().spaceBefore).getSpace(); + spaceAfter = new SpaceVal(fobj.getCommonMarginBlock().spaceAfter).getSpace(); + } + + private int getIPIndents() { + int iIndents = 0; + iIndents += fobj.getCommonMarginBlock().startIndent.getValue(); + iIndents += fobj.getCommonMarginBlock().endIndent.getValue(); + return iIndents; + } + /** * Get the next break possibility. * The break possibility depends on the height of the header and footer @@ -76,22 +98,31 @@ // currently active LM LayoutManager curLM; + referenceIPD = context.getRefIPD(); + MinOptMax stackSize = new MinOptMax(); - // if starting add space before - // stackSize.add(spaceBefore); + + //Add spacing + if (spaceAfter != null) { + stackSize.add(spaceAfter); + } + if (spaceBefore != null) { + stackSize.add(spaceBefore); + } + BreakPoss lastPos = null; while ((curLM = (LayoutManager)getChildLM()) != null) { // Make break positions // Set up a LayoutContext - int ipd = context.getRefIPD(); + //int ipd = context.getRefIPD(); BreakPoss bp; LayoutContext childLC = new LayoutContext(0); childLC.setStackLimit( MinOptMax.subtract(context.getStackLimit(), stackSize)); - childLC.setRefIPD(ipd); + childLC.setRefIPD(referenceIPD); boolean over = false; while (!curLM.isFinished()) { @@ -145,11 +176,17 @@ public void addAreas(PositionIterator parentIter, LayoutContext layoutContext) { getParentArea(null); + + // if adjusted space before + double adjust = layoutContext.getSpaceAdjust(); + addBlockSpacing(adjust, spaceBefore); + spaceBefore = null; + addID(fobj.getId()); // the list block contains areas stacked from each list item - int listHeight = 0; + //int listHeight = 0; LayoutManager childLM; int iStartPos = 0; @@ -157,20 +194,20 @@ while (parentIter.hasNext()) { LeafPosition lfp = (LeafPosition) parentIter.next(); // Add the block areas to Area - PositionIterator breakPosIter = - new BreakPossPosIter(bodyBreaks, iStartPos, - lfp.getLeafPos() + 1); + PositionIterator breakPosIter = new BreakPossPosIter( + bodyBreaks, iStartPos, lfp.getLeafPos() + 1); iStartPos = lfp.getLeafPos() + 1; while ((childLM = (LayoutManager)breakPosIter.getNextChildLM()) != null) { childLM.addAreas(breakPosIter, lc); } } - TraitSetter.addBorders(curBlockArea, fobj.getCommonBorderPaddingBackground()); - TraitSetter.addBackground(curBlockArea, fobj.getCommonBorderPaddingBackground()); flush(); + // if adjusted space after + addBlockSpacing(adjust, spaceAfter); + bodyBreaks.clear(); curBlockArea = null; } @@ -191,13 +228,24 @@ public Area getParentArea(Area childArea) { if (curBlockArea == null) { curBlockArea = new Block(); + // Set up dimensions // Must get dimensions from parent area - Area parentArea = parentLM.getParentArea(curBlockArea); - int referenceIPD = parentArea.getIPD(); - curBlockArea.setIPD(referenceIPD); - // Get reference IPD from parentArea - setCurrentArea(curBlockArea); // ??? for generic operations + /*Area parentArea =*/ parentLM.getParentArea(curBlockArea); + + // set traits + TraitSetter.addBorders(curBlockArea, fobj.getCommonBorderPaddingBackground()); + TraitSetter.addBackground(curBlockArea, fobj.getCommonBorderPaddingBackground()); + TraitSetter.addMargins(curBlockArea, + fobj.getCommonBorderPaddingBackground(), + fobj.getCommonMarginBlock()); + TraitSetter.addBreaks(curBlockArea, + fobj.getBreakBefore(), fobj.getBreakAfter()); + + int contentIPD = referenceIPD - getIPIndents(); + curBlockArea.setIPD(contentIPD); + + setCurrentArea(curBlockArea); } return curBlockArea; } @@ -223,7 +271,7 @@ bodyBreaks.clear(); reset(null); } else { - + //TODO Something to put here? } } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]