/**
 *
 * Class Chart implements a chart that shows the 
 * number of grades grouped by A, B, C, D, F and other 
 * in a pie chart or bar chart representation
 *
 * @author  Daniel Burgner
 * @version 1.0
 * @class   CS5730
 * @date    02.05.2002
 */

import java.awt.*;
import java.io.*;
import java.lang.*;
import java.applet.Applet;

public class Chart extends Applet {
	
	protected int nA;
	protected int nB;
	protected int nC;
	protected int nD;
	protected int nF;
	protected int nW;
	protected int nI;
	protected int nDrop;
	protected int nOther;
	protected int nTotalGrades = 0;
	protected int nSwitch = 1;   /*  switch from pie to bar chart */
	protected Button bSwitch;

	public void init() {
		String paramA = getParameter("A");
		nA = Integer.parseInt(String.valueOf(paramA));
		String paramB = getParameter("B");
		nB = Integer.parseInt(String.valueOf(paramB));
		String paramC = getParameter("C");
		nC = Integer.parseInt(String.valueOf(paramC));
		String paramD = getParameter("D");
		nD = Integer.parseInt(String.valueOf(paramD));
		String paramF = getParameter("F");
		nF = Integer.parseInt(String.valueOf(paramF));
		String paramW = getParameter("W");
		nW = Integer.parseInt(String.valueOf(paramW));
		String paramI = getParameter("I");
		nI = Integer.parseInt(String.valueOf(paramI));
		String paramDrop = getParameter("Drop");
		nDrop = Integer.parseInt(String.valueOf(paramDrop));
		nOther = nW + nI + nDrop;
		nTotalGrades = nA + nB + nC + nD + nF + nW + nI + nDrop;

		bSwitch = new Button("Switch");
		bSwitch.resize(40, 40);
		bSwitch.move(130, 200);
		add(bSwitch);	
	}

	public void paint(Graphics g) {
		Dimension d = getSize();
		g.setColor(Color.white);
		g.fillRect(0, 0, d.width, d.height);
		g.setFont(new Font("Arial", Font.BOLD, 12));
		if (nSwitch == 1) {
			int nAngle = 0;
			g.setColor(Color.blue);
			g.drawArc(25, 25, 150, 150, nAngle, (360 * nA / nTotalGrades));
			g.fillArc(25, 25, 150, 150, nAngle, (360 * nA / nTotalGrades));
			nAngle = nAngle + (360 * nA / nTotalGrades);
			g.drawString("A", 200, 40);
			g.setColor(Color.green);
			g.drawArc(25, 25, 150, 150, nAngle, (360 * nB / nTotalGrades));
			g.fillArc(25, 25, 150, 150, nAngle, (360 * nB / nTotalGrades));
			nAngle = nAngle + (360 * nB / nTotalGrades);
			g.drawString("B", 200, 55);
			g.setColor(Color.orange);
			g.drawArc(25, 25, 150, 150, nAngle, (360 * nC / nTotalGrades));
			g.fillArc(25, 25, 150, 150, nAngle, (360 * nC / nTotalGrades));
			nAngle = nAngle + (360 * nC / nTotalGrades);
			g.drawString("C", 200, 70);
			g.setColor(Color.yellow);
			g.drawArc(25, 25, 150, 150, nAngle, (360 * nD / nTotalGrades));
			g.fillArc(25, 25, 150, 150, nAngle, (360 * nD / nTotalGrades));
			nAngle = nAngle + (360 * nD / nTotalGrades);
			g.drawString("D", 200, 85);
			g.setColor(Color.red);
			g.drawArc(25, 25, 150, 150, nAngle, (360 * nF / nTotalGrades));
			g.fillArc(25, 25, 150, 150, nAngle, (360 * nF / nTotalGrades));
			nAngle = nAngle + (360 * nF / nTotalGrades);
			g.drawString("F", 200, 100);
			g.setColor(Color.black);
			g.drawArc(25, 25, 150, 150, nAngle, 360 - nAngle);
			g.fillArc(25, 25, 150, 150, nAngle, 360 - nAngle);
			g.drawString("Other", 200, 115);
		} else {
			g.setColor(Color.blue);
			g.drawString("A", 35, 40);
			g.drawRect(45, 25, (nA * 5), 15);
			g.fillRect(45, 25, (nA * 5), 15);
			g.drawString("" + nA, (50 + nA * 5), 40);
			g.setColor(Color.green);
			g.drawString("B", 35, 65);
			g.drawRect(45, 50, (nB * 5), 15);
			g.fillRect(45, 50, (nB * 5), 15);
			g.drawString("" + nB, (50 + nB * 5), 65);
			g.setColor(Color.orange);
			g.drawString("C", 35, 90);
			g.drawRect(45, 75, (nC * 5), 15);
			g.fillRect(45, 75, (nC * 5), 15);
			g.drawString("" + nC, (50 + nC * 5), 90);
			g.setColor(Color.yellow);
			g.drawString("D", 35, 115);
			g.drawRect(45, 100, (nD * 5), 15);
			g.fillRect(45, 100, (nD * 5), 15);
			g.drawString("" + nD, (50 + nD * 5), 115);
			g.setColor(Color.red);
			g.drawString("F", 35, 140);
			g.drawRect(45, 125, (nF * 5), 15);
			g.fillRect(45, 125, (nF * 5), 15);
			g.drawString("" + nF, (50 + nF * 5), 140);
			g.setColor(Color.black);
			g.drawString("Other", 10, 165);
			g.drawRect(45, 150, (nOther * 5), 15);
			g.fillRect(45, 150, (nOther * 5), 15);
			g.drawString("" + nOther, (50 + nOther * 5), 165);
		}
	}

	public boolean action(Event e, Object o) {
		if (e.target==bSwitch) {
			if (nSwitch == 0) {
				nSwitch = 1;
				repaint();
			} else {
				nSwitch = 0;
				repaint();
			}
		}
		return true;
	}

}
