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

public class Move extends Applet
                  implements ActionListener, MouseListener, MouseMotionListener {

  private Button left = new Button("<");
  private Button right = new Button(">");
  private Button up = new Button("^");
  private Button down = new Button("v");
  private Button grow = new Button("O");
  private Button shrink = new Button(".");

  private int radius = 20;             // The circle details
  private int x = 110, y = 110;
  
  private int postTip = 0;                // 1 when tool tip to be displayed
  private String tipMessage;
  private int postCircle = 0;             // 1 when circle info to be displayed
  
  public void init() {
    add(left);
    add(right);
    add(up);
    add(down);
    add(grow);
    add(shrink); 
    left.addActionListener(this);
    right.addActionListener(this);
    up.addActionListener(this);
    down.addActionListener(this);
    grow.addActionListener(this);
    shrink.addActionListener(this); 
    left.addMouseListener(this);
    right.addMouseListener(this);
    up.addMouseListener(this);
    down.addMouseListener(this);
    grow.addMouseListener(this);
    shrink.addMouseListener(this);
    addMouseMotionListener(this);
  } 

  // Draw the circle
  public void paint(Graphics g) {
    g.setColor(Color.blue);
    g.fillOval(x-radius, y-radius, 2*radius, 2*radius);
    if (postTip == 1) {
      g.setColor(Color.yellow);
      g.fillRect(0, 5, 70, 20);
      g.setColor(Color.black);
      g.drawRect(0, 5, 70, 20);
      g.drawString(tipMessage, 5, 20);
    } 
    if (postCircle == 1) {
      g.setColor(Color.yellow);
      g.fillRect(x, y, 170, 20);
      g.setColor(Color.black);
      g.drawRect(x, y, 170, 20);
      g.drawString("Circle radius "+radius+" at ("+x+","+y+")", x+5, y+15);
    } 
  }
   
  public void actionPerformed(ActionEvent e) {  // Button clicked
    if (e.getSource() == left)
      x = x-10;
    else if (e.getSource() == right)
      x = x+10;
    else if (e.getSource() == up)
      y = y-10;
    else if (e.getSource() == down)
      y = y+10;
    else if (e.getSource() == grow)
      radius = radius+4;
    else if (e.getSource() == shrink)
      radius = radius-4;
    repaint(); 
  }
  
  public void mousePressed(MouseEvent e) { }

  public void mouseReleased(MouseEvent e) { }

  public void mouseClicked(MouseEvent e) { }

  public void mouseEntered(MouseEvent e) {
    postTip = 1;
    if (e.getSource() == left)
      tipMessage = "Move left";
    if (e.getSource() == right)
      tipMessage = "Move right";
    if (e.getSource() == up)
      tipMessage = "Move up";
    if (e.getSource() == down)
      tipMessage = "Move down";
    if (e.getSource() == grow)
      tipMessage = "Grow";
    if (e.getSource() == shrink)
      tipMessage = "Shrink";
    repaint();
  }

  public void mouseExited(MouseEvent e) { 
    postTip = 0;
    repaint();
  }
  
  public void mouseMoved(MouseEvent e) {
    if ((x-e.getX())*(x-e.getX())+(y-e.getY())*(y-e.getY()) <= radius*radius)
      postCircle = 1;
    else 
      postCircle = 0;
    repaint();
  }
  
  public void mouseDragged(MouseEvent e) { }
}