001 /* PAVLOV -- Multiple Choice Study System
002 * Copyright (C) 2000 - 2004 T.J. Willis
003 *
004 * This program is free software; you can redistribute it and/or
005 * modify it under the terms of the GNU General Public License
006 * as published by the Free Software Foundation; either version 2
007 * of the License, or (at your option) any later version.
008 *
009 * This program is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
012 * GNU General Public License for more details.
013 *
014 * You should have received a copy of the GNU General Public License
015 * along with this program; if not, write to the Free Software
016 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
017 *
018 * $Header: /cvsroot/pavlov/net/sourceforge/pavlov/pluglets/feedback/charts/JPieChartFeedbackPluglet.java,v 1.3 2004/05/10 15:22:10 tj_willis Exp $
019 *
020 *
021 * NOTE: This class is an interface between Pavlov and jCharts.
022 * jCharts is a registered trademark of Nathaniel G. Auvil
023 * see: http://jcharts.sourceforge.net
024 * http://sourceforge.net/projects/jcharts
025 *
026 * jCharts includes software developed by the Apache Software Foundation
027 * (http://www.apache.org/), namely the Apache XML Batik Project
028 */
029 package net.sourceforge.pavlov.pluglets.feedback.charts;
030
031 import java.util.*;
032 import javax.swing.*;
033 import java.awt.*;
034 import net.sourceforge.pavlov.pluglets.feedback.AbstractFeedbackPluglet;
035 import net.sourceforge.pavlov.swing.HelpSystem;
036
037 import org.jCharts.chartData.*;
038 import org.jCharts.nonAxisChart.*;
039 import org.jCharts.properties.*;
040
041
042 /**
043 * Describe class <code>JPieChartFeedbackPluglet</code> here.
044 *
045 * @author <a href="mailto:"></a>
046 * @version 1.0
047 */
048 public abstract class JPieChartFeedbackPluglet
049 extends AbstractFeedbackPluglet
050 {
051 /**
052 * This pluglet's JMenuBar.
053 *
054 */
055 protected JMenuBar foo;
056 /**
057 * This pluglet's HelpSystem.
058 *
059 */
060 protected HelpSystem help;
061 /**
062 * The ChartPanel to display the PieChart in.
063 *
064 */
065 protected ChartPanel hmm;
066 private PieChart2D pieChart;
067 private String title;
068 private double[] data;
069 private String[] legendLabels;
070 private Paint[] paints;
071 private PieChartDataSet pieChartDataSet;
072 private ChartProperties chartProperties;
073 private PieChart2DProperties pieChart2DProperties;
074 private LegendProperties legendProperties;
075 private String[] labels;
076
077 /**
078 * Creates a new <code>JPieChartFeedbackPluglet</code> instance.
079 *
080 */
081 public JPieChartFeedbackPluglet()
082 {
083 super();
084 setResizable(true);
085 }
086
087 /**
088 * Describe <code>init</code> method here.
089 *
090 */
091 public void init(){
092 hmm = new ChartPanel();
093 Container cp = getContentPane();
094 cp.setLayout(new BorderLayout());
095 cp.add(hmm,BorderLayout.CENTER);
096
097 pack();
098 //setVisible( true );
099
100 preInitChart();
101
102 hmm.setText(getDescription());
103
104 foo = new JMenuBar();
105 setJMenuBar(foo);
106 pack();
107 }
108
109 /**
110 * Implement to set the chart's title.
111 *
112 * @return a <code>String</code> value
113 */
114 public abstract String getChartTitle();
115 /**
116 * Implement to identify the slices.
117 *
118 * @return a <code>String[]</code> value
119 */
120 public abstract String[] getLegendLabels();
121
122
123 /**
124 * Implement to color the slices.
125 *
126 * @return a <code>Paint[]</code> value
127 */
128 public abstract Paint[] getPaints();
129
130 private void preInitChart()
131 {
132 labels= getLegendLabels();
133 paints= getPaints();
134 title = getChartTitle();
135
136 pieChart2DProperties= new PieChart2DProperties();
137 }
138
139 /**
140 * Describe <code>getLegendProperties</code> method here.
141 *
142 * @return a <code>LegendProperties</code> value
143 */
144 public LegendProperties getLegendProperties()
145 {
146 return new LegendProperties();
147 }
148 /**
149 * Describe <code>getChartProperties</code> method here.
150 *
151 * @return a <code>ChartProperties</code> value
152 */
153 public ChartProperties getChartProperties()
154 {
155 return new ChartProperties();
156 }
157 /**
158 * Describe <code>getPieChart2DProperties</code> method here.
159 *
160 * @return a <code>PieChart2DProperties</code> value
161 */
162 public PieChart2DProperties getPieChart2DProperties()
163 {
164 return new PieChart2DProperties();
165 }
166
167 /**
168 * Describe <code>setData</code> method here.
169 *
170 * @param v an <code>ArrayList</code> value
171 */
172 protected void setData(ArrayList v)
173 {
174 AbstractListAdaptor ala = new AbstractListAdaptor(v.size(),1);
175 data= ala.toArray(v);
176
177 pieChart2DProperties = getPieChart2DProperties();
178
179 try {
180 pieChartDataSet=
181 new PieChartDataSet(title, data, labels, paints, pieChart2DProperties );
182 } catch (Exception e) {
183 e.printStackTrace();
184 }
185 legendProperties = getLegendProperties();
186 chartProperties = getChartProperties();
187 pieChart=
188 new PieChart2D( pieChartDataSet,
189 legendProperties,
190 chartProperties,
191 hmm.getWidth(), hmm.getHeight() );
192
193 hmm.setChart(pieChart);
194 }
195
196 /**
197 * Lets the ChartPanel reshape itself effectively.
198 *
199 * @param x an <code>int</code> value
200 * @param y an <code>int</code> value
201 * @param w an <code>int</code> value
202 * @param h an <code>int</code> value
203 */
204 public void setBounds(int x, int y,int w,int h)
205 {
206 super.setBounds(x,y,w,h);
207 if(pieChart != null && pieChartDataSet !=null)
208 try {
209 pieChart =
210 new PieChart2D( pieChartDataSet,
211 legendProperties,
212 chartProperties,
213 hmm.getWidth(),
214 hmm.getHeight());
215 //(int)((1.0*w/2.0)-10.0),
216 // (int)((1.0*h/2.0)-10.0));
217 hmm.setChart(pieChart);
218 } catch (Exception e) {
219 e.printStackTrace();
220 }
221
222 }
223
224 /**
225 * Describe <code>getPreferredSize</code> method here.
226 *
227 * @return a <code>java.awt.Dimension</code> value
228 */
229 public java.awt.Dimension getPreferredSize()
230 {
231 return new java.awt.Dimension(360,250);
232 }
233
234
235 /**
236 * Trick to get the ChartPanel to redraw correctly.
237 *
238 * @param g a <code>Graphics2D</code> value
239 */
240 public void paint(Graphics2D g)
241 {
242 super.paintComponents(g);
243 }
244
245 }
246
247