123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- /* $Id$ */
-
- package org.apache.fop.area;
-
- import java.util.List;
-
- import org.apache.fop.fo.pagination.RegionBody;
- import org.apache.fop.traits.WritingModeTraitsGetter;
-
- /**
- * This class is a container for the areas that may be generated by
- * an fo:region-body. It extends the RegionReference that is used
- * directly by the other region classes.
- * See fo:region-body definition in the XSL Rec for more information.
- */
- public class BodyRegion extends RegionReference {
-
- private static final long serialVersionUID = -1848872997724078080L;
-
- private BeforeFloat beforeFloat; // optional
- private MainReference mainReference; // mandatory
- private Footnote footnote; // optional
- private int columnGap;
- private int columnCount;
-
- /**
- * Constructor which can read traits directly
- * from an fo:region-body formatting object.
- * @param rb the region-body FO node
- * @param parent the parent region viewport
- */
- public BodyRegion(RegionBody rb, RegionViewport parent) {
- this(rb.getNameId(), rb.getRegionName(), parent, rb.getColumnCount(), rb.getColumnGap());
- }
-
- /**
- * Constructor which can read traits directly
- * from an fo:region-body formatting object.
- * @param regionClass the region class (as returned by Region.getNameId())
- * @param regionName the name of the region (as returned by Region.getRegionName())
- * @param parent the parent region viewport
- * @param columnCount the number of columns
- * @param columnGap the gap between columns
- */
- public BodyRegion(int regionClass, String regionName, RegionViewport parent,
- int columnCount, int columnGap) {
- super(regionClass, regionName, parent);
- this.columnCount = columnCount;
- this.columnGap = columnGap;
- mainReference = new MainReference(this);
- }
-
- /**
- * Get the number of columns when not spanning
- *
- * @return the number of columns
- */
- public int getColumnCount() {
- return this.columnCount;
- }
-
- /** @return the column-gap value */
- public int getColumnGap() {
- return this.columnGap;
- }
-
- int getContentIPD() {
- RegionViewport rv = getRegionViewport();
- return getIPD() - rv.getBorderAndPaddingWidthStart() - rv.getBorderAndPaddingWidthEnd();
- }
-
- public int getColumnIPD() {
- return (getContentIPD() - (columnCount - 1) * columnGap) / columnCount;
- }
-
- /**
- * Get the main reference area.
- *
- * @return the main reference area
- */
- public MainReference getMainReference() {
- return mainReference;
- }
-
- /**
- * indicates whether the main reference area has any child areas added to it
- *
- * @return whether the main reference area has any child areas added to it
- */
- public boolean isEmpty() {
- return (mainReference == null || mainReference.isEmpty())
- && (footnote == null || footnote.isEmpty())
- && (beforeFloat == null || beforeFloat.isEmpty());
- }
-
-
- /**
- * Get the before float area.
- *
- * @return the before float area
- */
- public BeforeFloat getBeforeFloat() {
- if (beforeFloat == null) {
- beforeFloat = new BeforeFloat();
- }
- return beforeFloat;
- }
-
- /**
- * Get the footnote area.
- *
- * @return the footnote area
- */
- public Footnote getFootnote() {
- if (footnote == null) {
- footnote = new Footnote();
- }
- return footnote;
- }
-
- /**
- * @return the available BPD in the main reference area after the previous span reference
- * areas are subtracted.
- */
- public int getRemainingBPD() {
- int usedBPD = 0;
- List<Span> spans = getMainReference().getSpans();
- int previousSpanCount = spans.size() - 1;
- for (int i = 0; i < previousSpanCount; i++) {
- usedBPD += spans.get(i).getHeight();
- }
- return getBPD() - usedBPD;
- }
-
- /**
- * Sets the writing mode traits for the main reference area of
- * this body region area.
- * @param wmtg a WM traits getter
- */
- public void setWritingModeTraits(WritingModeTraitsGetter wmtg) {
- if (getMainReference() != null) {
- getMainReference().setWritingModeTraits(wmtg);
- }
- }
-
- /** {@inheritDoc} */
- public Object clone() throws CloneNotSupportedException {
- BodyRegion br = (BodyRegion) super.clone();
- br.mainReference = new MainReference(br);
- br.mainReference.setSpans(mainReference.getSpans());
- return br;
- }
-
- }
|