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

public class demoGrid3 extends Applet 
{

  Grid      gridParam;
  Component selectedComponent;
  Image     image;
  TextField col, lig;
  Button    ajout, enleve;
  Choice    choice;
  Checkbox  mode;
 
  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
    gridParam  = new Grid(6,6,400,300,400,300,"DEMO3",1,Color.yellow,Color.orange,Color.red,Color.blue,true,false,false,true,true,true);
    add(gridParam);
    gridParam.move(15,15);
   
    Panel bottomPanel;

    bottomPanel = new Panel();
    
    choice = new Choice();
    choice.addItem("Little Button");
    choice.addItem("Big Button");
    choice.addItem("Label");
    choice.addItem("Checkbox");
    choice.addItem("TextArea");
    choice.addItem("Canvas Michel");
    choice.addItem("Canvas Jean-Michel");
    bottomPanel.add("mode", mode = new Checkbox("Taille Dynamique"));
    bottomPanel.add("component",choice);
    bottomPanel.add("ajouter",ajout = new Button("Ajouter"));
    bottomPanel.add("enlever",enleve = new Button("Enlever"));

    bottomPanel.resize(500,50);
    bottomPanel.move(0,340);
    add(bottomPanel);

    
    repaint();
  }
  

  public Component testChoice(Object arg)
  {
    if (((Choice)arg).getSelectedItem()=="Little Button") 
      selectedComponent = new Button("Bouton");
    if (((Choice)arg).getSelectedItem()=="Big Button") 
      selectedComponent = new Button("Grand Bouton");
    if (((Choice)arg).getSelectedItem()=="Label")
      selectedComponent = new Label("Texte");
    if (((Choice)arg).getSelectedItem()=="Checkbox")
      selectedComponent = new Checkbox("selection");
    if (((Choice)arg).getSelectedItem()=="TextArea")
      selectedComponent = new TextArea("Zone de saisie\nsur plusieurs\nlignes",4,15);
    if (((Choice)arg).getSelectedItem()=="Canvas Michel")
      {
	selectedComponent = new MyCanvas();
	selectedComponent.resize(60,55);
	((MyCanvas)selectedComponent).setImage("http://www.essi.fr/~rubino/JAVA/buffa.gif");
	((MyCanvas)selectedComponent).repaint();
      }
    if (((Choice)arg).getSelectedItem()=="Canvas Jean-Michel")
      {
	selectedComponent = new MyCanvas();
	selectedComponent.resize(71,81);
	((MyCanvas)selectedComponent).setImage("http://www.essi.fr/~rubino/JAVA/leon.gif");
	((MyCanvas)selectedComponent).repaint();
      }
    selectedComponent.setBackground(Color.white);
    return selectedComponent;
  }


  public boolean action(Event event, Object arg) 
  {
    if (event.target instanceof Checkbox)
      gridParam.setDynamicSize(((Checkbox)event.target).getState());
    if (event.target instanceof Choice) 
      {
	selectedComponent = testChoice(choice);
      }
    if (event.target instanceof Button)
      {
	if (gridParam.cellsSelectedSize()>0)
	  {
	    Vector cellsSelected;
	    Point  point;

	    cellsSelected = gridParam.getCellsSelected();
	    if (event.target==ajout)
	      {
		for (int cmpt=0; cmpt < cellsSelected.size(); cmpt++)
		  {
		    selectedComponent = testChoice(choice);
		    point = (Point)cellsSelected.elementAt(cmpt);
		    gridParam.setContentAt(point.x,point.y,selectedComponent);
		  }
	      }
	    if (event.target==enleve)
	      {
		for (int cmpt=0; cmpt < cellsSelected.size(); cmpt++)
		  {
		    point = (Point)cellsSelected.elementAt(cmpt);
		    if (gridParam.getContentAt(point.x,point.y)!=null)
		      gridParam.deleteContentAt(point.x,point.y);
		  }
	      }
	  }
	 

      }
    validate();
    repaint(); 
    return true;
  }


  public void start() 
  {
    repaint();
  }

   
  public void stop() 
  {

  }

  
  public void destroy() 
  {

  }

  
  public void paint(Graphics g) 
  {

  }  

}


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();
  } 

}
