mis a jour selon ma comprehenssion
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -3,7 +3,6 @@ import fr.iutfbleau.sae.mhuffman.*;
|
|||||||
import fr.iutfbleau.sae.mpif.PIFWriter;
|
import fr.iutfbleau.sae.mpif.PIFWriter;
|
||||||
import fr.iutfbleau.sae.mpif.Pixel;
|
import fr.iutfbleau.sae.mpif.Pixel;
|
||||||
import fr.iutfbleau.sae.mpif.RGBImage;
|
import fr.iutfbleau.sae.mpif.RGBImage;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -185,30 +184,74 @@ public class ConverterController {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Gere la sauvegarde via le bouton de l'interface.
|
* Gere la sauvegarde via le bouton de l'interface.
|
||||||
* Si un chemin de sortie est defini, sauvegarde directement.
|
* Si un chemin de sortie est defini, sauvegarde directement vers ce chemin.
|
||||||
* Sinon, ouvre un selecteur de fichier pour que l'utilisateur choisisse
|
* Sinon, ouvre un selecteur de fichier pour que l'utilisateur choisisse
|
||||||
* l'emplacement de sauvegarde.
|
* l'emplacement de sauvegarde.
|
||||||
* La sauvegarde est effectuee dans un thread separe pour ne pas bloquer
|
* La sauvegarde est effectuee dans un thread separe pour ne pas bloquer
|
||||||
* l'interface graphique.
|
* l'interface graphique.
|
||||||
*/
|
*/
|
||||||
public void saveViaBtn() {
|
public void saveViaBtn() {
|
||||||
if (outputPath != null) {
|
File fichierSortie;
|
||||||
saveAsPIF(outputPath);
|
|
||||||
GestionErreur.afficherInfo("Fichier sauvegarde avec succes. Chemin : " + outputPath);
|
// pas de chemin fourni, ouvrir JFileChooser
|
||||||
return;
|
if (outputPath == null) {
|
||||||
|
JFileChooser chooser = new JFileChooser();
|
||||||
|
chooser.setDialogTitle("Enregistrer le fichier .pif");
|
||||||
|
|
||||||
|
if (chooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
|
||||||
|
fichierSortie = chooser.getSelectedFile();
|
||||||
|
|
||||||
|
// Verifier et corriger l'extension
|
||||||
|
fichierSortie = verifierExtensionPIF(fichierSortie);
|
||||||
|
|
||||||
|
ThreadSauvegardePIF thread = new ThreadSauvegardePIF(this, fichierSortie);
|
||||||
|
thread.start();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
// chemin fourni, sauvegarder directement
|
||||||
|
else {
|
||||||
|
fichierSortie = new File(outputPath);
|
||||||
|
|
||||||
// Sinon JFileChooser
|
// Verifier et corriger l'extension
|
||||||
JFileChooser chooser = new JFileChooser();
|
fichierSortie = verifierExtensionPIF(fichierSortie);
|
||||||
chooser.setDialogTitle("Enregistrer le fichier .pif");
|
|
||||||
|
|
||||||
if (chooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
|
ThreadSauvegardePIF thread = new ThreadSauvegardePIF(this, fichierSortie);
|
||||||
File fichierSelectionne = chooser.getSelectedFile();
|
|
||||||
ThreadSauvegardePIF thread = new ThreadSauvegardePIF(this, fichierSelectionne);
|
|
||||||
thread.start();
|
thread.start();
|
||||||
|
|
||||||
|
// Je retire le bouton apres le clic
|
||||||
|
fen.removeSaveButton();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verifie et corrige l'extension du fichier pour qu'elle soit .pif en minuscules.
|
||||||
|
* Si le fichier a une extension .PIF en majuscules, elle est remplacee.
|
||||||
|
* Si le fichier n'a pas d'extension .pif, elle est ajoutee.
|
||||||
|
*
|
||||||
|
* @param fichier le fichier a verifier
|
||||||
|
* @return le fichier avec l'extension .pif correcte
|
||||||
|
*/
|
||||||
|
private File verifierExtensionPIF(File fichier) {
|
||||||
|
String chemin = fichier.getAbsolutePath();
|
||||||
|
String cheminMinuscule = chemin.toLowerCase();
|
||||||
|
|
||||||
|
// Si le fichier se termine par .pif (en minuscules), OK
|
||||||
|
if (chemin.endsWith(".pif")) {
|
||||||
|
return fichier;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Si le fichier se termine par .PIF, .Pif, etc., remplacer par .pif
|
||||||
|
if (cheminMinuscule.endsWith(".pif")) {
|
||||||
|
// Enlever les 4 derniers caracteres (.PIF, .Pif, etc.)
|
||||||
|
chemin = chemin.substring(0, chemin.length() - 4);
|
||||||
|
// Ajouter .pif en minuscules
|
||||||
|
return new File(chemin + ".pif");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sinon, ajouter .pif
|
||||||
|
return new File(chemin + ".pif");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Lance le processus complet de conversion d'une image au format PIF.
|
* Lance le processus complet de conversion d'une image au format PIF.
|
||||||
* Etapes :
|
* Etapes :
|
||||||
@@ -247,14 +290,7 @@ public class ConverterController {
|
|||||||
computeHuffman();
|
computeHuffman();
|
||||||
computeCanonical();
|
computeCanonical();
|
||||||
|
|
||||||
// Sauvegarder : si un second argument est donne, sauvegarde automatique
|
fen.addSaveButton(this);
|
||||||
if (this.outputPath != null) {
|
|
||||||
this.saveAsPIF(this.outputPath);
|
|
||||||
GestionErreur.afficherInfo("Fichier sauvegarde automatiquement : " + this.outputPath);
|
|
||||||
} else {
|
|
||||||
// Pas de deuxieme argument : ajouter un bouton pour choisir avec un JFileChooser
|
|
||||||
fen.addSaveButton(this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ public class ConverterWindow extends JFrame {
|
|||||||
private ImagePreviewPanel imagePreviewPanel;
|
private ImagePreviewPanel imagePreviewPanel;
|
||||||
private FrequencyTablePanel frequencyTablePanel;
|
private FrequencyTablePanel frequencyTablePanel;
|
||||||
private CodeTablePanel codeTablePanel;
|
private CodeTablePanel codeTablePanel;
|
||||||
|
private JPanel bottomPanel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructeur de la fenêtre du convertisseur.
|
* Constructeur de la fenêtre du convertisseur.
|
||||||
@@ -109,7 +110,7 @@ public class ConverterWindow extends JFrame {
|
|||||||
ExportButtonListener listener = new ExportButtonListener(controller);
|
ExportButtonListener listener = new ExportButtonListener(controller);
|
||||||
saveBtn.addActionListener(listener);
|
saveBtn.addActionListener(listener);
|
||||||
|
|
||||||
JPanel bottomPanel = new JPanel();
|
this.bottomPanel = new JPanel();
|
||||||
bottomPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
|
bottomPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
|
||||||
bottomPanel.add(saveBtn);
|
bottomPanel.add(saveBtn);
|
||||||
|
|
||||||
@@ -118,4 +119,17 @@ public class ConverterWindow extends JFrame {
|
|||||||
revalidate();
|
revalidate();
|
||||||
repaint();
|
repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retire le bouton d'export apres la sauvegarde.
|
||||||
|
* Utilise dans le cas ou un chemin de sortie est fourni en argument.
|
||||||
|
*/
|
||||||
|
public void removeSaveButton() {
|
||||||
|
if (bottomPanel != null) {
|
||||||
|
remove(bottomPanel);
|
||||||
|
bottomPanel = null;
|
||||||
|
revalidate();
|
||||||
|
repaint();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,19 @@
|
|||||||
package fr.iutfbleau.sae;
|
package fr.iutfbleau.sae;
|
||||||
|
import java.awt.BorderLayout;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import javax.swing.JDialog;
|
||||||
|
import javax.swing.JLabel;
|
||||||
|
import javax.swing.JProgressBar;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Thread pour sauvegarder un fichier PIF en arriere-plan.
|
* Thread pour sauvegarder un fichier PIF en arriere-plan.
|
||||||
* Permet d'eviter de bloquer l'interface graphique pendant la sauvegarde.
|
* Permet d'eviter de bloquer l'interface graphique pendant la sauvegarde.
|
||||||
|
* Affiche un dialogue de progression pendant la sauvegarde.
|
||||||
*/
|
*/
|
||||||
public class ThreadSauvegardePIF extends Thread {
|
public class ThreadSauvegardePIF extends Thread {
|
||||||
|
|
||||||
private final ConverterController controleur;
|
private ConverterController controleur;
|
||||||
private final File fichier;
|
private File fichier;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construit un nouveau thread de sauvegarde.
|
* Construit un nouveau thread de sauvegarde.
|
||||||
@@ -24,13 +28,36 @@ public class ThreadSauvegardePIF extends Thread {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute la sauvegarde du fichier PIF.
|
* Execute la sauvegarde du fichier PIF.
|
||||||
|
* Affiche un dialogue de progression pendant la sauvegarde.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
// Creer le dialogue de progression
|
||||||
|
JDialog dialogue = new JDialog();
|
||||||
|
dialogue.setTitle("Sauvegarde");
|
||||||
|
dialogue.setModal(false);
|
||||||
|
dialogue.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
|
||||||
|
dialogue.setSize(300, 100);
|
||||||
|
dialogue.setLocationRelativeTo(null);
|
||||||
|
dialogue.setLayout(new BorderLayout(10, 10));
|
||||||
|
|
||||||
|
JLabel label = new JLabel("Sauvegarde en cours...", JLabel.CENTER);
|
||||||
|
dialogue.add(label, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
JProgressBar barre = new JProgressBar();
|
||||||
|
barre.setIndeterminate(true);
|
||||||
|
dialogue.add(barre, BorderLayout.SOUTH);
|
||||||
|
|
||||||
|
dialogue.setVisible(true);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
// Sauvegarder le fichier
|
||||||
controleur.saveAsPIF(fichier.getAbsolutePath());
|
controleur.saveAsPIF(fichier.getAbsolutePath());
|
||||||
|
dialogue.dispose();
|
||||||
GestionErreur.afficherInfo("Fichier sauvegarde avec succes : " + fichier.getName());
|
GestionErreur.afficherInfo("Fichier sauvegarde avec succes : " + fichier.getName());
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
dialogue.dispose();
|
||||||
GestionErreur.afficherErreur("Erreur lors de la sauvegarde : " + e.getMessage());
|
GestionErreur.afficherErreur("Erreur lors de la sauvegarde : " + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user