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 }

http://dive4elements.wald.intevation.org