Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/jfree/StripedAreaDataset.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 |
comparison
equal
deleted
inserted
replaced
9554:33ce8eba9806 | 9555:ef5754ba5573 |
---|---|
8 * documentation coming with Dive4Elements River for details. | 8 * documentation coming with Dive4Elements River for details. |
9 */ | 9 */ |
10 package org.dive4elements.river.jfree; | 10 package org.dive4elements.river.jfree; |
11 | 11 |
12 import java.awt.Color; | 12 import java.awt.Color; |
13 import java.awt.Font; | |
14 import java.util.ArrayList; | 13 import java.util.ArrayList; |
15 import java.util.List; | 14 import java.util.List; |
16 | 15 |
16 import org.dive4elements.artifactdatabase.state.Facet; | |
17 import org.dive4elements.artifacts.CallMeta; | 17 import org.dive4elements.artifacts.CallMeta; |
18 import org.dive4elements.river.exports.LegendAggregator; | |
18 import org.dive4elements.river.java2d.ShapeUtils; | 19 import org.dive4elements.river.java2d.ShapeUtils; |
19 import org.dive4elements.river.themes.ThemeDocument; | 20 import org.dive4elements.river.themes.ThemeDocument; |
20 import org.jfree.chart.LegendItem; | 21 import org.jfree.chart.LegendItem; |
21 import org.jfree.chart.LegendItemCollection; | |
22 import org.jfree.chart.plot.XYPlot; | 22 import org.jfree.chart.plot.XYPlot; |
23 import org.jfree.data.xy.XYSeries; | 23 import org.jfree.data.xy.XYSeries; |
24 import org.jfree.data.xy.XYSeriesCollection; | 24 import org.jfree.data.xy.XYSeriesCollection; |
25 | 25 |
26 /** | 26 /** |
65 | 65 |
66 private static final long serialVersionUID = 1L; | 66 private static final long serialVersionUID = 1L; |
67 | 67 |
68 private final List<Stripe> stripes = new ArrayList<>(); | 68 private final List<Stripe> stripes = new ArrayList<>(); |
69 | 69 |
70 /** | |
71 * A 'type' that allows to categorize themes by it. Tyically this is simply the facet-name of the originating | |
72 * {@link Facet}. | |
73 */ | |
74 private final String themeType; | |
75 | |
70 private final ThemeDocument theme; | 76 private final ThemeDocument theme; |
71 | 77 |
72 public StripedAreaDataset(final ThemeDocument theme) { | 78 public StripedAreaDataset(final String themeType, final ThemeDocument theme) { |
79 this.themeType = themeType; | |
73 this.theme = theme; | 80 this.theme = theme; |
74 } | 81 } |
75 | 82 |
76 public void addStripe(final Stripe stripe) { | 83 public void addStripe(final Stripe stripe) { |
77 | 84 |
91 Stripe getStripe(final int series) { | 98 Stripe getStripe(final int series) { |
92 return this.stripes.get(series); | 99 return this.stripes.get(series); |
93 } | 100 } |
94 | 101 |
95 @Override | 102 @Override |
96 public void applyTheme(final CallMeta callMeta, final XYPlot plot, final int datasetIndex, final Font legendFont) { | 103 public void applyTheme(final CallMeta callMeta, final XYPlot plot, final LegendAggregator legendBuilder, final int datasetIndex) { |
97 | 104 |
98 final StripedAreaDatasetRenderer renderer = createRenderer(); | 105 final StripedAreaDatasetRenderer renderer = createRenderer(); |
99 | 106 |
100 plot.setRenderer(datasetIndex, renderer); | 107 plot.setRenderer(datasetIndex, renderer); |
101 | 108 |
102 final LegendItemCollection newItems = new LegendItemCollection(); | |
103 final LegendItemCollection oldItems = plot.getFixedLegendItems(); | |
104 | |
105 final int seriesCount = getSeriesCount(); | 109 final int seriesCount = getSeriesCount(); |
106 for (int i = 0; i < seriesCount; i++) { | 110 for (int i = 0; i < seriesCount; i++) { |
107 final LegendItem legendItem = renderer.getLegendItem(datasetIndex, i); | 111 final LegendItem legendItem = renderer.getLegendItem(datasetIndex, i); |
108 if (legendItem != null) { | 112 if (legendItem != null) |
109 legendItem.setLabelFont(legendFont); | 113 legendBuilder.addLegendItem(this.themeType, legendItem); |
110 newItems.add(legendItem); | |
111 } | |
112 } | 114 } |
113 | |
114 if (oldItems != null) | |
115 newItems.addAll(oldItems); | |
116 | |
117 plot.setFixedLegendItems(newItems); | |
118 } | 115 } |
119 | 116 |
120 private StripedAreaDatasetRenderer createRenderer() { | 117 private StripedAreaDatasetRenderer createRenderer() { |
121 | 118 |
122 final int transparency = this.theme.parseAreaTransparency(); | 119 final int transparency = this.theme.parseAreaTransparency(); |
128 renderer.setSeriesPaint(i, alphaPaint); | 125 renderer.setSeriesPaint(i, alphaPaint); |
129 } | 126 } |
130 | 127 |
131 return renderer; | 128 return renderer; |
132 } | 129 } |
130 | |
131 @Override | |
132 public void applyAggregatedLegendTheme(final LegendItem item, final ThemeDocument legendTheme) { | |
133 /* not implemented at the moment */ | |
134 } | |
133 } | 135 } |