ingo@2321: package de.intevation.flys.jfree; ingo@2321: ingo@2321: import java.awt.BasicStroke; ingo@2321: import java.awt.Color; ingo@2321: import java.awt.geom.Ellipse2D; ingo@2321: ingo@2321: ingo@2321: import org.w3c.dom.Document; ingo@2321: ingo@2321: import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; ingo@2321: ingo@2321: import de.intevation.flys.utils.ThemeUtil; ingo@2321: ingo@2321: ingo@2321: /** felix@2648: * Utility to apply theme-settings to a renderer. ingo@2321: * @author Ingo Weinzierl ingo@2321: */ ingo@2321: public class XYStyle implements Style { ingo@2321: ingo@2321: protected Document theme; ingo@2321: ingo@2321: ingo@2321: public XYStyle(Document theme) { ingo@2321: this.theme = theme; ingo@2321: } ingo@2321: ingo@2321: ingo@2321: /** ingo@2321: * Applies line color, size and type attributes to renderer, also ingo@2321: * whether to draw lines and/or points. ingo@2321: */ ingo@2321: public XYLineAndShapeRenderer applyTheme(XYLineAndShapeRenderer r, int idx){ ingo@2321: applyLineColor(r, idx); ingo@2321: applyLineSize(r, idx); ingo@2321: applyLineType(r, idx); ingo@2321: applyShowLine(r, idx); ingo@2321: applyShowPoints(r, idx); ingo@2321: applyPointSize(r, idx); ingo@2321: applyShowMinimum(r, idx); ingo@2321: applyShowMaximum(r, idx); felix@2648: applyShowLineLabel(r, idx); felix@2656: applyLineLabelFont(r, idx); ingo@2321: ingo@2321: return r; ingo@2321: } ingo@2321: ingo@2321: ingo@2321: /** Set line color to renderer. */ ingo@2321: protected void applyLineColor(XYLineAndShapeRenderer r, int idx) { ingo@2321: Color c = ThemeUtil.parseLineColorField(theme); ingo@2321: r.setSeriesPaint(idx, c); ingo@2321: } ingo@2321: ingo@2321: felix@2648: /** Tells the renderer whether or not to add a label to a line. */ felix@2648: protected void applyShowLineLabel(XYLineAndShapeRenderer r, int idx) { felix@2648: if (!(r instanceof EnhancedLineAndShapeRenderer)) { felix@2648: return; felix@2648: } felix@2648: boolean showLabelLine = ThemeUtil.parseShowLineLabel(theme); felix@2648: ((EnhancedLineAndShapeRenderer)r).setShowLineLabel(showLabelLine, idx); felix@2648: } felix@2648: felix@2656: felix@2656: /** Tell the renderer which font (and -size and -style) to use for felix@2656: * linelabels. */ felix@2656: protected void applyLineLabelFont(XYLineAndShapeRenderer r, int idx) { felix@2656: if (!(r instanceof EnhancedLineAndShapeRenderer)) { felix@2656: return; felix@2656: } felix@2656: ((EnhancedLineAndShapeRenderer)r).setLineLabelFont(ThemeUtil.parseLineLabelFont(theme), idx); felix@2656: } felix@2656: felix@2656: felix@2656: /** Set stroke of series. */ ingo@2321: protected void applyLineSize(XYLineAndShapeRenderer r, int idx) { ingo@2321: int size = ThemeUtil.parseLineWidth(theme); ingo@2321: r.setSeriesStroke( ingo@2321: idx, ingo@2321: new BasicStroke(Integer.valueOf(size))); ingo@2321: } ingo@2321: ingo@2321: felix@2656: /** Set stroke strength of series. */ ingo@2321: protected void applyLineType(XYLineAndShapeRenderer r, int idx) { ingo@2321: int size = ThemeUtil.parseLineWidth(theme); ingo@2321: float[] dashes = ThemeUtil.parseLineStyle(theme); ingo@2321: ingo@2321: // Do not apply the dashed style. ingo@2321: if (dashes.length <= 1) { ingo@2321: return; ingo@2321: } ingo@2321: ingo@2321: r.setSeriesStroke( ingo@2321: idx, ingo@2321: new BasicStroke(Integer.valueOf(size), ingo@2321: BasicStroke.CAP_BUTT, ingo@2321: BasicStroke.JOIN_ROUND, ingo@2321: 1.0f, ingo@2321: dashes, ingo@2321: 0.0f)); ingo@2321: } ingo@2321: ingo@2321: ingo@2321: protected void applyPointSize(XYLineAndShapeRenderer r, int idx) { ingo@2321: int size = ThemeUtil.parsePointWidth(theme); ingo@2321: int dim = 2 * size; ingo@2321: ingo@2321: r.setSeriesShape(idx, new Ellipse2D.Double(-size, -size, dim, dim)); ingo@2321: } ingo@2321: ingo@2321: ingo@2321: /** ingo@2321: * Sets form and visibility of points. ingo@2321: */ ingo@2321: protected void applyShowPoints(XYLineAndShapeRenderer r, int idx) { ingo@2321: boolean show = ThemeUtil.parseShowPoints(theme); ingo@2321: ingo@2321: r.setSeriesShapesVisible(idx, show); ingo@2321: r.setDrawOutlines(true); ingo@2321: } ingo@2321: ingo@2321: ingo@2321: protected void applyShowLine(XYLineAndShapeRenderer r, int idx) { ingo@2321: boolean show = ThemeUtil.parseShowLine(theme); ingo@2321: r.setSeriesLinesVisible(idx, show); ingo@2321: } ingo@2321: ingo@2321: ingo@2321: protected void applyShowMinimum(XYLineAndShapeRenderer r, int idx) { ingo@2321: if (!(r instanceof EnhancedLineAndShapeRenderer)) { ingo@2321: return; ingo@2321: } ingo@2321: ingo@2321: boolean visible = ThemeUtil.parseShowMinimum(theme); ingo@2321: ingo@2321: EnhancedLineAndShapeRenderer er = (EnhancedLineAndShapeRenderer) r; ingo@2321: er.setIsMinimumShapeVisisble(idx, visible); ingo@2321: } ingo@2321: ingo@2321: ingo@2321: protected void applyShowMaximum(XYLineAndShapeRenderer r, int idx) { ingo@2321: if (!(r instanceof EnhancedLineAndShapeRenderer)) { ingo@2321: return; ingo@2321: } ingo@2321: ingo@2321: boolean visible = ThemeUtil.parseShowMaximum(theme); ingo@2321: ingo@2321: EnhancedLineAndShapeRenderer er = (EnhancedLineAndShapeRenderer) r; ingo@2321: er.setIsMaximumShapeVisible(idx, visible); ingo@2321: } ingo@2321: } ingo@2321: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :