//RectanguloHandler.java

import java.awt.event.*;
import java.awt.*;
/**Clase que implementa el ActionListener para crear
 * rectangulos cada vez que se elije esta opcion
 * en el menu.
 * @author Luis Espinoza Severino.
 */
class RectanguloHandler implements ActionListener
{
   //Atributos
   private EditorPanel panel;
   private Rectangulo rectangulo;
   private boolean activo;
   private Point esquina0;

/**Constructor de clase, inicializa atributos.
 * @param panel - Panel donde creara el rectangulo.
 */
   public RectanguloHandler(EditorPanel panel)
     {
	this.panel = panel;
	activo = false;
     }
/**Implementacion de las acciones que se toman
 * cuando se elije en el menu crear/rectangulo.
 * @param e -
 */
   public void actionPerformed(ActionEvent e)
     {
	panel.changeMouseListener(new MouseHandler());
	panel.changeMouseMotionListener(new MouseMotionHandler());
	activo = false;
	panel.nomanipular();//Borra cuadraditos;
     }
/**Clase interna que hereda de MouseAdapter, maneja las 
 * acciones del mouse.
 * @author Luis Espinoza Severino.
 */
   class MouseHandler extends MouseAdapter
     {
/**Si el mouse es presionado se crea un rectangulo, dinamicamente.
 * @param e-
 */
	public void mousePressed(MouseEvent e)
	  {
	     if(!activo)
	       {
		  esquina0 = e.getPoint();
		  rectangulo = new Rectangulo(esquina0, 0, 0);
		  panel.incorpore(rectangulo);
		  activo = true;
		  panel.repaint();
	       }
	  }
/**Si el mouse se suelta, el rectangulo es encadenado(se setean sus puntos y
 * cuadrados).
 * @param event -
 */
	public void mouseReleased(MouseEvent event)
	  {
	     activo = false;
	     rectangulo.lockmanSquares();
	  }
     }
/**Clase que define que pasa cuando se mueve el mouse.
 * @author Luis Espinoza Severino.
 */
   class MouseMotionHandler extends MouseMotionAdapter
     {
/**Cuando el cursor es arrastrado dinamicamente cambia el tamaño del rectangulo
 * hasta que es encadenado.
 */
	public void mouseDragged(MouseEvent e)
	  {
	     if (activo)
	       {
		  Point p = e.getPoint();
		  rectangulo.setThirdCorner(p);
		  panel.repaint();
	       }
	  }
     }	
}
