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 :

http://dive4elements.wald.intevation.org