comparison flys-artifacts/src/main/java/org/dive4elements/river/jfree/StyledAreaSeriesCollection.java @ 5831:bd047b71ab37

Repaired internal references
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 25 Apr 2013 12:06:39 +0200
parents flys-artifacts/src/main/java/de/intevation/flys/jfree/StyledAreaSeriesCollection.java@85876e3a5346
children
comparison
equal deleted inserted replaced
5830:160f53ee0870 5831:bd047b71ab37
1 package org.dive4elements.river.jfree;
2
3 import java.awt.BasicStroke;
4 import java.awt.Color;
5 import java.awt.Stroke;
6
7 import org.jfree.data.xy.XYSeriesCollection;
8 import org.w3c.dom.Document;
9
10 import org.dive4elements.river.themes.ThemeAccess;
11 import org.dive4elements.river.utils.ThemeUtil;
12
13
14 /**
15 * One or more dataseries to draw a polygon (either "open up/downwards", or
16 * the area between two curves), a theme-document and further display options.
17 * The theme-document will later "style" the graphical representation.
18 * The display options can be used to control the z-order and the axis of the
19 * dataset.
20 */
21 public class StyledAreaSeriesCollection extends XYSeriesCollection {
22 private static final long serialVersionUID = 5274940965666948237L;
23
24 /** Mode, how to draw/which areas to fill. */
25 public enum FILL_MODE {UNDER, ABOVE, BETWEEN};
26
27 /** MODE in use. */
28 protected FILL_MODE mode;
29
30 /** The theme-document with attributes about actual visual representation. */
31 protected Document theme;
32
33
34 /**
35 * @param theme the theme-document.
36 */
37 public StyledAreaSeriesCollection(Document theme) {
38 this.theme = theme;
39 this.mode = FILL_MODE.BETWEEN;
40 }
41
42
43 /** Gets the Fill mode. */
44 public FILL_MODE getMode() {
45 return this.mode;
46 }
47
48
49 /** Sets the Fill mode. */
50 public void setMode(FILL_MODE fMode) {
51 this.mode = fMode;
52 }
53
54
55 /**
56 * Applies line color, size and type attributes to renderer, also
57 * whether to draw lines and/or points.
58 * @param renderer Renderer to apply theme to.
59 * @return \param renderer
60 */
61 public StableXYDifferenceRenderer applyTheme(
62 StableXYDifferenceRenderer renderer
63 ) {
64 applyFillColor(renderer);
65 applyShowShape(renderer);
66 applyOutlineColor(renderer);
67 applyOutlineStyle(renderer);
68 applyShowArea(renderer);
69 if (mode == FILL_MODE.UNDER) {
70 renderer.setAreaCalculationMode(StableXYDifferenceRenderer.CALCULATE_NEGATIVE_AREA);
71 }
72 else if (mode == FILL_MODE.ABOVE) {
73 renderer.setAreaCalculationMode(StableXYDifferenceRenderer.CALCULATE_POSITIVE_AREA);
74 }
75 else {
76 renderer.setAreaCalculationMode(StableXYDifferenceRenderer.CALCULATE_ALL_AREA);
77 }
78
79 // Apply text style.
80 new ThemeAccess(theme).parseTextStyle().apply(renderer);
81 return renderer;
82 }
83
84
85 protected void applyFillColor(StableXYDifferenceRenderer renderer) {
86 Color paint = ThemeUtil.parseColor(
87 ThemeUtil.getAreaBackgroundColorString(theme));
88
89 int transparency = ThemeUtil.parseAreaTransparency(theme);
90 if (transparency > 0 && paint != null) {
91 paint = new Color(
92 paint.getRed(),
93 paint.getGreen(),
94 paint.getBlue(),
95 (int)((100 - transparency) * 2.55f));
96 }
97
98 if (paint != null && this.getMode() == FILL_MODE.ABOVE) {
99 renderer.setPositivePaint(paint);
100 renderer.setNegativePaint(new Color(0,0,0,0));
101 }
102 else if (paint != null && this.getMode() == FILL_MODE.UNDER) {
103 renderer.setNegativePaint(paint);
104 renderer.setPositivePaint(new Color(0,0,0,0));
105 }
106 else {
107 if (paint == null)
108 paint = new Color(177, 117, 102);
109 renderer.setPositivePaint(paint);
110 renderer.setNegativePaint(paint);
111 }
112 }
113
114
115 protected void applyShowShape(StableXYDifferenceRenderer renderer) {
116 boolean show = ThemeUtil.parseAreaShowBorder(theme);
117 renderer.setDrawOutline(show);
118 }
119
120
121 protected void applyShowLine(StableXYDifferenceRenderer renderer) {
122 boolean show = ThemeUtil.parseShowLine(theme);
123 renderer.setShapesVisible(show);
124 }
125
126
127 protected void applyOutlineColor(StableXYDifferenceRenderer renderer) {
128 Color c = ThemeUtil.parseLineColorField(theme);
129 renderer.setOutlinePaint(c);
130 }
131
132 protected void applyOutlineWidth(StableXYDifferenceRenderer renderer) {
133 int size = ThemeUtil.parseLineWidth(theme);
134 }
135
136 /** Inform renderer whether it should draw a label. */
137 protected void applyShowArea(StableXYDifferenceRenderer renderer) {
138 renderer.setLabelArea(ThemeUtil.parseShowArea(theme));
139 }
140
141 protected void applyOutlineStyle(StableXYDifferenceRenderer renderer) {
142 float[] dashes = ThemeUtil.parseLineStyle(theme);
143 int size = ThemeUtil.parseLineWidth(theme);
144
145 Stroke stroke = null;
146
147 if (dashes.length <= 1) {
148 stroke = new BasicStroke(Integer.valueOf(size));
149 }
150 else {
151 stroke = new BasicStroke(Integer.valueOf(size),
152 BasicStroke.CAP_BUTT,
153 BasicStroke.JOIN_ROUND,
154 1.0f,
155 dashes,
156 0.0f);
157 }
158
159 renderer.setOutlineStroke(stroke);
160 }
161 }
162 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org