/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright 2008 jOpenDocument, by ILM Informatique. All rights reserved.
*
* The contents of this file are subject to the terms of the GNU
* General Public License Version 3 only ("GPL").
* You may not use this file except in compliance with the License.
* You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html
* See the License for the specific language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each file.
*
*/
package org.jopendocument.renderer;
import java.awt.Color;
import java.awt.Graphics2D;
import org.jopendocument.model.style.StyleParagraphProperties;
import org.jopendocument.model.style.StyleStyle;
import org.jopendocument.model.style.StyleTableCellProperties;
import org.jopendocument.model.table.TableTableCell;
import org.jopendocument.model.text.TextP;
import org.jopendocument.util.ValueHelper;
public class ODTCellTextRenderer implements ODTCellRenderer {
public void draw(Graphics2D g, int x, int y, int cellWidth, int cellHeight, double resizeFactor, TableTableCell cell, StyleTableCellProperties cellProps) {
final TextP textp = cell.getTextP();
if (textp != null) {
if (textp.isEmpty()) {
return;
}
final StyleStyle cellStyle = cell.getStyle();
if (cellStyle == null) {
g.setColor(Color.RED);
g.drawRect(x, y, cellWidth, cellHeight);
return;
}
final ODTCellText text = new ODTCellText(g, textp, resizeFactor, cellStyle);
if (!text.isEmpty()) {
if (cellProps == null) {
cellProps = new StyleTableCellProperties();
}
if (cellProps.getVerticalAlign() == null) {
cellProps.setVerticalAlign("Standard");
}
if (cellProps.getPadding() == null) {
cellProps.setPadding("0.035cm");
}
if (cellStyle != null) {
int offsetX = 0;
int offsetY = 0;
int padding = 0;
String verticalAlign = cellProps.getVerticalAlign();
String padValue = cellProps.getPadding();
padding = 1 + (int) Math.round((ValueHelper.getLength(padValue) / resizeFactor));
if (verticalAlign.equals("middle")) {
offsetY = (cellHeight + text.getHeight()) / 2;
} else if (verticalAlign.equals("top")) {
offsetY = text.getHeight();
offsetY += padding;
} else {
offsetY = cellHeight;
offsetY -= padding;
}
boolean justify = false;
StyleParagraphProperties paragraphProps = cell.getStyle().getParagraphProperties();
if (paragraphProps != null) {
String textAlign = paragraphProps.getTextAlign();
if (textAlign != null) {
if (textAlign.equals("center")) {
int strWidth = text.getWidth();
offsetX = (cellWidth - strWidth) / 2;
} else if (textAlign.equals("end")) {
int strWidth = text.getWidth();
offsetX = cellWidth - strWidth - padding;
} else if (textAlign.equals("justify")) {
justify = true;
offsetX += padding;
} else {
// Left
offsetX += padding;
}
} else {
final String tableValueType = cell.getTableValueType();
if (tableValueType != null && tableValueType.equals("float")) {
int strWidth = text.getWidth();
offsetX = cellWidth - strWidth - padding;
} else {
// Left
offsetX += padding;
}
}
} else {
final String tableValueType = cell.getTableValueType();
if (tableValueType != null && tableValueType.equals("float")) {
int strWidth = text.getWidth();
offsetX = cellWidth - strWidth - padding;
} else {
// Left
offsetX += padding;
}
}
if (!justify) {
text.draw(x + offsetX, y + offsetY);
} else {
text.drawJustified(x, y, verticalAlign, padding, cellWidth);
}
}
}
}
}
}