/**
Clase PisoHandler
@author Diego Gonzalez
@author José Ignacio Guerra
@author Patricio Valle
*/

   import java.awt.event.*;
   import java.awt.*;
   import java.lang.Math;
   import java.util.*;
   import java.awt.geom.*;
   import javax.swing.*;
   import java.net.*;
   import java.applet.*;

/**
Clase PisoHandler que maneja eventos de un piso
*/
    class PisoHandler implements ActionListener
   {
   
      private Dibujo dibujo;
      private int piso;
   /**
   Constructor del manejador de piso
   @param dib, Objeto dibujo que permite dibujar 
   @param piso, entero que identifica al piso (2,3 o 4)
   */ 
       public PisoHandler(Dibujo dib, int piso)
      {
         dibujo = dib;
         this.piso=piso;
      }
   
   /**
   Maneja acciones realacionadas con el mouse
   @param e accion sobre boton
   */
       public void actionPerformed(ActionEvent e)
      {
         dibujo.changeMouseListener(new MouseHandler());
         dibujo.changeMouseMotionListener(new MouseMotionHandler());
         dibujo.piso(piso);
      }
   
   /**
   Clase MouseHandler que maneja eventos de mouse
   */
       class MouseHandler extends MouseAdapter
      {
          public void mouseClicked(MouseEvent event)
         {
            Point p = event.getPoint();
            int encontrado = dibujo.cambiaPiso(p);
            if (encontrado != NOENCONTRADO)  
            { 
               piso = encontrado;
               dibujo.changeMouseListener(new MouseHandler());
               dibujo.changeMouseMotionListener(new MouseMotionHandler());
               dibujo.piso(piso);
            }
            else {
               dibujo.findLink(p);
            
            }	 
         
         }
      /**
      Metodo que genera acciones al evento 
      de mantener presionado el mouse
      @param event evento de mouse
      */ 
          public void mousePressed (MouseEvent event)
         {
         
         }
      
      /**
      Metodo que genera acciones acorde al evento 
      de liberar el mouse
      @param event evento de mouse
      */ 
      
          public void mouseReleased(MouseEvent event)
         {
         
         }
      }
   
       private class MouseMotionHandler
       implements MouseMotionListener
      {
      
      /**
      Metodo que genera acciones acorde al evento 
      de mover el mouse
      @param event evento de mouse
      */ 
          public void mouseMoved(MouseEvent event)
         {
         // set the mouse cursor to cross hairs if it is inside
         // a rectangle
            Point p = event.getPoint();
            if(dibujo.find(p)!=NOENCONTRADO){
               Container comp = dibujo.getContainer();      
               comp.setCursor(Cursor.getPredefinedCursor
                  (Cursor.HAND_CURSOR));
            }
            else 
            {
               Container comp = dibujo.getContainer();      
               comp.setCursor(Cursor.getDefaultCursor());
            
            }    
         }
      
      /**
      Metodo que genera acciones acorde al evento 
      de arrastrar el mouse
      @param event evento de mouse
      */ 
          public void mouseDragged(MouseEvent event)
         {
         }
      }
   
      public static final int NOENCONTRADO = 100; 
   }

