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