Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/jfree/StyledAreaSeriesCollection.java @ 3938:c0cab28ba1ea
merged flys-artifacts
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Fri, 28 Sep 2012 12:15:03 +0200 |
parents | 940cd2ef149f |
children | e8a4d2fd25cc |
comparison
equal
deleted
inserted
replaced
3865:436eec3be6ff | 3938:c0cab28ba1ea |
---|---|
1 package de.intevation.flys.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 de.intevation.flys.themes.ThemeAccess; | |
11 import de.intevation.flys.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.getBackgroundColorString(theme)); | |
88 | |
89 int transparency = ThemeUtil.parseTransparency(theme); | |
90 if (transparency > 0) { | |
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.parseShowBorder(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 : |