Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/jfree/StyledAreaSeriesCollection.java @ 9555:ef5754ba5573
Implemented legend aggregation based on type of themes.
Added theme-editor style configuration for aggregated legend entries.
Only configured themes get aggregated.
author | gernotbelger |
---|---|
date | Tue, 23 Oct 2018 16:26:48 +0200 |
parents | d8e753d0fdb9 |
children | 6b2496d71936 |
comparison
equal
deleted
inserted
replaced
9554:33ce8eba9806 | 9555:ef5754ba5573 |
---|---|
8 | 8 |
9 package org.dive4elements.river.jfree; | 9 package org.dive4elements.river.jfree; |
10 | 10 |
11 import java.awt.BasicStroke; | 11 import java.awt.BasicStroke; |
12 import java.awt.Color; | 12 import java.awt.Color; |
13 import java.awt.Font; | |
14 import java.awt.Paint; | 13 import java.awt.Paint; |
15 import java.awt.Stroke; | 14 import java.awt.Stroke; |
16 import java.awt.TexturePaint; | 15 import java.awt.TexturePaint; |
17 import java.awt.geom.Ellipse2D; | 16 import java.awt.geom.Ellipse2D; |
18 import java.awt.geom.Rectangle2D; | 17 import java.awt.geom.Rectangle2D; |
19 import java.awt.image.BufferedImage; | 18 import java.awt.image.BufferedImage; |
20 | 19 |
21 import org.apache.log4j.Logger; | 20 import org.apache.log4j.Logger; |
21 import org.dive4elements.artifactdatabase.state.Facet; | |
22 import org.dive4elements.artifacts.CallMeta; | 22 import org.dive4elements.artifacts.CallMeta; |
23 import org.dive4elements.river.artifacts.resources.Resources; | 23 import org.dive4elements.river.artifacts.resources.Resources; |
24 import org.dive4elements.river.exports.LegendAggregator; | |
24 import org.dive4elements.river.java2d.ShapeUtils; | 25 import org.dive4elements.river.java2d.ShapeUtils; |
25 import org.dive4elements.river.themes.ThemeDocument; | 26 import org.dive4elements.river.themes.ThemeDocument; |
26 import org.dive4elements.river.utils.Formatter; | 27 import org.dive4elements.river.utils.Formatter; |
27 import org.jfree.chart.LegendItem; | 28 import org.jfree.chart.LegendItem; |
28 import org.jfree.chart.LegendItemCollection; | |
29 import org.jfree.chart.plot.XYPlot; | 29 import org.jfree.chart.plot.XYPlot; |
30 import org.jfree.data.xy.XYSeriesCollection; | 30 import org.jfree.data.xy.XYSeriesCollection; |
31 | 31 |
32 /** | 32 /** |
33 * One or more dataseries to draw a polygon (either "open up/downwards", or | 33 * One or more dataseries to draw a polygon (either "open up/downwards", or |
53 | 53 |
54 /** Theme-document with attributes about actual visual representation. */ | 54 /** Theme-document with attributes about actual visual representation. */ |
55 private final ThemeDocument theme; | 55 private final ThemeDocument theme; |
56 | 56 |
57 /** | 57 /** |
58 * A 'type' that allows to categorize themes by it. Tyically this is simply the facet-name of the originating | |
59 * {@link Facet}. | |
60 */ | |
61 private final String themeType; | |
62 | |
63 /** | |
58 * @param theme | 64 * @param theme |
59 * the theme-document. | 65 * the theme-document. |
60 */ | 66 * @param string |
61 public StyledAreaSeriesCollection(final ThemeDocument theme) { | 67 */ |
68 public StyledAreaSeriesCollection(final String themeType, final ThemeDocument theme) { | |
69 this.themeType = themeType; | |
62 this.theme = theme; | 70 this.theme = theme; |
63 this.mode = FILL_MODE.BETWEEN; | 71 this.mode = FILL_MODE.BETWEEN; |
72 } | |
73 | |
74 public String getThemeType() { | |
75 return this.themeType; | |
64 } | 76 } |
65 | 77 |
66 /** Gets the Fill mode. */ | 78 /** Gets the Fill mode. */ |
67 private FILL_MODE getMode() { | 79 private FILL_MODE getMode() { |
68 return this.mode; | 80 return this.mode; |
72 public void setMode(final FILL_MODE fMode) { | 84 public void setMode(final FILL_MODE fMode) { |
73 this.mode = fMode; | 85 this.mode = fMode; |
74 } | 86 } |
75 | 87 |
76 @Override | 88 @Override |
77 public void applyTheme(final CallMeta callMeta, final XYPlot plot, final int datasetIndex, final Font legendFont) { | 89 public void applyTheme(final CallMeta callMeta, final XYPlot plot, final LegendAggregator legendBuilder, final int datasetIndex) { |
78 | |
79 final LegendItemCollection lic = new LegendItemCollection(); | |
80 final LegendItemCollection anno = plot.getFixedLegendItems(); | |
81 | 90 |
82 log.debug("Registering an 'area'renderer at idx: " + datasetIndex); | 91 log.debug("Registering an 'area'renderer at idx: " + datasetIndex); |
83 | 92 |
84 final StableXYDifferenceRenderer dRenderer = new StableXYDifferenceRenderer(); | 93 final StableXYDifferenceRenderer dRenderer = new StableXYDifferenceRenderer(); |
85 | 94 |
96 | 105 |
97 dRenderer.setAreaLabelTemplate(Resources.getMsg(callMeta, "area.label.template", "Area=%sm2")); | 106 dRenderer.setAreaLabelTemplate(Resources.getMsg(callMeta, "area.label.template", "Area=%sm2")); |
98 | 107 |
99 final LegendItem legendItem = dRenderer.getLegendItem(datasetIndex, 0); | 108 final LegendItem legendItem = dRenderer.getLegendItem(datasetIndex, 0); |
100 if (legendItem != null) { | 109 if (legendItem != null) { |
101 legendItem.setLabelFont(legendFont); | 110 legendBuilder.addLegendItem(this.themeType, legendItem); |
102 lic.add(legendItem); | 111 } else { |
103 } else { | 112 log.warn("Could not get LegengItem for renderer: " + datasetIndex + ", series-idx " + 0); |
104 log.warn("Could not get LegentItem for renderer: " + datasetIndex + ", series-idx " + 0); | 113 } |
105 } | |
106 | |
107 if (anno != null) { | |
108 lic.addAll(anno); | |
109 } | |
110 | |
111 plot.setFixedLegendItems(lic); | |
112 } | 114 } |
113 | 115 |
114 /** | 116 /** |
115 * Returns a transparently textured paint. | 117 * Returns a transparently textured paint. |
116 * | 118 * |
272 } | 274 } |
273 | 275 |
274 public boolean shouldCalculateRange() { | 276 public boolean shouldCalculateRange() { |
275 return this.theme.parseCalculateRange(); | 277 return this.theme.parseCalculateRange(); |
276 } | 278 } |
279 | |
280 @Override | |
281 public void applyAggregatedLegendTheme(final LegendItem item, final ThemeDocument legendTheme) { | |
282 /* not implemented */ | |
283 } | |
277 } | 284 } |
278 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |