123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- /*
- * 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;
-
- /**
- * 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 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;
- }
-
- /**
- * 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 spans = getMainReference().getSpans();
- int previousSpanCount = spans.size() - 1;
- for (int i = 0; i < previousSpanCount; i++) {
- usedBPD += ((Span)spans.get(i)).getHeight();
- }
- return getBPD() - usedBPD;
- }
-
- /**
- * Clone this object.
- *
- * @return a shallow copy of this object
- */
- public Object clone() {
- BodyRegion br = new BodyRegion(getRegionClass(), getRegionName(), regionViewport,
- getColumnCount(), getColumnGap());
- br.setCTM(getCTM());
- br.setIPD(getIPD());
- br.beforeFloat = beforeFloat;
- br.mainReference = mainReference;
- br.footnote = footnote;
- return br;
- }
- }
|