package org.activityinfo.server.report.renderer.itext;
/*
* #%L
* ActivityInfo Server
* %%
* Copyright (C) 2009 - 2013 UNICEF
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
import com.google.code.appengine.awt.Color;
import com.lowagie.text.BadElementException;
import com.lowagie.text.Cell;
import com.lowagie.text.Font;
import com.lowagie.text.Paragraph;
/**
* Centralizes all style-specific code. At the present, there is a single theme
* hardcoded here based on the Office 2007 color and font scheme, but this could
* be refactored in the future to allow
*
* @author Alex Bertram
*/
public final class ThemeHelper {
private static final float LEFT_INDENT = 5.4f;
private static final int TITLE_FONT_SIZE = 26;
private static final int HEADER2_FONT_SIZE = 13;
private static final int HEADER3_FONT_SIZE = 12;
private static final int BODY_FONT_SIZE = 10;
private static final float THIN_BORDER_WIDTH = 0.5f;
private static final Color BLUE = new Color(23, 54, 93);
private static final Color BLUE2 = new Color(79, 129, 189);
private static final Color BLUE3 = new Color(55, 96, 145);
private static final Color BLUE4 = new Color(149, 179, 215);
private static final Color BLUE5 = new Color(219, 229, 241);
private ThemeHelper() {
}
public static Paragraph reportTitle(String title) {
Paragraph para = new Paragraph(title);
para.setFont(new Font(Font.TIMES_ROMAN, TITLE_FONT_SIZE, Font.NORMAL, BLUE));
para.setSpacingAfter(15);
return para;
}
public static Paragraph filterDescription(String text) {
Paragraph para = new Paragraph(text);
para.setFont(new Font(Font.HELVETICA, HEADER3_FONT_SIZE, Font.NORMAL, Color.BLACK));
return para;
}
public static Paragraph legendText(String text) {
Paragraph para = new Paragraph();
para.setFont(bodyFont());
return para;
}
public static Paragraph elementTitle(String title) {
Paragraph para = new Paragraph(title);
para.setFont(new Font(Font.TIMES_ROMAN, HEADER2_FONT_SIZE, Font.BOLD, BLUE2));
para.setSpacingBefore(BODY_FONT_SIZE);
return para;
}
public static Paragraph legendTitle(String title) {
Paragraph para = new Paragraph(title);
para.setFont(new Font(Font.TIMES_ROMAN, BODY_FONT_SIZE, Font.BOLD, BLUE2));
para.setSpacingBefore(BODY_FONT_SIZE);
return para;
}
public static Font footerFont() {
return new Font(Font.TIMES_ROMAN, BODY_FONT_SIZE, Font.BOLD, Color.BLACK);
}
public static Cell columnHeaderCell(String label, boolean leaf) throws BadElementException {
return columnHeaderCell(label, leaf, leaf ? Cell.ALIGN_RIGHT : Cell.ALIGN_CENTER);
}
public static Cell columnHeaderCell(String label, boolean leaf, int hAlign) throws BadElementException {
Paragraph para = new Paragraph(label);
para.setFont(new Font(Font.HELVETICA, BODY_FONT_SIZE, Font.NORMAL, Color.WHITE));
Cell cell = new Cell();
cell.addElement(para);
cell.setHorizontalAlignment(hAlign);
cell.setHeader(true);
cell.setVerticalAlignment(Cell.ALIGN_BOTTOM);
cell.setBackgroundColor(BLUE3);
cell.setBorderWidth(0);
return cell;
}
public static Cell cornerCell() {
Cell cell = new Cell();
cell.setHeader(true);
cell.setBorderWidth(0);
cell.setBackgroundColor(BLUE3);
return cell;
}
public static Cell bodyCell(String label, boolean header, int depth, boolean leaf) throws BadElementException {
return bodyCell(label, header, depth, leaf, header ? Cell.ALIGN_LEFT : Cell.ALIGN_RIGHT);
}
/**
* Renders a Cell for
*
* @param label
* @param header
* @param depth
* @param leaf
* @param horizantalAlignment
* @return
* @throws BadElementException
*/
public static Cell bodyCell(String label,
boolean header,
int depth,
boolean leaf,
int horizantalAlignment) throws BadElementException {
Cell cell = new Cell();
cell.setHorizontalAlignment(horizantalAlignment);
if (label != null) {
Paragraph para = new Paragraph(label);
Font font = bodyFont();
if (depth == 0 && !leaf) {
font.setColor(Color.WHITE);
}
para.setFont(font);
para.setIndentationLeft(LEFT_INDENT + (header ? HEADER3_FONT_SIZE * depth : 0));
cell.addElement(para);
}
cell.setBorderWidthLeft(0f);
cell.setBorderWidthRight(0);
cell.setBorderWidthTop(0);
if (!leaf && depth == 0) {
cell.setBackgroundColor(BLUE4); // #95B3D7
cell.setBorderWidthBottom(THIN_BORDER_WIDTH);
cell.setBorderColorBottom(BLUE5); // #DBE5F1
} else if (!leaf && depth == 1) {
cell.setBackgroundColor(BLUE5);
cell.setBorderWidthBottom(THIN_BORDER_WIDTH);
cell.setBorderColorBottom(BLUE2);
} else {
cell.setBorderWidthBottom(THIN_BORDER_WIDTH);
cell.setBorderColorBottom(BLUE5);
cell.setBorderWidthTop(THIN_BORDER_WIDTH);
cell.setBorderColorTop(BLUE5);
}
return cell;
}
private static Font bodyFont() {
return new Font(Font.HELVETICA, BODY_FONT_SIZE, Font.NORMAL, Color.BLACK);
}
}