mis a jour selon ma comprehenssion
This commit is contained in:
@@ -3,7 +3,6 @@ import fr.iutfbleau.sae.mhuffman.*;
|
||||
import fr.iutfbleau.sae.mpif.PIFWriter;
|
||||
import fr.iutfbleau.sae.mpif.Pixel;
|
||||
import fr.iutfbleau.sae.mpif.RGBImage;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
@@ -185,30 +184,74 @@ public class ConverterController {
|
||||
|
||||
/**
|
||||
* 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
|
||||
* l'emplacement de sauvegarde.
|
||||
* La sauvegarde est effectuee dans un thread separe pour ne pas bloquer
|
||||
* l'interface graphique.
|
||||
*/
|
||||
public void saveViaBtn() {
|
||||
if (outputPath != null) {
|
||||
saveAsPIF(outputPath);
|
||||
GestionErreur.afficherInfo("Fichier sauvegarde avec succes. Chemin : " + outputPath);
|
||||
return;
|
||||
}
|
||||
File fichierSortie;
|
||||
|
||||
// pas de chemin fourni, ouvrir JFileChooser
|
||||
if (outputPath == null) {
|
||||
JFileChooser chooser = new JFileChooser();
|
||||
chooser.setDialogTitle("Enregistrer le fichier .pif");
|
||||
|
||||
// Sinon JFileChooser
|
||||
JFileChooser chooser = new JFileChooser();
|
||||
chooser.setDialogTitle("Enregistrer le fichier .pif");
|
||||
|
||||
if (chooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
|
||||
File fichierSelectionne = chooser.getSelectedFile();
|
||||
ThreadSauvegardePIF thread = new ThreadSauvegardePIF(this, fichierSelectionne);
|
||||
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);
|
||||
|
||||
// Verifier et corriger l'extension
|
||||
fichierSortie = verifierExtensionPIF(fichierSortie);
|
||||
|
||||
ThreadSauvegardePIF thread = new ThreadSauvegardePIF(this, fichierSortie);
|
||||
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.
|
||||
* Etapes :
|
||||
@@ -247,14 +290,7 @@ public class ConverterController {
|
||||
computeHuffman();
|
||||
computeCanonical();
|
||||
|
||||
// Sauvegarder : si un second argument est donne, sauvegarde automatique
|
||||
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);
|
||||
}
|
||||
fen.addSaveButton(this);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -16,6 +16,7 @@ public class ConverterWindow extends JFrame {
|
||||
private ImagePreviewPanel imagePreviewPanel;
|
||||
private FrequencyTablePanel frequencyTablePanel;
|
||||
private CodeTablePanel codeTablePanel;
|
||||
private JPanel bottomPanel;
|
||||
|
||||
/**
|
||||
* Constructeur de la fenêtre du convertisseur.
|
||||
@@ -109,7 +110,7 @@ public class ConverterWindow extends JFrame {
|
||||
ExportButtonListener listener = new ExportButtonListener(controller);
|
||||
saveBtn.addActionListener(listener);
|
||||
|
||||
JPanel bottomPanel = new JPanel();
|
||||
this.bottomPanel = new JPanel();
|
||||
bottomPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
|
||||
bottomPanel.add(saveBtn);
|
||||
|
||||
@@ -118,4 +119,17 @@ public class ConverterWindow extends JFrame {
|
||||
revalidate();
|
||||
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;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
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.
|
||||
* Permet d'eviter de bloquer l'interface graphique pendant la sauvegarde.
|
||||
* Affiche un dialogue de progression pendant la sauvegarde.
|
||||
*/
|
||||
public class ThreadSauvegardePIF extends Thread {
|
||||
|
||||
private final ConverterController controleur;
|
||||
private final File fichier;
|
||||
private ConverterController controleur;
|
||||
private File fichier;
|
||||
|
||||
/**
|
||||
* Construit un nouveau thread de sauvegarde.
|
||||
@@ -24,13 +28,36 @@ public class ThreadSauvegardePIF extends Thread {
|
||||
|
||||
/**
|
||||
* Execute la sauvegarde du fichier PIF.
|
||||
* Affiche un dialogue de progression pendant la sauvegarde.
|
||||
*/
|
||||
@Override
|
||||
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 {
|
||||
// Sauvegarder le fichier
|
||||
controleur.saveAsPIF(fichier.getAbsolutePath());
|
||||
dialogue.dispose();
|
||||
GestionErreur.afficherInfo("Fichier sauvegarde avec succes : " + fichier.getName());
|
||||
|
||||
} catch (Exception e) {
|
||||
dialogue.dispose();
|
||||
GestionErreur.afficherErreur("Erreur lors de la sauvegarde : " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user