//CirculoHandler.java

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

/**Clase que maneja la crecion de un circulo,
 * debido a la seleccion de crear/circulo en el menu
 * @author Luis Espinoza Severino.
 */
class CirculoHandler implements ActionListener
{
//Atributos   
   private EditorPanel panel;
   private Circulo circulo;
   private boolean active;
   private Point centro;
/**Constructor de clase.
 * @param panel -
 */
   public CirculoHandler(EditorPanel panel)
     {
	this.panel = panel;
	active = false;
     }
/**Metodo que desencadena la construccion del circulo.
 * @param e-
 */
   public void actionPerformed(ActionEvent e)
     {
	panel.changeMouseListener(new MouseHandler());
	panel.changeMouseMotionListener(new MouseMotionHandler());
	System.out.println("mouse handlder circle changed");
	active = false;
	panel.nomanipular();
     }
/**Clase que maneja las excepciones por las acciones del mouse.
 * @author Luis Espinoza Severino.
 */
   class MouseHandler extends MouseAdapter
     { 
/**Metodo que maneja la excepcion de mouse presionado.
 * @parame e -
 */
	public void mousePressed(MouseEvent e)
	  {	
	     if(!active)
	       {
		  centro = e.getPoint();
		  circulo = new Circulo(centro,0);
		  panel.incorpore(circulo);
		  System.out.println("mouse presionado");
		  active = true;
		  panel.repaint();
	       }
	  }
/**Metodo que maneja la excepcion cuando el mouse es soltado.
 * @param e -;
 */
	public void mouseReleased(MouseEvent e)
	  {
	     active = false;
	  }
	
     }
/**Clase que maneja excepciones del movimiento del mouse
 * @author Luis Espinoza.
 */
   class MouseMotionHandler extends MouseMotionAdapter
     {
/**metodo que maneja el arrasre
 * @param e -
 */
	public void mouseDragged(MouseEvent e)
	  {
	     if (active)
	       {
		  Point p = e.getPoint();
		  double a = p.getX()-centro.getX();
		  double b = p.getY()-centro.getY();
		  double newRadio=Math.sqrt(a*a+b*b);
		  circulo.setRadio(newRadio);
		  panel.repaint();
	       }
	  }
     }
}
