source: trunk/src/org/expeditee/items/widgets/charts/AbstractPie.java@ 199

Last change on this file since 199 was 199, checked in by ra33, 16 years ago

Added functionality allowing users to do PieCharts, also charts now listen for changes on the dataFrame and refresh when needed

File size: 2.8 KB
Line 
1package org.expeditee.items.widgets.charts;
2
3import java.awt.Font;
4
5import javax.swing.JPanel;
6
7import org.expeditee.gui.AttributeUtils;
8import org.expeditee.gui.AttributeValuePair;
9import org.expeditee.gui.Frame;
10import org.expeditee.gui.FrameIO;
11import org.expeditee.items.Item;
12import org.expeditee.items.Text;
13import org.expeditee.items.widgets.InteractiveWidget;
14import org.jfree.chart.ChartPanel;
15import org.jfree.chart.JFreeChart;
16import org.jfree.chart.labels.PieSectionLabelGenerator;
17import org.jfree.chart.plot.PiePlot;
18import org.jfree.chart.title.LegendTitle;
19import org.jfree.chart.title.TextTitle;
20import org.jfree.data.general.DefaultPieDataset;
21
22public abstract class AbstractPie extends InteractiveWidget {
23
24 protected static final String DEFAULT_TITLE = "";
25
26 protected DefaultPieDataset _data = new DefaultPieDataset();
27
28 private JFreeChart _chart = null;
29
30 private LegendTitle _legend = null;
31
32 private PieSectionLabelGenerator _labelGenerator;
33
34 protected JFreeChart getChart() {
35 return _chart;
36 }
37
38 protected DefaultPieDataset getData() {
39 return _data;
40 }
41
42 public AbstractPie(Text source, String[] args) {
43 super(source, new JPanel(), 100, 300, -1, 100, 300, -1);
44
45 init();
46 refresh();
47 }
48
49 @Override
50 protected String[] getArgs() {
51 return null;
52 }
53
54 protected void init() {
55 // create a chart...
56 _chart = createNewChart();
57 _chart.getPlot().setNoDataMessage("Add link to data frame");
58 _legend = _chart.getLegend();
59 _labelGenerator = ((PiePlot) getChart().getPlot()).getLabelGenerator();
60 super._swingComponent = new ChartPanel(_chart);
61 }
62
63 protected abstract JFreeChart createNewChart();
64
65 @Override
66 public void refresh() {
67 super.refresh();
68 // Get the data from the linked frame
69 Frame dataFrame = getDataFrame();
70
71 _data.clear();
72 _chart.clearSubtitles();
73
74 if (dataFrame != null) {
75 _chart.setTitle(dataFrame.getTitle());
76
77 for (Text t : dataFrame.getBodyTextItems(false)) {
78 AttributeValuePair avp = AttributeUtils.getPair(t.getText());
79 if (avp != null) {
80 _data.setValue(avp.getAttribute(), avp.getDoubleValue());
81 }
82 }
83
84 if (dataFrame.hasAnnotation("legend")) {
85 _chart.addLegend(_legend);
86 }
87 if (dataFrame.hasAnnotation("subtitle")) {
88 getChart().addSubtitle(
89 new TextTitle(dataFrame.getAnnotationValue("subtitle"),
90 JFreeChart.DEFAULT_TITLE_FONT.deriveFont(
91 Font.ITALIC,
92 JFreeChart.DEFAULT_TITLE_FONT
93 .getSize2D() * .7F)));
94 }
95 if (dataFrame != null) {
96 if (dataFrame.hasAnnotation("labels")) {
97 ((PiePlot) getChart().getPlot())
98 .setLabelGenerator(_labelGenerator);
99 } else {
100 ((PiePlot) getChart().getPlot()).setLabelGenerator(null);
101 }
102 }
103 } else {
104 _chart.setTitle(this.getClass().getSimpleName() + " Chart");
105 }
106 super._swingComponent.invalidate();
107 }
108
109 @Override
110 public float getMinimumBorderThickness() {
111 return 1.0F;
112 }
113}
Note: See TracBrowser for help on using the repository browser.