import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import java.io.*;
import javax.imageio.*;

public class BouncingBall3 
        extends java.applet.Applet {
  
  public BouncingBall3() {
    setLayout(new BorderLayout());
    canvas = new BouncingBallCanvas();
    add("Center", canvas); 
    animator = new Animator(canvas); 
        
    controlPanel = new JPanel(); 
    controlPanel.setLayout(new GridLayout(1,0));     
    JPanel select = new JPanel();
    select.setLayout(new GridLayout(2,1));
    JButton plusButton = new JButton("+");
    JButton minusButton = new JButton("-");
    select.add(plusButton);
    select.add(minusButton);
    controlPanel.add(select);
    JButton startButton = new JButton("start");
    controlPanel.add(startButton);
    JButton stopButton = new JButton("stop");
    controlPanel.add(stopButton);
    JComboBox choice = new JComboBox();
    choice.addItem("red");
    choice.addItem("green");
    choice.addItem("blue");
    controlPanel.add(choice); 
    add("North", controlPanel); 
    imagePanel = new JPanel(); 
    imagePanel.setLayout(new FlowLayout());
    try {
    	
    	File imageFile = new File("apple.jpg");
    	images[0] = ImageIO.read(imageFile);
    	Image i0s = images[0].getScaledInstance(50, 50, Image.SCALE_SMOOTH);
    	imageFile = new File("cyclo.jpg");
    	images[1] = ImageIO.read(imageFile);
    	Image i1s = images[1].getScaledInstance(50, 50, Image.SCALE_FAST);
    	imageFile = new File("iphone.jpg");
    	images[2] = ImageIO.read(imageFile);
    	Image i2s = images[2].getScaledInstance(50, 50, Image.SCALE_SMOOTH);
    	imageFile = new File("wii.jpg");
    	images[3] = ImageIO.read(imageFile);
    	Image i3s = images[3].getScaledInstance(50, 50, Image.SCALE_FAST);
    
    Icon ibi1 = new ImageIcon(i0s);
    ibs[0] = new JButton(ibi1);
    ibi1 = new ImageIcon(i1s);
    ibs[1] = new JButton(ibi1);
    ibi1 = new ImageIcon(i2s);
    ibs[2] = new JButton(ibi1);
    ibi1 = new ImageIcon(i3s);
    ibs[3] = new JButton(ibi1);
    
    imagePanel.add(ibs[0]);
    imagePanel.add(ibs[1]);
    imagePanel.add(ibs[2]);
    imagePanel.add(ibs[3]);
    
    JButton bb = new JButton("ball");
    imagePanel.add(bb);
    
    add("South", imagePanel);
    startButton.addActionListener(new ButtonHandler(ButtonHandler.START_ANIMATION)); 
    stopButton.addActionListener(new ButtonHandler(ButtonHandler.STOP_ANIMATION)); 
    plusButton.addActionListener(new ButtonHandler(ButtonHandler.PLUS)); 
    minusButton.addActionListener(new ButtonHandler(ButtonHandler.MINUS)); 
    ibs[0].addActionListener(new ButtonHandler(ButtonHandler.I1)); 
    ibs[1].addActionListener(new ButtonHandler(ButtonHandler.I2)); 
    ibs[2].addActionListener(new ButtonHandler(ButtonHandler.I3)); 
    ibs[3].addActionListener(new ButtonHandler(ButtonHandler.I4));
    bb.addActionListener(new ButtonHandler(ButtonHandler.BALL));
    choice.addItemListener(new ColorChoiceHandler());
    } catch (IOException e) {}  
  }
   
  public void init() {
    String att = getParameter("delay");
    if (att != null) { 
      int delay = Integer.parseInt(att);
      animator.setDelay(delay); 
    }
    canvas.initCanvas(); 
  }

  public void start() {
	System.err.println("applet start called");
    animator.start(); 
  }

  public void stop() {
	System.err.println("applet stop called");
    animator.stop(); 
  }
   
  protected BouncingBallCanvas canvas;
  protected Animator animator; 
  protected JPanel controlPanel, imagePanel; 
  
  protected class ButtonHandler implements ActionListener {  

    static final int START_ANIMATION = 1; 
    static final int STOP_ANIMATION = 2; 
    static final int I1 = 3;
    static final int I2 = 4;
    static final int I3 = 5;
    static final int I4 = 6;
    static final int BALL = 7;
    static final int PLUS = 8; 
    static final int MINUS = 9;
    
    public ButtonHandler(int cmd) {
      this.cmd = cmd;     
    }
       
    public void actionPerformed(ActionEvent event) { 
      switch (cmd) { 
      case START_ANIMATION: start(); break; 
      case STOP_ANIMATION: stop(); break;
      case I1:
      case I2:
      case I3:
      case I4:
      	gfxImage = images[cmd-3];
      	break;
      case PLUS:
    	  canvas.changeRadius(5);
    	  break;
      case MINUS:
    	  canvas.changeRadius(-5);
    	  break;
      case BALL:
    	  gfxImage = null; 
    	  break;
      }
    }
    protected int cmd;
  }

  protected class ColorChoiceHandler implements ItemListener {
    public void itemStateChanged(ItemEvent event)  {    
      JComboBox choice = (JComboBox) event.getSource();  
      if (choice != null) {
        if ("red".equals(event.getItem()))
          canvas.setBallColor(Color.red); 
        else if ("green".equals(event.getItem()))
          canvas.setBallColor(Color.green); 
        else if ("blue".equals(event.getItem()))
          canvas.setBallColor(Color.blue); 
        canvas.repaint();
      }
    }
  }
   
  public Image[] images = new Image[4];
  public JButton ibs[] = new JButton[4];
  public static Image gfxImage = null;
}
