import java.applet.Applet;
import java.awt.*;
import java.util.Vector;
import java.net.*;

public class demoGrid6 extends Applet 
{

  Grid grid;

  boolean dragCell;
  int dragCellX,dragCellY;

  MyCanvas dragCanvas= null;
  MyCanvas buffa= null;
  MyCanvas leon = null;
  Button   b    = null;
 
  public void init() 
  {
   
    setLayout(null);

    //    nbC Nombre de colonnes de la Grid
    //    nbR Nombre de Lignes de la Grid
    //    w Longueur de la Grid (en pixels)
    //    h Hauteur de la Grid (en pixels)
    //    rw Longueur de la Grid dans sa totalite (en pixels)
    //    rh Hauteur de la Grid dans sa totalite (en pixels)
    //    t Titre de la Grid
    //    bS Taille de la bordure de la Grid (en pixels)
    //    bC Couleur de la bordure de la Grid 
    //    fC Couleur de fond des champs de la Grid
    //    fT Couleur du texte des champs de la Grid
    //    cC Couleur de fond des cellules de la Grid
    //    vB Booleen indiquant si la bordure doit etre visible
    //    vF Booleen indiquant si les champs doivent etre visibles
    //    dS Booleen indiquant si la Grid doit etre redimensionnee en fct du contenu
    //    iT Booleen indiquant si l'utilisateur peut interagir la Grid
    //    smH Booleen indiquant si une Scrollbar horizontale doit apparaitre en fct de la taille de la Grid
    //    smV Booleen indiquant si une Scrollbar verticale doit apparaitre en fct de la taille de la Grid
   
    grid = new Grid(6,6,600,400,600,400,"DEMO2",1,Color.yellow,Color.orange,Color.red,Color.white,true,true,true,true,true,true);
    
    grid.move(5,5);
    add(grid);
    dragCell=false;
    
    dragCanvas = new MyCanvas();

    //dragCanvas.resize(grid.getTailleCellX()/2,grid.getTailleCellY()/2);
    dragCanvas.resize(20,35);
    dragCanvas.setImage("http://www.essi.fr/~rubino/JAVA/curseur1.gif");
    dragCanvas.repaint();
    dragCanvas.hide();
    add(dragCanvas);


    buffa= new MyCanvas(); 
    buffa.resize(60,55);
    buffa.setImage("http://www.essi.fr/~rubino/JAVA/buffa.gif");
    buffa.repaint();
    grid.setContentAt(2,2,buffa);

    leon= new MyCanvas();
    leon.resize(71,81);
    leon.setImage("http://www.essi.fr/~rubino/JAVA/leon.gif");
    leon.repaint();
    grid.setContentAt(4,2,leon);

    b= new Button("boutton 1");
    grid.setContentAt(1,2,b);  

    validate();
    repaint();
  }

  public void start() 
  {
    repaint();
  }
   
  public void stop() 
  {

  }
  
  public void destroy() 
  {

  }
 
  public void paint()
  {
  }

  public boolean mouseDrag(Event e,int x,int y)
  {
    //System.out.println("drag x "+grid.getCurrentCellPosX());
    //System.out.println("drag y "+grid.getCurrentCellPosY());
    if (!dragCell)
      {
	dragCell=true;
	dragCellX=grid.getCurrentCellPosX();
	dragCellY=grid.getCurrentCellPosY();
	dragCanvas.resize(grid.getTailleCellX()/2,grid.getTailleCellY()/2);
      }
    if (dragCell)
      {
	dragCanvas.move(x,y);
	dragCanvas.show();
      }
    return false;
  }

  public boolean mouseUp(Event e,int x,int y)
  {
    int posX,posY;

    System.out.println("up  x "+grid.getCurrentCellPosX());
    System.out.println("up  y "+grid.getCurrentCellPosY());
    posX=grid.getCurrentCellPosX();
    posY=grid.getCurrentCellPosY();
    dragCanvas.hide();
    //System.out.println("je draggue "+posX+" "+posY+" "+" depuis "+dragCellX+" "+dragCellY+" "+dragCell);
    if ((dragCell))
      { 
	dragCell= false;
	if ((dragCellX==0) && (dragCellY==0))
	  return false;
	if ((posX==0) && (posY==0))
	  return false;
	if ((posX==dragCellX) && (posY==dragCellY))
	  {
	  System.out.println("not dragged");  
	  return false;
	  }
	if ((dragCellX!=0) && (dragCellY!=0) && (posX!=0) && (posY!=0))
	  {
	    if (grid.moveContent(dragCellX,dragCellY,posX,posY)== true )
	      {
		//System.out.println("dragged");
		grid.deselectAllCells();	  
	      }
	    else 
	      //System.out.println("dragged pas bon");
	  }
      }
    return false;
  }    

  public boolean mouseEnter(Event e,int x,int y)
   {
     //System.out.println("enter  x "+grid.getCurrentCellPosX());
     //System.out.println("enter  y "+grid.getCurrentCellPosY());
    return false;
  }   
}


class MyCanvas extends Canvas 
{    
  Image image;
 
  public MyCanvas()
  {
    image = null;
  }

  public void paint (Graphics g) {
    draw_image(g);
  }
 
  public void draw_image(Graphics g){
    if (image != null) {
      g.drawImage(image, 0, 0, this);
    }
  }
 
  public void setImage(String name){
    try{ 
      image = Toolkit.getDefaultToolkit().getImage(new URL(name));
    } catch (MalformedURLException me) {
      System.out.println("MalformedURLException: " + me);
    }
 
    if (image == null) {
      System.err.println("Canvas got invalid image object!");
      clear();
      return;
    }
    repaint();
  }
 
  public void clear(){
    image=null;
    repaint();
  } 

}


