001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017:
018: /* $Id: KnuthBlockBox.java 426576 2006-07-28 15:44:37Z jeremias $ */
019:
020: package org.apache.fop.layoutmgr;
021:
022: import org.apache.fop.traits.MinOptMax;
023:
024: import java.util.LinkedList;
025:
026: /**
027: * Knuth box used to represent a line in block-progression-dimension (i.e. the width is its height).
028: */
029: public class KnuthBlockBox extends KnuthBox {
030:
031: private MinOptMax ipdRange;
032: /**
033: * Natural width of the line represented by this box. In addition to ipdRange because
034: * it isn't possible to get the opt value stored in a MinOptMax object.
035: */
036: private int bpd;
037: private LinkedList footnoteList;
038: /** List of Knuth elements. This is a list of LinkedList elements. */
039: private LinkedList elementLists = null;
040:
041: /**
042: * Creates a new box.
043: * @param w block progression dimension of this box
044: * @param range min, opt, max inline progression dimension of this box
045: * @param bpdim natural width of the line represented by this box.
046: * @param pos the Position stored in this box
047: * @param bAux is this box auxiliary?
048: */
049: public KnuthBlockBox(int w, MinOptMax range, int bpdim,
050: Position pos, boolean bAux) {
051: super (w, pos, bAux);
052: ipdRange = (MinOptMax) range.clone();
053: bpd = bpdim;
054: footnoteList = new LinkedList();
055: }
056:
057: /**
058: * Creates a new box.
059: * @param w block progression dimension of this box
060: * @param list footnotes cited by elements in this box. The list contains the
061: * corresponding FootnoteBodyLayoutManagers
062: * @param pos the Position stored in this box
063: * @param bAux is this box auxiliary?
064: */
065: public KnuthBlockBox(int w, LinkedList list, Position pos,
066: boolean bAux) {
067: super (w, pos, bAux);
068: ipdRange = new MinOptMax(0);
069: bpd = 0;
070: footnoteList = new LinkedList(list);
071: }
072:
073: /**
074: * @return the LMs for the footnotes cited in this box.
075: */
076: public LinkedList getFootnoteBodyLMs() {
077: return footnoteList;
078: }
079:
080: /**
081: * @return true if this box contains footnote citations.
082: */
083: public boolean hasAnchors() {
084: return (footnoteList.size() > 0);
085: }
086:
087: /**
088: * Adds the given list of Knuth elements to this box' list of elements.
089: * @param list elements corresponding to a footnote body
090: */
091: public void addElementList(LinkedList list) {
092: if (elementLists == null) {
093: elementLists = new LinkedList();
094: }
095: elementLists.add(list);
096: }
097:
098: /**
099: * Returns the list of Knuth sequences registered by this box.
100: * @return a list of KnuthElement sequences corresponding to footnotes cited in this
101: * box
102: */
103: public LinkedList getElementLists() {
104: return elementLists;
105: }
106:
107: /**
108: * @return the inline progression dimension of this box.
109: */
110: public MinOptMax getIPDRange() {
111: return (MinOptMax) ipdRange.clone();
112: }
113:
114: /**
115: * Returns the natural width (without stretching nor shrinking) of the line
116: * represented by this box.
117: * @return the line width
118: */
119: public int getBPD() {
120: return bpd;
121: }
122: }
|