comparison artifacts/src/main/java/org/dive4elements/river/jfree/XYStyle.java @ 5838:5aa05a7a34b7

Rename modules to more fitting names.
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 25 Apr 2013 15:23:37 +0200
parents flys-artifacts/src/main/java/org/dive4elements/river/jfree/XYStyle.java@bd047b71ab37
children 4897a58c8746
comparison
equal deleted inserted replaced
5837:d9901a08d0a6 5838:5aa05a7a34b7
1 package org.dive4elements.river.jfree;
2
3 import org.dive4elements.river.utils.ThemeUtil;
4
5 import java.awt.BasicStroke;
6 import java.awt.Color;
7 import java.awt.geom.Ellipse2D;
8
9 import org.apache.log4j.Logger;
10 import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
11 import org.w3c.dom.Document;
12
13
14 /**
15 * Utility to apply theme-settings to a renderer.
16 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
17 */
18 public class XYStyle implements Style {
19
20 private static Logger logger = Logger.getLogger(XYStyle.class);
21
22 protected Document theme;
23
24 protected XYLineAndShapeRenderer renderer;
25
26
27 public XYStyle(Document theme) {
28 this.theme = theme;
29 this.renderer = null;
30 }
31
32
33 /**
34 * Applies line color, size and type attributes to renderer, also
35 * whether to draw lines and/or points.
36 */
37 @Override
38 public XYLineAndShapeRenderer applyTheme(XYLineAndShapeRenderer r, int idx){
39 this.renderer = r;
40 applyLineColor(r, idx);
41 applyLineSize(r, idx);
42 applyLineType(r, idx);
43 applyShowLine(r, idx);
44 applyShowPoints(r, idx);
45 applyPointSize(r, idx);
46 applyPointColor(r, idx);
47 applyShowMinimum(r, idx);
48 applyShowMaximum(r, idx);
49
50 // Line label styles
51 applyShowLineLabel(r, idx);
52 applyShowLineLabelBG(r, idx);
53 applyLineLabelFont(r, idx);
54 applyLineLabelColor(r, idx);
55 applyLineLabelBGColor(r, idx);
56
57 // Point label styles
58 // TODO: Currently point label are annotations and are not drawn this way
59 /*
60 applyShowPointLabelBG(r, idx);
61 applyLinePointFont(r, idx);
62 applyLinePointColor(r, idx);
63 applyLinePointBGColor(r, idx);*/
64
65 return r;
66 }
67
68
69 /** Set line color to renderer. */
70 protected void applyLineColor(XYLineAndShapeRenderer r, int idx) {
71 Color c = ThemeUtil.parseLineColorField(theme);
72 if(c != null) {
73 logger.debug("applyLineColor " + c.toString());
74 r.setSeriesPaint(idx, c);
75 }
76 else {
77 logger.warn("applyLineColor: color is null - malformed linecolor field?");
78 }
79 }
80
81
82 /** Tells the renderer whether or not to add a label to a line. */
83 protected void applyShowLineLabel(XYLineAndShapeRenderer r, int idx) {
84 if (!(r instanceof EnhancedLineAndShapeRenderer)) {
85 return;
86 }
87 boolean showLabelLine = ThemeUtil.parseShowLineLabel(theme);
88 boolean anyLabel = showLabelLine || ThemeUtil.parseShowWidth(theme) ||
89 ThemeUtil.parseShowLevel(theme) ||
90 ThemeUtil.parseShowMiddleHeight(theme);
91 ((EnhancedLineAndShapeRenderer)r).setShowLineLabel(anyLabel, idx);
92 }
93
94
95 /** Tells the renderer whether or not to fill the bg of a lines label. */
96 protected void applyShowLineLabelBG(XYLineAndShapeRenderer r, int idx) {
97 if (!(r instanceof EnhancedLineAndShapeRenderer)) {
98 return;
99 }
100 boolean showLabelLine = ThemeUtil.parseLabelShowBackground(theme);
101 ((EnhancedLineAndShapeRenderer)r).setShowLineLabelBG(idx, showLabelLine);
102 }
103
104 /** Tell the renderer which font (and -size and -style) to use for
105 * linelabels. */
106 protected void applyLineLabelFont(XYLineAndShapeRenderer r, int idx) {
107 if (!(r instanceof EnhancedLineAndShapeRenderer)) {
108 return;
109 }
110 ((EnhancedLineAndShapeRenderer)r).setLineLabelFont(
111 ThemeUtil.parseTextFont(theme), idx);
112 }
113
114 /** Tell the renderer which color to use for
115 * linelabels. */
116 protected void applyLineLabelColor(XYLineAndShapeRenderer r, int idx) {
117 if (!(r instanceof EnhancedLineAndShapeRenderer)) {
118 return;
119 }
120 ((EnhancedLineAndShapeRenderer)r).setLineLabelTextColor(
121 idx, ThemeUtil.parseTextColor(theme));
122 }
123
124 /** Tell the renderer which color to use for bg of
125 * linelabels. */
126 protected void applyLineLabelBGColor(XYLineAndShapeRenderer r, int idx) {
127 if (!(r instanceof EnhancedLineAndShapeRenderer)) {
128 return;
129 }
130 ((EnhancedLineAndShapeRenderer)r).setLineLabelBGColor(idx,
131 ThemeUtil.parseTextBackground(theme));
132 }
133
134 /** Set stroke of series. */
135 protected void applyLineSize(XYLineAndShapeRenderer r, int idx) {
136 int size = ThemeUtil.parseLineWidth(theme);
137 r.setSeriesStroke(
138 idx,
139 new BasicStroke(size));
140 }
141
142
143 /** Set stroke strength of series. */
144 protected void applyLineType(XYLineAndShapeRenderer r, int idx) {
145 int size = ThemeUtil.parseLineWidth(theme);
146 float[] dashes = ThemeUtil.parseLineStyle(theme);
147
148 // Do not apply the dashed style.
149 if (dashes.length <= 1) {
150 return;
151 }
152
153 r.setSeriesStroke(
154 idx,
155 new BasicStroke(size,
156 BasicStroke.CAP_BUTT,
157 BasicStroke.JOIN_ROUND,
158 1.0f,
159 dashes,
160 0.0f));
161 }
162
163
164 protected void applyPointSize(XYLineAndShapeRenderer r, int idx) {
165 int size = ThemeUtil.parsePointWidth(theme);
166 int dim = 2 * size;
167
168 r.setSeriesShape(idx, new Ellipse2D.Double(-size, -size, dim, dim));
169 }
170
171
172 protected void applyPointColor(XYLineAndShapeRenderer r, int idx) {
173 Color c = ThemeUtil.parsePointColor(theme);
174
175 if (c != null) {
176 r.setSeriesFillPaint(idx, c);
177 r.setUseFillPaint(true);
178 r.setDrawOutlines(false);
179 }
180 }
181
182
183 /**
184 * Sets form and visibility of points.
185 */
186 protected void applyShowPoints(XYLineAndShapeRenderer r, int idx) {
187 boolean show = ThemeUtil.parseShowPoints(theme);
188
189 r.setSeriesShapesVisible(idx, show);
190 r.setDrawOutlines(true);
191 }
192
193
194 protected void applyShowLine(XYLineAndShapeRenderer r, int idx) {
195 boolean show = ThemeUtil.parseShowLine(theme);
196 r.setSeriesLinesVisible(idx, show);
197 }
198
199
200 protected void applyShowMinimum(XYLineAndShapeRenderer r, int idx) {
201 if (!(r instanceof EnhancedLineAndShapeRenderer)) {
202 return;
203 }
204
205 boolean visible = ThemeUtil.parseShowMinimum(theme);
206
207 EnhancedLineAndShapeRenderer er = (EnhancedLineAndShapeRenderer) r;
208 er.setIsMinimumShapeVisisble(idx, visible);
209 }
210
211
212 protected void applyShowMaximum(XYLineAndShapeRenderer r, int idx) {
213 if (!(r instanceof EnhancedLineAndShapeRenderer)) {
214 return;
215 }
216
217 boolean visible = ThemeUtil.parseShowMaximum(theme);
218
219 EnhancedLineAndShapeRenderer er = (EnhancedLineAndShapeRenderer) r;
220 er.setIsMaximumShapeVisible(idx, visible);
221 }
222
223
224 @Override
225 public XYLineAndShapeRenderer getRenderer() {
226 return this.renderer;
227 }
228 }
229 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org