import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

/**
 * Projet :PaintRevolution
 * <p>Titre :JpegEnregistreur.java </p>
 * <p>Description :Classe permettant d'enregistrer le JPanel en format image</p>
 * <p>Copyright : Copyright (c) 2005</p>
 * <p>Société : IUT CHARLEMAGNE NANCY II</p>
 * @author VIGNERON GEOFFROY && GANGANELLI DORIAN
 * @version 3.0
 */
public class JpegEnregistreur extends JFileChooser {
    /**
     * la Fenetre principale où se trouve le JFileChooser
     */
    private JFramePrincipale fenetre;
    
    /**
     * le panel principale contenant le panel dessinable
     */
    private PanelJFramePrincipale pj;
    
    /**
     * Constructeur de la classe créant un JFileChooser et
     * enregistrant le panel en image
     * @param frame fenetre principale contenant le menu appelant la fonction
     * @param jp le panel principale contenant le panel principale
     */
    public JpegEnregistreur(JFramePrincipale frame,PanelJFramePrincipale jp){
        fenetre=frame;
        pj=jp;
        DessinFigures dessin=pj.getDessin();
        
        //defini tous les composants du JFileChooser
        ExtensionFichier jpg = new ExtensionFichier(new String[] { "jpeg", "jpg" },"Image JPEG (*.jpeg, *.jpg)");
        this.addChoosableFileFilter(jpg);
        this.setDialogTitle("Enregistrer en photo");
        this.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
        int test = showSaveDialog(fenetre);
        if (test == JFileChooser.APPROVE_OPTION) {
            File fich = getSelectedFile();
            
            //fixe l'extension du fichier
            fich = new File(fich.getPath() + ".jpg");
            
            //image en fonction du panel dessinable
            BufferedImage image = new BufferedImage(dessin.getWidth(),dessin.getHeight(), BufferedImage.TYPE_BYTE_INDEXED);
            Graphics2D graph = image.createGraphics();
            dessin.paintAll(graph);
            
            //traitement de l'enregistrement en format d'image
            try {
                FileOutputStream fichier = new FileOutputStream(fich);
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fichier);
                encoder.encode(image);
                fichier.close();
                frame.setTitle("PaintRevolution-"+fich.getName());
                JOptionPane.showMessageDialog(fenetre,"Enregistrement image:"+fich.getPath(),"Enregistement",JOptionPane.INFORMATION_MESSAGE);
            }catch(IOException io){
                JOptionPane.showMessageDialog(fenetre,"Problememe e/s");
            }
        }  
    }
}

