import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.Random;
import java.util.Vector;
import javax.swing.JPanel;


public class JPanelDiapo extends JPanel implements ActionListener {

	private static final long serialVersionUID = 1L;
	protected Vector<Image> tabImages;
	private int nombreimages;
	private MediaTracker tracker;
	public int num_image_courante = 0;
	private int tailleJPanelX = 640, tailleJPanelY = 480;
	public boolean souris, clavier, boucle, aleatoire;
	private Random hasard = new Random();
	
	public JFrameTailleImage monJFrameTailleImage;
	
	public JPanelDiapo(){
	
		this.tabImages = new Vector<Image>();
		// Surveiller le chargement des images
        this.tracker = new MediaTracker(this);
        // Charger une image d'attente 
		this.tabImages.addElement(this.getToolkit().getImage("icons/Wait.png"));
  		//this.tracker.addImage(this.tabImages.elementAt(0), 0);
		MediaTracker tr = new MediaTracker(this);
		tr.addImage(this.tabImages.elementAt(0), 0);
		try
		  {
				tr.waitForAll();
		  }
	    catch (InterruptedException e){System.out.println("Pb de chargement image d'attente");}
    	  
		this.setPreferredSize(new Dimension(this.tailleJPanelX, this.tailleJPanelY));	
	}
	
	// Chargement à partir d'un simple dossier
	public void chargeImages(File dossier)
	{
	      
	      File[] mesfichiers = dossier.listFiles();
	      this.chargeImages(mesfichiers);
/*	      
	      // chargement des images depuis le dossier
	      this.nombreimages = mesfichiers.length;
          System.out.println("Ouverture de : " + dossier.getName()+ mesfichiers.length);
          	for(int i=0; i<this.nombreimages; i++){
          		System.out.println(i +" : "+ mesfichiers[i].getPath() + " : " + mesfichiers[i].getName());
          		this.tabImages.addElement(this.getToolkit().getImage(mesfichiers[i].getPath()));
          		this.tracker.addImage(this.tabImages.elementAt(i), i);
          		
          	}
	      // Attendre le chargement de toutes les images
	      try
		  {
	    	  this.tracker.waitForAll();
	    	  System.out.println("Fin d'attente de chargement des images");
		  }
	      catch (InterruptedException e){System.out.println(e.getMessage());}
	      
	      // Si toutes les images n'ont pas été chargées avec succès
	      if (this.tracker.statusAll(true) != MediaTracker.COMPLETE)
	      	{
	      		System.out.println("Problème de chargement des images : " + this.tracker.statusAll(true));
	      	}
	      else
	      {
	    	  System.out.println(this.nombreimages + "images chargées");
	      }
	 */	      
	}

	// Chargement à partir d'un tableau de fichiers
	public void chargeImages(File[] mesfichiers)
	{
	      this.nombreimages = mesfichiers.length;
	      for(int i=0; i<this.nombreimages; i++){
          		System.out.println(i +" : "+ mesfichiers[i].getPath() + " : " + mesfichiers[i].getName());
          		this.tabImages.addElement(this.getToolkit().getImage(mesfichiers[i].getPath()));
          		this.tracker.addImage(this.tabImages.elementAt(i), i);		
          	}
	      // Attendre le chargement de toutes les images
	      try
		  {
	    	  this.tracker.waitForAll();
	    	  System.out.println("Fin d'attente de chargement des images");
		  }
	      catch (InterruptedException e){System.out.println(e.getMessage());}
	      
	      // Si toutes les images n'ont pas été chargées avec succès
	      if (this.tracker.statusAll(true) != MediaTracker.COMPLETE)
	      	{
	      		System.out.println("Problème de chargement des images : " + this.tracker.statusAll(true));
	      	}
	      else
	      {
	    	  System.out.println(this.nombreimages + "images chargées");
	      }
	      
	}
	
//	 La méthode de l'interface
	public void actionPerformed(ActionEvent e) {
		
	    if (e.getActionCommand() == "apres") {
			if (this.aleatoire){
				this.num_image_courante = this.hasard.nextInt(this.nombreimages);
			}
			else{
				this.num_image_courante++;
				if (this.num_image_courante >= this.nombreimages)
					if (boucle)
						this.num_image_courante = 0;
					else {
						this.num_image_courante--;
					}
			}
	    }
		if (e.getActionCommand()=="avant") {
			if (this.aleatoire){
				this.num_image_courante = this.hasard.nextInt(this.nombreimages);
			}
			else{
				this.num_image_courante--;
				if (this.num_image_courante < 0)
					if (boucle)
						this.num_image_courante = this.nombreimages-1;
					else {
						this.num_image_courante++;
					}
			}
		}
		if (e.getActionCommand()=="debut") 
			this.num_image_courante = 0;

		if (e.getActionCommand()=="fin") 
			this.num_image_courante = this.nombreimages-1;
		
		this.repaint();
} 
	
	public void paintComponent(Graphics g)
	  { int tailleX, tailleY;
	  
	    super.paintComponent(g);
	    // Centrage de l'image
	    tailleX = this.tabImages.elementAt(this.num_image_courante).getWidth(this);
	    tailleY = this.tabImages.elementAt(this.num_image_courante).getHeight(this);
	    g.drawImage(this.tabImages.elementAt(this.num_image_courante), 
	    		(this.tailleJPanelX-tailleX)/2, (this.tailleJPanelY-tailleY)/2, this);
	  }

}
