import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class DrawApplet extends Applet implements ItemListener,
MouseListener {

//  Author:  Tony Capone     CSCI 15A  Section 5

static final int
iLine=1, iRect=2, iCircle=3;

int mstartx=0, mstarty=0;
int mendx=0, mendy=0;
int colChoice;
int shapeChoice;
int bigX, bigY, littleX, littleY;
boolean isfill;

CheckboxGroup Shape=new CheckboxGroup();
CheckboxGroup Fill=new CheckboxGroup();
CheckboxGroup Colo=new CheckboxGroup();

Checkbox LineCheck=new Checkbox("Line", Shape, true);
Checkbox RectCheck=new Checkbox("Rectangle", Shape, false);
Checkbox CircleCheck=new Checkbox("Circle", Shape, false);
Checkbox RedCheck=new Checkbox("Red", Colo, true);
Checkbox YellowCheck=new Checkbox("Yellow", Colo, false);
Checkbox BlueCheck=new Checkbox("Blue", Colo, false);
Checkbox HollowCheck=new Checkbox("Hollow", Fill, true);
Checkbox FillCheck=new Checkbox("Filled", Fill, false);

public void init() {
add(LineCheck); add(RectCheck); add(CircleCheck);
add(RedCheck); add(YellowCheck); add(BlueCheck);
add(HollowCheck); add(FillCheck);

LineCheck.addItemListener(this);
RectCheck.addItemListener(this);
CircleCheck.addItemListener(this);
RedCheck.addItemListener(this);
YellowCheck.addItemListener(this); 
BlueCheck.addItemListener(this);
HollowCheck.addItemListener(this); 
FillCheck.addItemListener(this);

this.addMouseListener(this);
}

public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {
mstartx = e.getX();
mstarty = e.getY();
}
public void mouseReleased(MouseEvent e) {
mendx = e.getX();
mendy = e.getY();
repaint();
}

public void itemStateChanged (ItemEvent e) {

if(e.getSource()==RedCheck)
colChoice = 1;
if(e.getSource()==YellowCheck)
colChoice = 2;
if(e.getSource()==BlueCheck)
colChoice = 3;

if(e.getSource()==LineCheck)
shapeChoice = 1;
if(e.getSource()==RectCheck)
shapeChoice = 2;
if(e.getSource()==CircleCheck)
shapeChoice = 3;

if(e.getSource()==HollowCheck)
isfill = false;
if(e.getSource()==FillCheck)
isfill = true;
}

public void update (Graphics g) {
paint(g); }

public void paint(Graphics g) {

if(mendx >= mstartx) {
bigX = mendx;
littleX = mstartx; }
else {
bigX = mstartx;
littleX = mendx; }

if(mendy >= mstarty) {
bigY = mendy;
littleY = mstarty; }
else {
bigY = mstarty;
littleY = mendy; }


switch(shapeChoice) {
case iLine:
Line L1 = new Line(colChoice);
L1.DrawLine(mstartx, mstarty, mendx, mendy, g);
break;

case iRect:
Rectangle R1 = new Rectangle(isfill, colChoice);
R1.DrawRectangle(littleX, littleY, bigX - littleX, bigY - littleY, g);
break;

case iCircle:
Circle C1 = new Circle(isfill, colChoice);
C1.DrawCircle(littleX, littleY, bigX - littleX, bigY - littleY, g);
break;
}
}}

