blob: 7dd2bc201dc894dd8fb68a61ce24b651285aba0e [file] [log] [blame]
/*
* 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();
}
}