/* * 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.layoutmgr.table; import org.apache.fop.fo.flow.table.PrimaryGridUnit; /** * Represents a non-divisible part of a grid unit. Used by the table stepper. */ class CellPart { /** Primary grid unit */ protected PrimaryGridUnit pgu; /** Index of the starting element of this part */ protected int start; /** Index of the ending element of this part */ protected int end; private int condBeforeContentLength; private int length; private int condAfterContentLength; private int bpBeforeNormal; private int bpBeforeFirst; private int bpAfterNormal; private int bpAfterLast; private boolean isLast; /** * Creates a new CellPart. * * @param pgu Primary grid unit * @param start starting element * @param end ending element * @param last true if this cell part is the last one for the cell * @param condBeforeContentLength length of the additional content that will have to * be displayed if this part will be the first one on the page * @param length length of the content represented by this cell part * @param condAfterContentLength length of the additional content that will have to be * displayed if this part will be the last one on the page * @param bpBeforeNormal width of border- and padding-before in the normal case * @param bpBeforeFirst width of (possibly optional) border- and padding-before if * this part will be the first one on the page * @param bpAfterNormal width of border- and padding-after in the normal case * @param bpAfterLast width of (possibly optional) border- and padding-after if this * part will be the last one on the page */ protected CellPart(PrimaryGridUnit pgu, int start, int end, boolean last, int condBeforeContentLength, int length, int condAfterContentLength, int bpBeforeNormal, int bpBeforeFirst, int bpAfterNormal, int bpAfterLast) { this.pgu = pgu; this.start = start; this.end = end; this.isLast = last; this.condBeforeContentLength = condBeforeContentLength; this.length = length; this.condAfterContentLength = condAfterContentLength; this.bpBeforeNormal = bpBeforeNormal; this.bpBeforeFirst = bpBeforeFirst; this.bpAfterNormal = bpAfterNormal; this.bpAfterLast = bpAfterLast; } /** @return true if this part is the first part of a cell */ public boolean isFirstPart() { return (start == 0); } /** @return true if this part is the last part of a cell */ boolean isLastPart() { return isLast; } int getBorderPaddingBefore(boolean firstOnPage) { if (firstOnPage) { return bpBeforeFirst; } else { return bpBeforeNormal; } } int getBorderPaddingAfter(boolean lastOnPage) { if (lastOnPage) { return bpAfterLast; } else { return bpAfterNormal; } } int getConditionalBeforeContentLength() { return condBeforeContentLength; } int getLength() { return length; } int getConditionalAfterContentLength() { return condAfterContentLength; } /** {@inheritDoc} */ public String toString() { StringBuffer sb = new StringBuffer("Part: "); sb.append(start).append("-").append(end); sb.append(" [").append(isFirstPart() ? "F" : "-").append(isLastPart() ? "L" : "-"); sb.append("] ").append(pgu); return sb.toString(); } }