Refactor et commentaire terminé (Need edit de Typo)

This commit is contained in:
LucasV-IUT
2022-03-10 14:46:23 +01:00
parent 51ee8d1bbe
commit 3b04d0c267
13 changed files with 204 additions and 138 deletions
+2 -2
View File
@@ -51,7 +51,7 @@ public class GestionFenetre {
* (mode Synchronisé) * (mode Synchronisé)
*/ */
public static void nextPages() { public static void nextPages() {
for (Fenetre ihm : FENETRE_LIST) ihm.getPdfPanel().nextPage(); for (Fenetre ihm : FENETRE_LIST) ihm.getPdfPanel().pageSuivante();
} }
/** /**
@@ -59,7 +59,7 @@ public class GestionFenetre {
* (mode Synchronisé) * (mode Synchronisé)
*/ */
public static void previousPages() { public static void previousPages() {
for (Fenetre ihm : FENETRE_LIST) ihm.getPdfPanel().previousPage(); for (Fenetre ihm : FENETRE_LIST) ihm.getPdfPanel().pagePrecedente();
} }
/** /**
+18 -29
View File
@@ -14,7 +14,7 @@ import java.awt.*;
import java.util.ArrayList; import java.util.ArrayList;
/** /**
* TODO commentaires * Gestionnaire de mode Synchonisé ou Séparé
* *
* @author Léo Franch * @author Léo Franch
* @author Lucas Vabre * @author Lucas Vabre
@@ -23,32 +23,23 @@ import java.util.ArrayList;
*/ */
public class GestionMode { public class GestionMode {
/** /** Défini si le mode séparé est activé ou non */
* Défini le mode actif :
* true -> Mode Séparé
* false -> Mode Synchronisé
*/
private static boolean modeSepare; private static boolean modeSepare;
/** /** Liste les MenuItems de type NouvelleFenetre de l'application */
* TODO private static final ArrayList<NouvelleFenetre> nouvelleFenetreList = new ArrayList<>();
*/
/** Liste les MenuItem de type ModeSeparé de l'application */
private static final ArrayList<ModeSepare> modeSepareList = new ArrayList<>(); private static final ArrayList<ModeSepare> modeSepareList = new ArrayList<>();
/** /** Liste les MenuItem de type ModeSynchronise de l'application */
* TODO
*/
private static final ArrayList<ModeSynchronise> modeSynchroniseList = new ArrayList<>(); private static final ArrayList<ModeSynchronise> modeSynchroniseList = new ArrayList<>();
/** /**
* TODO * Référence les elements NouvelleFenetre, ModeSepare, ModeSynchronise lors de la création d'une nouvelle fenêtre
*/ * @param fenetre Référence du MenuItem NouvelleFenetre de la fenêtre crée
private static final ArrayList<NouvelleFenetre> nouvelleFenetreList = new ArrayList<>(); * @param separe Référence du MenuItem ModeSepare de la fenêtre crée
* @param synchronise Référence du MenuItem ModeSynchronise de la fenêtre crée
/**
* TODO
* @param separe
* @param synchronise
*/ */
@SuppressWarnings("SpellCheckingInspection") @SuppressWarnings("SpellCheckingInspection")
public static void addItem(NouvelleFenetre fenetre, ModeSepare separe, ModeSynchronise synchronise) { public static void addItem(NouvelleFenetre fenetre, ModeSepare separe, ModeSynchronise synchronise) {
@@ -58,16 +49,14 @@ public class GestionMode {
updateMode(); updateMode();
} }
/** /** @return true si le mode séparé est activé, false sinon */
* TODO
* @return
*/
public static boolean isModeSepare() { public static boolean isModeSepare() {
return modeSepare; return modeSepare;
} }
/** /**
* TODO * Change de mode
* @param mode true pour le mode séparé, false pour le mode synchronisé
*/ */
public static void setModeSepare(boolean mode) { public static void setModeSepare(boolean mode) {
modeSepare = mode; modeSepare = mode;
@@ -75,7 +64,7 @@ public class GestionMode {
} }
/** /**
* TODO * Met a jour dans toutes les fenêtres ouvertes la checkbox du mode selectionné
*/ */
private static void updateMode() { private static void updateMode() {
for (int i = 0; i < modeSepareList.size() ; i++) { for (int i = 0; i < modeSepareList.size() ; i++) {
@@ -85,9 +74,9 @@ public class GestionMode {
} }
/** /**
* TODO * Grise le boutton "Nouvelle Fenêtre" de toute les fenêtres de l'application
*/ */
public static void desactiverFenetre() { public static void desactiverBtnNouvelleFenetre() {
for (NouvelleFenetre item : nouvelleFenetreList) { for (NouvelleFenetre item : nouvelleFenetreList) {
item.setEnabled(false); item.setEnabled(false);
item.setBackground(Color.GRAY); item.setBackground(Color.GRAY);
@@ -95,7 +84,7 @@ public class GestionMode {
} }
/** /**
* TODO * Dégrise le boutton "Nouvelle Fenêtre" de toutes les fenêtres de l'application
*/ */
public static void activerBtnNouvelleFenetre() { public static void activerBtnNouvelleFenetre() {
for (NouvelleFenetre item : nouvelleFenetreList) { for (NouvelleFenetre item : nouvelleFenetreList) {
+1 -1
View File
@@ -34,9 +34,9 @@ public class MenuMode extends JMenu {
super("Mode"); super("Mode");
/* Crée les différentes options */ /* Crée les différentes options */
NouvelleFenetre nouvelleFenetre = new NouvelleFenetre(parent);
ModeSepare modeSepare = new ModeSepare(); ModeSepare modeSepare = new ModeSepare();
ModeSynchronise modeSynchronise = new ModeSynchronise(); ModeSynchronise modeSynchronise = new ModeSynchronise();
NouvelleFenetre nouvelleFenetre = new NouvelleFenetre(parent);
/* Les ajoute au gestionnaire des modes */ /* Les ajoute au gestionnaire des modes */
GestionMode.addItem(nouvelleFenetre, modeSepare, modeSynchronise); GestionMode.addItem(nouvelleFenetre, modeSepare, modeSynchronise);
@@ -37,6 +37,6 @@ public class NouvelleFenetre extends MenuItem {
GestionFenetre.newIhmPdf(); GestionFenetre.newIhmPdf();
/* Désactive le bouton si on a atteint la limite des affichages */ /* Désactive le bouton si on a atteint la limite des affichages */
if (GestionFenetre.FENETRE_LIST.size() == GestionFenetre.NB_MAX_PDF) GestionMode.desactiverFenetre(); if (GestionFenetre.FENETRE_LIST.size() == GestionFenetre.NB_MAX_PDF) GestionMode.desactiverBtnNouvelleFenetre();
} }
} }
@@ -37,7 +37,7 @@ public class PagePrecedente extends MenuItem {
@Override @Override
protected void action(ActionEvent evt) { protected void action(ActionEvent evt) {
if (GestionMode.isModeSepare()) { if (GestionMode.isModeSepare()) {
parent.getPdfPanel().previousPage(); parent.getPdfPanel().pagePrecedente();
} else { } else {
GestionFenetre.previousPages(); GestionFenetre.previousPages();
} }
@@ -36,7 +36,7 @@ public class PageSuivante extends MenuItem {
@Override @Override
protected void action(ActionEvent evt) { protected void action(ActionEvent evt) {
if (GestionMode.isModeSepare()) { if (GestionMode.isModeSepare()) {
parent.getPdfPanel().nextPage(); parent.getPdfPanel().pageSuivante();
} else { } else {
GestionFenetre.nextPages(); GestionFenetre.nextPages();
} }
@@ -31,7 +31,7 @@ public class ZoomDefaut extends MenuItem {
@Override @Override
protected void action(ActionEvent evt) { protected void action(ActionEvent evt) {
parent.getPdfPanel().updateScaleZoom(1.0f); parent.getPdfPanel().setZoom(1.0f);
parent.validate(); parent.validate();
} }
} }
@@ -31,7 +31,7 @@ public class ZoomMoins extends MenuItem {
@Override @Override
protected void action(ActionEvent evt) { protected void action(ActionEvent evt) {
parent.getPdfPanel().updateScaleZoom(0.5f); parent.getPdfPanel().setZoom(0.5f);
parent.validate(); parent.validate();
} }
} }
@@ -31,7 +31,7 @@ public class ZoomPlus extends MenuItem {
@Override @Override
protected void action(ActionEvent evt) { protected void action(ActionEvent evt) {
parent.getPdfPanel().updateScaleZoom(1.5f); parent.getPdfPanel().setZoom(1.5f);
parent.validate(); parent.validate();
} }
} }
+17 -41
View File
@@ -14,7 +14,7 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
/** /**
* TODO commentaires * Classe qui représente un document PDF ouvert, elle permet de créer des images des pages
* *
* @author Léo Franch * @author Léo Franch
* @author Lucas Vabre * @author Lucas Vabre
@@ -23,23 +23,23 @@ import java.io.IOException;
*/ */
public class DocumentPdf { public class DocumentPdf {
/** TODO */ /** Le document PDF chargé avec PdfBox */
private final PDDocument document; private final PDDocument document;
/** TODO */ /** L'outils de rendus de PdfBox */
private PDFRenderer renderer; private PDFRenderer renderer;
/** TODO */ /** La largueur par défaut de la page courrante */
private int minWidth; private int minWidth;
/** TODO */ /** La longueur par défaut de la page courrante */
private int minHeight; private int minHeight;
/** /**
* TODO * Charge un nouveau document PDF
* *
* @param file * @param file Le fichier PDF à charger
* @throws IOException * @throws IOException Si le document passé en argument est illisible
*/ */
public DocumentPdf(File file) throws IOException { public DocumentPdf(File file) throws IOException {
document = PDDocument.load(file); document = PDDocument.load(file);
@@ -48,53 +48,29 @@ public class DocumentPdf {
minHeight = -1; minHeight = -1;
} }
/** /** @return La largueur par défaut de la page courrante */
* TODO
*/
public int getMinWidth() { public int getMinWidth() {
return minWidth; return minWidth;
} }
/** /** @return La longueur par défaut de la page courrante */
* TODO
*/
public int getMinHeight() { public int getMinHeight() {
return minHeight; return minHeight;
} }
/** /** @return Le nombre de pages du document */
* TODO
*
* @return
*/
public int getNbPages() { public int getNbPages() {
return document.getNumberOfPages(); return document.getNumberOfPages();
} }
/** /**
* TODO * Crée une image de la page voulue
*/
public BufferedImage renderPage(int pageIndex) throws IOException {
return renderPage(pageIndex, 1.0f);
}
/**
* TODO
*/
public BufferedImage setScale(float scale) {
try {
return renderPage(0, scale);
} catch (IOException ignored) {}
return null;
}
/**
* TODO
* *
* @param pageIndex * @param pageIndex Numero de la page désirée (compris entre 0 et le nombre maximal de pages)
* @param scale * @param scale Taille de la page (La qualité de l'image est amélioré suivant cette valeur)
* @return * @return Une image de la page demandée
* @throws IOException * @throws IOException Si l'image de rendu n'as pas pu être créée
* @throws IllegalArgumentException Si le numero de page est invalide (n'est pas compris entre 0 et le nombre maximal de pages)
*/ */
public BufferedImage renderPage(int pageIndex, float scale) throws IOException { public BufferedImage renderPage(int pageIndex, float scale) throws IOException {
if (pageIndex < 0 || pageIndex >= this.getNbPages()) { if (pageIndex < 0 || pageIndex >= this.getNbPages()) {
+66 -52
View File
@@ -25,21 +25,39 @@ import java.io.IOException;
*/ */
public class PdfPanel extends JPanel { public class PdfPanel extends JPanel {
/* Données */ /** Le numéro de la page courrante */
private int currentPage; private int numeroPage;
private float scaleSizing;
private float scaleZoom; /** Valeur multiplicative de la taille de la page */
private float taille;
/** Valeur multiplicative du zoom */
private float zoom;
/** Défini si la page est en pleine largeur ou non */
private boolean pleineLargeur; private boolean pleineLargeur;
/** Bloqueur qui défini si le processeur est entrain de générer une nouvelle page */
private boolean processing; private boolean processing;
/* Chargeur de Pdf */ /** Le document PDF chargé */
private DocumentPdf pdfLoader; private DocumentPdf pdfLoader;
/* Interface */ /* Interface */
/** La zone de saisie du numéro de page */
private final JTextField indexPageInput; private final JTextField indexPageInput;
/** Le texte définissant le nombre max de page */
private final JLabel maxPageLabel; private final JLabel maxPageLabel;
/** Element scrollable qui contiens la page */
private final JScrollPane scrollPane; private final JScrollPane scrollPane;
/** Zone de l'élément scollable quio est visible */
private final JViewport viewport; private final JViewport viewport;
/** Label qui contiens l'image de la page affichée */
private final JLabel page; private final JLabel page;
/** /**
@@ -48,9 +66,9 @@ public class PdfPanel extends JPanel {
public PdfPanel() { public PdfPanel() {
super(new BorderLayout()); super(new BorderLayout());
scaleSizing = 0.0f; taille = 0.0f;
scaleZoom = 1.0f; zoom = 1.0f;
currentPage = 0; numeroPage = 0;
processing = false; processing = false;
pleineLargeur = false; pleineLargeur = false;
@@ -90,8 +108,6 @@ public class PdfPanel extends JPanel {
@Override @Override
public void keyPressed(KeyEvent e) { public void keyPressed(KeyEvent e) {
super.keyPressed(e); super.keyPressed(e);
String value = indexPageInput.getText();
int l = value.length();
indexPageInput.setEditable(e.getKeyChar() >= '0' && e.getKeyChar() <= '9'); indexPageInput.setEditable(e.getKeyChar() >= '0' && e.getKeyChar() <= '9');
} }
}); });
@@ -101,10 +117,10 @@ public class PdfPanel extends JPanel {
String saisie = indexPageInput.getText(); String saisie = indexPageInput.getText();
try { try {
int index = Integer.parseInt(saisie); int index = Integer.parseInt(saisie);
if (isPageValide(index - 1)) setPage(index - 1); if (isPageValide(index - 1)) changerPage(index - 1);
else throw new Exception(); else throw new Exception();
} catch (Exception f) { } catch (Exception f) {
indexPageInput.setText(Integer.toString(currentPage +1)); indexPageInput.setText(Integer.toString(numeroPage +1));
} }
}); });
@@ -113,31 +129,37 @@ public class PdfPanel extends JPanel {
@Override @Override
public void componentResized(ComponentEvent e) { public void componentResized(ComponentEvent e) {
super.componentResized(e); super.componentResized(e);
resize(); changerTaille();
} }
}); });
} }
/** /**
* Action lors du clic sur le boutton suivant
* Affiche la page suivante du ou des documents (suivant si le mode synchronisé est activé)
*
* @param evt Écouteur d'évènement * @param evt Écouteur d'évènement
*/ */
private void btnSuivantAction(ActionEvent evt) { private void btnSuivantAction(ActionEvent evt) {
if (GestionMode.isModeSepare()) nextPage(); if (GestionMode.isModeSepare()) pageSuivante();
else GestionFenetre.nextPages(); else GestionFenetre.nextPages();
} }
/** /**
* Action lors du clic sur le boutton precedent
* Affiche la page précédente du ou des documents (suivant si le mode synchronisé est activé)
*
* @param evt Écouteur d'évènement * @param evt Écouteur d'évènement
*/ */
private void btnPrecedentAction(ActionEvent evt) { private void btnPrecedentAction(ActionEvent evt) {
if (GestionMode.isModeSepare()) previousPage(); if (GestionMode.isModeSepare()) pagePrecedente();
else GestionFenetre.previousPages(); else GestionFenetre.previousPages();
} }
/** /**
* TODO * Change la taille de la page courrante suivant si fonction Pleine Largeur est activé ou non
*/ */
public void resize() { public void changerTaille() {
if (pdfLoader == null || processing) return; if (pdfLoader == null || processing) return;
if (pleineLargeur) { if (pleineLargeur) {
@@ -145,23 +167,21 @@ public class PdfPanel extends JPanel {
float scrollpaneWidth = scrollPane.getVerticalScrollBar().getWidth(); float scrollpaneWidth = scrollPane.getVerticalScrollBar().getWidth();
float pdfMinWidth = pdfLoader.getMinWidth(); float pdfMinWidth = pdfLoader.getMinWidth();
scaleSizing = (viewportWidth - scrollpaneWidth) / pdfMinWidth - scaleZoom; taille = (viewportWidth - scrollpaneWidth) / pdfMinWidth - zoom;
} else { } else {
float viewportHeight = viewport.getHeight(); float viewportHeight = viewport.getHeight();
float scrollpaneHeight = scrollPane.getVerticalScrollBar().getHeight(); float scrollpaneHeight = scrollPane.getVerticalScrollBar().getHeight();
float pdfMinHeight = pdfLoader.getMinHeight(); float pdfMinHeight = pdfLoader.getMinHeight();
scaleSizing = (viewportHeight - scrollpaneHeight) / pdfMinHeight - scaleZoom; taille = (viewportHeight - scrollpaneHeight) / pdfMinHeight - zoom;
} }
updateScaleSizing(scaleSizing); setTaille(taille);
} }
/** /** @param pleineLargeur booléen qui défini l'état du mode pleine largeur */
* @param pleineLargeur booléen qui défini l'état du mode pleine largeur
*/
public void setPleineLargeur(boolean pleineLargeur) { public void setPleineLargeur(boolean pleineLargeur) {
this.pleineLargeur = pleineLargeur; this.pleineLargeur = pleineLargeur;
resize(); changerTaille();
} }
/** /**
@@ -185,15 +205,13 @@ public class PdfPanel extends JPanel {
public boolean chargerPdf(File pdfFile) { public boolean chargerPdf(File pdfFile) {
try { try {
setPdfLoader(new DocumentPdf(pdfFile)); setPdfLoader(new DocumentPdf(pdfFile));
setPage(0); changerPage(0);
return true; return true;
} catch (IOException ignored) {} } catch (IOException ignored) {}
return false; return false;
} }
/** /** @param pdfLoader un nouveau document PDF à affecter à la fenêtre */
* @param pdfLoader un nouveau document PDF à affecter à la fenêtre
*/
public void setPdfLoader(DocumentPdf pdfLoader) { public void setPdfLoader(DocumentPdf pdfLoader) {
this.pdfLoader = pdfLoader; this.pdfLoader = pdfLoader;
} }
@@ -210,27 +228,27 @@ public class PdfPanel extends JPanel {
/* Efface l'image de la page */ /* Efface l'image de la page */
page.setIcon(null); page.setIcon(null);
currentPage = 0; numeroPage = 0;
/* Interface Vide */ /* Interface Vide */
indexPageInput.setText(""); indexPageInput.setText("");
maxPageLabel.setText("/ -"); maxPageLabel.setText("/ -");
/* Efface les données relatives au zoom */ /* Efface les données relatives au zoom */
scaleSizing = 0.0f; taille = 0.0f;
scaleZoom = 1.0f; zoom = 1.0f;
validate(); validate();
} }
/** /**
* Change la taille de la page courante * Change la valeur du zoom de la page courante
* *
* @param scale Valeur flottante (1.00f == 100%) * @param scale Valeur flottante (1.00f == 100%)
*/ */
public void updateScaleZoom(float scale) { public void setZoom(float scale) {
scaleZoom = scale; zoom = scale;
setPage(currentPage); changerPage(numeroPage);
} }
/** /**
@@ -238,23 +256,19 @@ public class PdfPanel extends JPanel {
* *
* @param scale Valeur flottante (1.00f == 100%) * @param scale Valeur flottante (1.00f == 100%)
*/ */
private void updateScaleSizing(float scale) { private void setTaille(float scale) {
scaleSizing = scale; taille = scale;
setPage(currentPage); changerPage(numeroPage);
} }
/** /** Affiche la page suivante */
* Affiche la page suivante public void pageSuivante() {
*/ changerPage(numeroPage + 1);
public void nextPage() {
setPage(currentPage + 1);
} }
/** /** Affiche la page suivante */
* Affiche la page suivante public void pagePrecedente() {
*/ changerPage(numeroPage - 1);
public void previousPage() {
setPage(currentPage - 1);
} }
/** /**
@@ -262,14 +276,14 @@ public class PdfPanel extends JPanel {
* *
* @param index Le numéro de la page où l'on veut se rendre * @param index Le numéro de la page où l'on veut se rendre
*/ */
private void setPage(int index) { private void changerPage(int index) {
if (!isPageValide(index)) return; if (!isPageValide(index)) return;
processing = true; processing = true;
try { try {
page.setIcon(new ImageIcon(pdfLoader.renderPage(index, scaleZoom + scaleSizing))); page.setIcon(new ImageIcon(pdfLoader.renderPage(index, zoom + taille)));
currentPage = index; numeroPage = index;
indexPageInput.setText(Integer.toString(currentPage + 1)); indexPageInput.setText(Integer.toString(numeroPage + 1));
maxPageLabel.setText(String.format("/%d", pdfLoader.getNbPages())); maxPageLabel.setText(String.format("/%d", pdfLoader.getNbPages()));
} catch (IOException ignored) {} } catch (IOException ignored) {}
processing = false; processing = false;
@@ -18,7 +18,7 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
/** /**
* Gestionnaire des raccourcis.save claviers de l'application * Gestionnaire des raccourcis claviers de l'application
* *
* @author Léo Franch * @author Léo Franch
* @author Lucas Vabre * @author Lucas Vabre
@@ -27,8 +27,10 @@ import java.util.Map;
*/ */
public class RaccourcisClavier extends JFrame { public class RaccourcisClavier extends JFrame {
/** Le nom du fichier de sauvegarde */
public static final String FICHIER_SAUVEGARDE = "raccourcis.save"; public static final String FICHIER_SAUVEGARDE = "raccourcis.save";
/** Booleen qui garantis l'attribution d'un seul raccourcis à la fois */
public static boolean saisieBloquee; public static boolean saisieBloquee;
/** /**
@@ -37,13 +39,19 @@ public class RaccourcisClavier extends JFrame {
*/ */
public static ArrayList<JMenuItem> listeMenuItems = new ArrayList<>(); public static ArrayList<JMenuItem> listeMenuItems = new ArrayList<>();
/**
* Liste des éléments graphiques (un élément est une ligne) de la fenêtre
*/
public static ArrayList<RaccourcisElement> listeRaccourcisElement = new ArrayList<>(); public static ArrayList<RaccourcisElement> listeRaccourcisElement = new ArrayList<>();
/** /**
* HashMap qui prend en clé le Nom et en valeur une combinaison de touche : le raccourcis.save clavier * HashMap qui prend en clé le Nom du MenuItem et en valeur une combinaison de touche : le raccourcis clavier
*/ */
public static Map<String, KeyStroke> raccourcis = new HashMap<>() {}; public static Map<String, KeyStroke> raccourcis = new HashMap<>() {};
/**
* La liste des noms de MenuItems de l'application
*/
public static String[] LISTE_NOM = { public static String[] LISTE_NOM = {
"Ouvrir", "Ouvrir",
"Fermer", "Fermer",
@@ -62,7 +70,10 @@ public class RaccourcisClavier extends JFrame {
"Modifier Touches" "Modifier Touches"
}; };
public static KeyStroke[] LISTE_RACCOURCIS = { /**
* La liste des raccourcis par défaut
*/
public static KeyStroke[] RACCOURCIS_DEFAUT = {
KeyStroke.getKeyStroke(KeyEvent.VK_O, KeyEvent.CTRL_DOWN_MASK), // Ouvrir KeyStroke.getKeyStroke(KeyEvent.VK_O, KeyEvent.CTRL_DOWN_MASK), // Ouvrir
KeyStroke.getKeyStroke(KeyEvent.VK_F, KeyEvent.CTRL_DOWN_MASK), // Fermer KeyStroke.getKeyStroke(KeyEvent.VK_F, KeyEvent.CTRL_DOWN_MASK), // Fermer
KeyStroke.getKeyStroke(KeyEvent.VK_Q, KeyEvent.CTRL_DOWN_MASK), // Quitter KeyStroke.getKeyStroke(KeyEvent.VK_Q, KeyEvent.CTRL_DOWN_MASK), // Quitter
@@ -80,6 +91,9 @@ public class RaccourcisClavier extends JFrame {
KeyStroke.getKeyStroke(KeyEvent.VK_P, KeyEvent.CTRL_DOWN_MASK), // Modifier Touches KeyStroke.getKeyStroke(KeyEvent.VK_P, KeyEvent.CTRL_DOWN_MASK), // Modifier Touches
}; };
/**
* Crée une nouvelle fenêtre contenant la liste des Raccourcis claviers de l'application ainsi qu'un boutton Raccourcis par défaut qui remet les raccourcis par défaut de l'application
*/
public RaccourcisClavier() { public RaccourcisClavier() {
super("Modification des raccourcis claviers"); super("Modification des raccourcis claviers");
saisieBloquee = false; saisieBloquee = false;
@@ -92,12 +106,14 @@ public class RaccourcisClavier extends JFrame {
/* Creation de la fenêtre */ /* Creation de la fenêtre */
JPanel panel = new JPanel(new GridLayout(raccourcis.size() +1, 1, 10, 5)); JPanel panel = new JPanel(new GridLayout(raccourcis.size() +1, 1, 10, 5));
/* Ajout de tout les raccourcis claviers de l'application dans la fenêtre */
for (String nom : LISTE_NOM) { for (String nom : LISTE_NOM) {
RaccourcisElement raccourcisElement = new RaccourcisElement(nom, raccourcis.get(nom)); RaccourcisElement raccourcisElement = new RaccourcisElement(nom, raccourcis.get(nom));
listeRaccourcisElement.add(raccourcisElement); listeRaccourcisElement.add(raccourcisElement);
panel.add(raccourcisElement); panel.add(raccourcisElement);
} }
/* Ajout du boutton Reset */
JButton btnReset = new JButton("Raccourcis par défaut"); JButton btnReset = new JButton("Raccourcis par défaut");
btnReset.addActionListener(this::actionBtnReset); btnReset.addActionListener(this::actionBtnReset);
panel.add(btnReset); panel.add(btnReset);
@@ -109,6 +125,13 @@ public class RaccourcisClavier extends JFrame {
setVisible(true); setVisible(true);
} }
/**
* Action lors du clic sur le boutton Reset
* Charge les raccourcis par défaut puis les sauvegarde
* Met a jour l'interface
*
* @param evt écouteur d'évènement
*/
private void actionBtnReset(ActionEvent evt) { private void actionBtnReset(ActionEvent evt) {
initialisationFichierRaccourcis(); initialisationFichierRaccourcis();
chargerRaccourcis(); chargerRaccourcis();
@@ -169,8 +192,8 @@ public class RaccourcisClavier extends JFrame {
* et la sauvegarde * et la sauvegarde
*/ */
private static void initialisationFichierRaccourcis() { private static void initialisationFichierRaccourcis() {
for (int i = 0; i < LISTE_NOM.length && i < LISTE_RACCOURCIS.length; i++) { for (int i = 0; i < LISTE_NOM.length && i < RACCOURCIS_DEFAUT.length; i++) {
raccourcis.put(LISTE_NOM[i], LISTE_RACCOURCIS[i]); raccourcis.put(LISTE_NOM[i], RACCOURCIS_DEFAUT[i]);
} }
sauvegarderRaccourcis(); sauvegarderRaccourcis();
} }
@@ -1,17 +1,46 @@
/*
* RaccourcisElement.java 10/03/2022
* IUT Rodez 2021-2022, INFO 2
* Pas de copyright, aucun droits
*/
package lecteur_pdf.raccourcisClavier; package lecteur_pdf.raccourcisClavier;
import lecteur_pdf.Popup;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.awt.event.KeyListener; import java.awt.event.KeyListener;
/**
* Element de raccourcis qui définit un raccourcis pour une propriété de l'application
*
* @author Léo Franch
* @author Lucas Vabre
* @author Noé Villeneuve
* @author Tristan Nogaret
*/
public class RaccourcisElement extends JPanel { public class RaccourcisElement extends JPanel {
/** Le nom du MenuItem */
private final String nom; private final String nom;
/** Le boutton qui contiens en valeur la séquence de touches correspondant au raccourcis du MenuItem de l'application */
private final JButton btnRaccourcis; private final JButton btnRaccourcis;
/** Le raccourcis clavier */
private KeyStroke raccourcis; private KeyStroke raccourcis;
/**
* Crée un nouveau JPanel conportant une ligne et deux colonnes
* Dans la première colonne on trouve un Label qui défini le MenuItem
* Dans la seconde colonne on trouve le boutton pour éditer le raccourcis clavier
*
* @param nom Le nom du MenuItem ciblé
* @param raccourcis Le raccourcis clavier actuel du MenuItem ciblé
*/
public RaccourcisElement(String nom, KeyStroke raccourcis) { public RaccourcisElement(String nom, KeyStroke raccourcis) {
super(new GridLayout(1, 2)); super(new GridLayout(1, 2));
@@ -28,6 +57,11 @@ public class RaccourcisElement extends JPanel {
btnRaccourcis.addActionListener(this::action); btnRaccourcis.addActionListener(this::action);
} }
/**
* Action lors du clic sur le boutton d'édition du raccourcis
*
* @param evt écouteur d'évènement
*/
public void action(ActionEvent evt) { public void action(ActionEvent evt) {
if (!RaccourcisClavier.saisieBloquee) { if (!RaccourcisClavier.saisieBloquee) {
RaccourcisClavier.saisieBloquee = true; RaccourcisClavier.saisieBloquee = true;
@@ -35,7 +69,10 @@ public class RaccourcisElement extends JPanel {
btnRaccourcis.addKeyListener(new KeyListener() { btnRaccourcis.addKeyListener(new KeyListener() {
/** Valeur qui permet de définir si une touche n'est pas reconnue */
private static final int INDETERMINATE = -1; private static final int INDETERMINATE = -1;
/** La valeur de la touche pressé precedament */
private int previousKeyPressed = INDETERMINATE; private int previousKeyPressed = INDETERMINATE;
@Override @Override
@@ -46,7 +83,7 @@ public class RaccourcisElement extends JPanel {
&& !isMaskValide(evt.getKeyCode())) { && !isMaskValide(evt.getKeyCode())) {
KeyStroke ks = KeyStroke.getKeyStroke(evt.getKeyCode(), getMask(previousKeyPressed)); KeyStroke ks = KeyStroke.getKeyStroke(evt.getKeyCode(), getMask(previousKeyPressed));
System.out.println(ks);
/* Vérifie que ce raccourci clavier n'existe pas */ /* Vérifie que ce raccourci clavier n'existe pas */
if (!RaccourcisClavier.raccourcis.containsValue(ks)) { if (!RaccourcisClavier.raccourcis.containsValue(ks)) {
btnRaccourcis.setText(getMaskString(previousKeyPressed) + " + " + ks.toString().split(" ")[2]); btnRaccourcis.setText(getMaskString(previousKeyPressed) + " + " + ks.toString().split(" ")[2]);
@@ -56,7 +93,10 @@ public class RaccourcisElement extends JPanel {
RaccourcisClavier.affecterRaccourcis(); RaccourcisClavier.affecterRaccourcis();
RaccourcisClavier.sauvegarderRaccourcis(); RaccourcisClavier.sauvegarderRaccourcis();
} else { } else {
// TODO Erreur cette combinaison de touche est deja utilisé final String TITRE_ERREUR = "Erreur raccourcis";
final String MESSAGE_ERREUR = "Le raccourcis que vous venez de réaliser est déja affecté à une autre fonctionnalité";
Popup.errorPopup(btnRaccourcis, TITRE_ERREUR, MESSAGE_ERREUR);
btnRaccourcis.setText(modifierToString(raccourcis.getModifiers()) + " + " + (char)raccourcis.getKeyCode()); btnRaccourcis.setText(modifierToString(raccourcis.getModifiers()) + " + " + (char)raccourcis.getKeyCode());
} }
@@ -77,6 +117,11 @@ public class RaccourcisElement extends JPanel {
return 16 <= maskValue && maskValue <= 18; return 16 <= maskValue && maskValue <= 18;
} }
/**
* Methode outils qui permet de convertir la valeur tapée en KeyEvent
* @param maskValue Valeur de masque tapé (controle, shift ou alt)
* @return Le KeyEvent correspondant
*/
private int getMask(int maskValue) { private int getMask(int maskValue) {
return switch (maskValue) { return switch (maskValue) {
case 16 -> KeyEvent.SHIFT_DOWN_MASK; case 16 -> KeyEvent.SHIFT_DOWN_MASK;
@@ -85,6 +130,11 @@ public class RaccourcisElement extends JPanel {
}; };
} }
/**
* Méthode outils qui permet de convertir la valeur tapée en Chaine de caractère
* @param maskValue Valeur de masque tapé (controle, shift ou alt)
* @return La chaine de caractère correspondante
*/
private String getMaskString(int maskValue) { private String getMaskString(int maskValue) {
return switch (maskValue) { return switch (maskValue) {
case 16 -> "SHIFT"; case 16 -> "SHIFT";
@@ -96,6 +146,11 @@ public class RaccourcisElement extends JPanel {
} }
} }
/**
* Convertis un Modifieur en chaine de caractère
* @param modifier valeur du modifieur (Element d'un KeyStroke != KeyEvent)
* @return La chaine de caractère correspondante
*/
private String modifierToString(int modifier) { private String modifierToString(int modifier) {
return switch (modifier) { return switch (modifier) {
case 65 -> "SHIFT"; case 65 -> "SHIFT";
@@ -104,10 +159,19 @@ public class RaccourcisElement extends JPanel {
}; };
} }
/**
* Convertis un raccourcis en chaine de caractère
* @param keyStroke Le raccourcis en question
* @return La chaine de caractère construite à partir du raccourcis
*/
private String keystrokeToString(KeyStroke keyStroke) { private String keystrokeToString(KeyStroke keyStroke) {
return modifierToString(keyStroke.getModifiers()) + " + " + keyStroke.toString().split(" ")[2]; return modifierToString(keyStroke.getModifiers()) + " + " + keyStroke.toString().split(" ")[2];
} }
/**
* Change le raccourcis (visuellement)
* @param raccourcis Nouveau raccourcis
*/
public void setRaccourcis(KeyStroke raccourcis) { public void setRaccourcis(KeyStroke raccourcis) {
this.raccourcis = raccourcis; this.raccourcis = raccourcis;
this.btnRaccourcis.setText(keystrokeToString(raccourcis)); this.btnRaccourcis.setText(keystrokeToString(raccourcis));