Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/jfree/StripedAreaDataset.java @ 9496:d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
author | gernotbelger |
---|---|
date | Wed, 26 Sep 2018 15:48:05 +0200 |
parents | |
children | ef5754ba5573 |
comparison
equal
deleted
inserted
replaced
9495:bb278c927b66 | 9496:d8e753d0fdb9 |
---|---|
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde | |
2 * Software engineering by | |
3 * Björnsen Beratende Ingenieure GmbH | |
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt | |
5 * | |
6 * This file is Free Software under the GNU AGPL (>=v3) | |
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the | |
8 * documentation coming with Dive4Elements River for details. | |
9 */ | |
10 package org.dive4elements.river.jfree; | |
11 | |
12 import java.awt.Color; | |
13 import java.awt.Font; | |
14 import java.util.ArrayList; | |
15 import java.util.List; | |
16 | |
17 import org.dive4elements.artifacts.CallMeta; | |
18 import org.dive4elements.river.java2d.ShapeUtils; | |
19 import org.dive4elements.river.themes.ThemeDocument; | |
20 import org.jfree.chart.LegendItem; | |
21 import org.jfree.chart.LegendItemCollection; | |
22 import org.jfree.chart.plot.XYPlot; | |
23 import org.jfree.data.xy.XYSeries; | |
24 import org.jfree.data.xy.XYSeriesCollection; | |
25 | |
26 /** | |
27 * @author Domenico Nardi Tironi | |
28 */ | |
29 public class StripedAreaDataset extends XYSeriesCollection implements StyledXYDataset { | |
30 | |
31 public static final class Stripe { | |
32 | |
33 private final String label; | |
34 | |
35 private final Color color; | |
36 | |
37 private final double lower; | |
38 | |
39 private final double upper; | |
40 | |
41 public Stripe(final String label, final Color color, final double lower, final double upper) { | |
42 this.label = label; | |
43 this.color = color; | |
44 this.lower = lower; | |
45 this.upper = upper; | |
46 } | |
47 | |
48 public String getLabel() { | |
49 return this.label; | |
50 } | |
51 | |
52 public Color getColor() { | |
53 return this.color; | |
54 } | |
55 | |
56 public double getLower() { | |
57 return this.lower; | |
58 } | |
59 | |
60 public double getUpper() { | |
61 return this.upper; | |
62 } | |
63 | |
64 } | |
65 | |
66 private static final long serialVersionUID = 1L; | |
67 | |
68 private final List<Stripe> stripes = new ArrayList<>(); | |
69 | |
70 private final ThemeDocument theme; | |
71 | |
72 public StripedAreaDataset(final ThemeDocument theme) { | |
73 this.theme = theme; | |
74 } | |
75 | |
76 public void addStripe(final Stripe stripe) { | |
77 | |
78 this.stripes.add(stripe); | |
79 | |
80 final XYSeries stripeSeries = new XYSeries(stripe.getLabel()); | |
81 // REMARK: we need at least one item, so the renderer method is called | |
82 stripeSeries.add(Double.NaN, Double.NaN); | |
83 super.addSeries(stripeSeries); | |
84 } | |
85 | |
86 @Override | |
87 public void addSeries(final XYSeries series) { | |
88 throw new UnsupportedOperationException(); | |
89 } | |
90 | |
91 Stripe getStripe(final int series) { | |
92 return this.stripes.get(series); | |
93 } | |
94 | |
95 @Override | |
96 public void applyTheme(final CallMeta callMeta, final XYPlot plot, final int datasetIndex, final Font legendFont) { | |
97 | |
98 final StripedAreaDatasetRenderer renderer = createRenderer(); | |
99 | |
100 plot.setRenderer(datasetIndex, renderer); | |
101 | |
102 final LegendItemCollection newItems = new LegendItemCollection(); | |
103 final LegendItemCollection oldItems = plot.getFixedLegendItems(); | |
104 | |
105 final int seriesCount = getSeriesCount(); | |
106 for (int i = 0; i < seriesCount; i++) { | |
107 final LegendItem legendItem = renderer.getLegendItem(datasetIndex, i); | |
108 if (legendItem != null) { | |
109 legendItem.setLabelFont(legendFont); | |
110 newItems.add(legendItem); | |
111 } | |
112 } | |
113 | |
114 if (oldItems != null) | |
115 newItems.addAll(oldItems); | |
116 | |
117 plot.setFixedLegendItems(newItems); | |
118 } | |
119 | |
120 private StripedAreaDatasetRenderer createRenderer() { | |
121 | |
122 final int transparency = this.theme.parseAreaTransparency(); | |
123 | |
124 final StripedAreaDatasetRenderer renderer = new StripedAreaDatasetRenderer(); | |
125 for (int i = 0; i < this.stripes.size(); i++) { | |
126 | |
127 final Color alphaPaint = ShapeUtils.withAlpha(this.stripes.get(i).getColor(), transparency); | |
128 renderer.setSeriesPaint(i, alphaPaint); | |
129 } | |
130 | |
131 return renderer; | |
132 } | |
133 } |