From 3b04d0c267d0fe92a21e53b56da66e109ef61e78 Mon Sep 17 00:00:00 2001 From: LucasV-IUT Date: Thu, 10 Mar 2022 14:46:23 +0100 Subject: [PATCH] =?UTF-8?q?Refactor=20et=20commentaire=20termin=C3=A9=20(N?= =?UTF-8?q?eed=20edit=20de=20Typo)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lecteur_pdf/GestionFenetre.java | 4 +- src/lecteur_pdf/GestionMode.java | 47 +++---- src/lecteur_pdf/menuBar/menu/MenuMode.java | 2 +- .../menuBar/menuItems/NouvelleFenetre.java | 2 +- .../menuBar/menuItems/PagePrecedente.java | 2 +- .../menuBar/menuItems/PageSuivante.java | 2 +- .../menuBar/menuItems/ZoomDefaut.java | 2 +- .../menuBar/menuItems/ZoomMoins.java | 2 +- .../menuBar/menuItems/ZoomPlus.java | 2 +- src/lecteur_pdf/pdf/DocumentPdf.java | 58 +++------ src/lecteur_pdf/pdf/PdfPanel.java | 118 ++++++++++-------- .../raccourcisClavier/RaccourcisClavier.java | 33 ++++- .../raccourcisClavier/RaccourcisElement.java | 68 +++++++++- 13 files changed, 204 insertions(+), 138 deletions(-) diff --git a/src/lecteur_pdf/GestionFenetre.java b/src/lecteur_pdf/GestionFenetre.java index a9b261a..482af1a 100644 --- a/src/lecteur_pdf/GestionFenetre.java +++ b/src/lecteur_pdf/GestionFenetre.java @@ -51,7 +51,7 @@ public class GestionFenetre { * (mode Synchronisé) */ 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é) */ public static void previousPages() { - for (Fenetre ihm : FENETRE_LIST) ihm.getPdfPanel().previousPage(); + for (Fenetre ihm : FENETRE_LIST) ihm.getPdfPanel().pagePrecedente(); } /** diff --git a/src/lecteur_pdf/GestionMode.java b/src/lecteur_pdf/GestionMode.java index 8a41522..84e1919 100644 --- a/src/lecteur_pdf/GestionMode.java +++ b/src/lecteur_pdf/GestionMode.java @@ -14,7 +14,7 @@ import java.awt.*; import java.util.ArrayList; /** - * TODO commentaires + * Gestionnaire de mode Synchonisé ou Séparé * * @author Léo Franch * @author Lucas Vabre @@ -23,32 +23,23 @@ import java.util.ArrayList; */ public class GestionMode { - /** - * Défini le mode actif : - * true -> Mode Séparé - * false -> Mode Synchronisé - */ + /** Défini si le mode séparé est activé ou non */ private static boolean modeSepare; - /** - * TODO - */ + /** Liste les MenuItems de type NouvelleFenetre de l'application */ + private static final ArrayList nouvelleFenetreList = new ArrayList<>(); + + /** Liste les MenuItem de type ModeSeparé de l'application */ private static final ArrayList modeSepareList = new ArrayList<>(); - /** - * TODO - */ + /** Liste les MenuItem de type ModeSynchronise de l'application */ private static final ArrayList modeSynchroniseList = new ArrayList<>(); /** - * TODO - */ - private static final ArrayList nouvelleFenetreList = new ArrayList<>(); - - /** - * TODO - * @param separe - * @param synchronise + * 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 + * @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 */ @SuppressWarnings("SpellCheckingInspection") public static void addItem(NouvelleFenetre fenetre, ModeSepare separe, ModeSynchronise synchronise) { @@ -58,16 +49,14 @@ public class GestionMode { updateMode(); } - /** - * TODO - * @return - */ + /** @return true si le mode séparé est activé, false sinon */ public static boolean isModeSepare() { 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) { 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() { 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) { item.setEnabled(false); 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() { for (NouvelleFenetre item : nouvelleFenetreList) { diff --git a/src/lecteur_pdf/menuBar/menu/MenuMode.java b/src/lecteur_pdf/menuBar/menu/MenuMode.java index 6acb95b..df92ad8 100644 --- a/src/lecteur_pdf/menuBar/menu/MenuMode.java +++ b/src/lecteur_pdf/menuBar/menu/MenuMode.java @@ -34,9 +34,9 @@ public class MenuMode extends JMenu { super("Mode"); /* Crée les différentes options */ + NouvelleFenetre nouvelleFenetre = new NouvelleFenetre(parent); ModeSepare modeSepare = new ModeSepare(); ModeSynchronise modeSynchronise = new ModeSynchronise(); - NouvelleFenetre nouvelleFenetre = new NouvelleFenetre(parent); /* Les ajoute au gestionnaire des modes */ GestionMode.addItem(nouvelleFenetre, modeSepare, modeSynchronise); diff --git a/src/lecteur_pdf/menuBar/menuItems/NouvelleFenetre.java b/src/lecteur_pdf/menuBar/menuItems/NouvelleFenetre.java index d36767f..6cb527a 100644 --- a/src/lecteur_pdf/menuBar/menuItems/NouvelleFenetre.java +++ b/src/lecteur_pdf/menuBar/menuItems/NouvelleFenetre.java @@ -37,6 +37,6 @@ public class NouvelleFenetre extends MenuItem { GestionFenetre.newIhmPdf(); /* 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(); } } \ No newline at end of file diff --git a/src/lecteur_pdf/menuBar/menuItems/PagePrecedente.java b/src/lecteur_pdf/menuBar/menuItems/PagePrecedente.java index 3d4af59..9415b82 100644 --- a/src/lecteur_pdf/menuBar/menuItems/PagePrecedente.java +++ b/src/lecteur_pdf/menuBar/menuItems/PagePrecedente.java @@ -37,7 +37,7 @@ public class PagePrecedente extends MenuItem { @Override protected void action(ActionEvent evt) { if (GestionMode.isModeSepare()) { - parent.getPdfPanel().previousPage(); + parent.getPdfPanel().pagePrecedente(); } else { GestionFenetre.previousPages(); } diff --git a/src/lecteur_pdf/menuBar/menuItems/PageSuivante.java b/src/lecteur_pdf/menuBar/menuItems/PageSuivante.java index f996e2b..8da3b3f 100644 --- a/src/lecteur_pdf/menuBar/menuItems/PageSuivante.java +++ b/src/lecteur_pdf/menuBar/menuItems/PageSuivante.java @@ -36,7 +36,7 @@ public class PageSuivante extends MenuItem { @Override protected void action(ActionEvent evt) { if (GestionMode.isModeSepare()) { - parent.getPdfPanel().nextPage(); + parent.getPdfPanel().pageSuivante(); } else { GestionFenetre.nextPages(); } diff --git a/src/lecteur_pdf/menuBar/menuItems/ZoomDefaut.java b/src/lecteur_pdf/menuBar/menuItems/ZoomDefaut.java index 98cd913..26ad2d1 100644 --- a/src/lecteur_pdf/menuBar/menuItems/ZoomDefaut.java +++ b/src/lecteur_pdf/menuBar/menuItems/ZoomDefaut.java @@ -31,7 +31,7 @@ public class ZoomDefaut extends MenuItem { @Override protected void action(ActionEvent evt) { - parent.getPdfPanel().updateScaleZoom(1.0f); + parent.getPdfPanel().setZoom(1.0f); parent.validate(); } } diff --git a/src/lecteur_pdf/menuBar/menuItems/ZoomMoins.java b/src/lecteur_pdf/menuBar/menuItems/ZoomMoins.java index 9027a85..985d0a0 100644 --- a/src/lecteur_pdf/menuBar/menuItems/ZoomMoins.java +++ b/src/lecteur_pdf/menuBar/menuItems/ZoomMoins.java @@ -31,7 +31,7 @@ public class ZoomMoins extends MenuItem { @Override protected void action(ActionEvent evt) { - parent.getPdfPanel().updateScaleZoom(0.5f); + parent.getPdfPanel().setZoom(0.5f); parent.validate(); } } diff --git a/src/lecteur_pdf/menuBar/menuItems/ZoomPlus.java b/src/lecteur_pdf/menuBar/menuItems/ZoomPlus.java index b072012..207059b 100644 --- a/src/lecteur_pdf/menuBar/menuItems/ZoomPlus.java +++ b/src/lecteur_pdf/menuBar/menuItems/ZoomPlus.java @@ -31,7 +31,7 @@ public class ZoomPlus extends MenuItem { @Override protected void action(ActionEvent evt) { - parent.getPdfPanel().updateScaleZoom(1.5f); + parent.getPdfPanel().setZoom(1.5f); parent.validate(); } } \ No newline at end of file diff --git a/src/lecteur_pdf/pdf/DocumentPdf.java b/src/lecteur_pdf/pdf/DocumentPdf.java index b6896a2..b2b34b2 100644 --- a/src/lecteur_pdf/pdf/DocumentPdf.java +++ b/src/lecteur_pdf/pdf/DocumentPdf.java @@ -14,7 +14,7 @@ import java.io.File; 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 Lucas Vabre @@ -23,23 +23,23 @@ import java.io.IOException; */ public class DocumentPdf { - /** TODO */ + /** Le document PDF chargé avec PdfBox */ private final PDDocument document; - /** TODO */ + /** L'outils de rendus de PdfBox */ private PDFRenderer renderer; - /** TODO */ + /** La largueur par défaut de la page courrante */ private int minWidth; - /** TODO */ + /** La longueur par défaut de la page courrante */ private int minHeight; /** - * TODO + * Charge un nouveau document PDF * - * @param file - * @throws IOException + * @param file Le fichier PDF à charger + * @throws IOException Si le document passé en argument est illisible */ public DocumentPdf(File file) throws IOException { document = PDDocument.load(file); @@ -48,53 +48,29 @@ public class DocumentPdf { minHeight = -1; } - /** - * TODO - */ + /** @return La largueur par défaut de la page courrante */ public int getMinWidth() { return minWidth; } - /** - * TODO - */ + /** @return La longueur par défaut de la page courrante */ public int getMinHeight() { return minHeight; } - /** - * TODO - * - * @return - */ + /** @return Le nombre de pages du document */ public int getNbPages() { return document.getNumberOfPages(); } /** - * TODO - */ - 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 + * Crée une image de la page voulue * - * @param pageIndex - * @param scale - * @return - * @throws IOException + * @param pageIndex Numero de la page désirée (compris entre 0 et le nombre maximal de pages) + * @param scale Taille de la page (La qualité de l'image est amélioré suivant cette valeur) + * @return Une image de la page demandée + * @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 { if (pageIndex < 0 || pageIndex >= this.getNbPages()) { diff --git a/src/lecteur_pdf/pdf/PdfPanel.java b/src/lecteur_pdf/pdf/PdfPanel.java index 915c799..ea8d8fc 100644 --- a/src/lecteur_pdf/pdf/PdfPanel.java +++ b/src/lecteur_pdf/pdf/PdfPanel.java @@ -25,21 +25,39 @@ import java.io.IOException; */ public class PdfPanel extends JPanel { - /* Données */ - private int currentPage; - private float scaleSizing; - private float scaleZoom; + /** Le numéro de la page courrante */ + private int numeroPage; + + /** 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; + + /** Bloqueur qui défini si le processeur est entrain de générer une nouvelle page */ private boolean processing; - /* Chargeur de Pdf */ + /** Le document PDF chargé */ private DocumentPdf pdfLoader; /* Interface */ + + /** La zone de saisie du numéro de page */ private final JTextField indexPageInput; + + /** Le texte définissant le nombre max de page */ private final JLabel maxPageLabel; + + /** Element scrollable qui contiens la page */ private final JScrollPane scrollPane; + + /** Zone de l'élément scollable quio est visible */ private final JViewport viewport; + + /** Label qui contiens l'image de la page affichée */ private final JLabel page; /** @@ -48,9 +66,9 @@ public class PdfPanel extends JPanel { public PdfPanel() { super(new BorderLayout()); - scaleSizing = 0.0f; - scaleZoom = 1.0f; - currentPage = 0; + taille = 0.0f; + zoom = 1.0f; + numeroPage = 0; processing = false; pleineLargeur = false; @@ -90,8 +108,6 @@ public class PdfPanel extends JPanel { @Override public void keyPressed(KeyEvent e) { super.keyPressed(e); - String value = indexPageInput.getText(); - int l = value.length(); indexPageInput.setEditable(e.getKeyChar() >= '0' && e.getKeyChar() <= '9'); } }); @@ -101,10 +117,10 @@ public class PdfPanel extends JPanel { String saisie = indexPageInput.getText(); try { int index = Integer.parseInt(saisie); - if (isPageValide(index - 1)) setPage(index - 1); + if (isPageValide(index - 1)) changerPage(index - 1); else throw new Exception(); } 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 public void componentResized(ComponentEvent 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 */ private void btnSuivantAction(ActionEvent evt) { - if (GestionMode.isModeSepare()) nextPage(); + if (GestionMode.isModeSepare()) pageSuivante(); 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 */ private void btnPrecedentAction(ActionEvent evt) { - if (GestionMode.isModeSepare()) previousPage(); + if (GestionMode.isModeSepare()) pagePrecedente(); 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 (pleineLargeur) { @@ -145,23 +167,21 @@ public class PdfPanel extends JPanel { float scrollpaneWidth = scrollPane.getVerticalScrollBar().getWidth(); float pdfMinWidth = pdfLoader.getMinWidth(); - scaleSizing = (viewportWidth - scrollpaneWidth) / pdfMinWidth - scaleZoom; + taille = (viewportWidth - scrollpaneWidth) / pdfMinWidth - zoom; } else { float viewportHeight = viewport.getHeight(); float scrollpaneHeight = scrollPane.getVerticalScrollBar().getHeight(); 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) { this.pleineLargeur = pleineLargeur; - resize(); + changerTaille(); } /** @@ -185,15 +205,13 @@ public class PdfPanel extends JPanel { public boolean chargerPdf(File pdfFile) { try { setPdfLoader(new DocumentPdf(pdfFile)); - setPage(0); + changerPage(0); return true; } catch (IOException ignored) {} 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) { this.pdfLoader = pdfLoader; } @@ -210,27 +228,27 @@ public class PdfPanel extends JPanel { /* Efface l'image de la page */ page.setIcon(null); - currentPage = 0; + numeroPage = 0; /* Interface Vide */ indexPageInput.setText(""); maxPageLabel.setText("/ -"); /* Efface les données relatives au zoom */ - scaleSizing = 0.0f; - scaleZoom = 1.0f; + taille = 0.0f; + zoom = 1.0f; validate(); } /** - * Change la taille de la page courante + * Change la valeur du zoom de la page courante * * @param scale Valeur flottante (1.00f == 100%) */ - public void updateScaleZoom(float scale) { - scaleZoom = scale; - setPage(currentPage); + public void setZoom(float scale) { + zoom = scale; + changerPage(numeroPage); } /** @@ -238,23 +256,19 @@ public class PdfPanel extends JPanel { * * @param scale Valeur flottante (1.00f == 100%) */ - private void updateScaleSizing(float scale) { - scaleSizing = scale; - setPage(currentPage); + private void setTaille(float scale) { + taille = scale; + changerPage(numeroPage); } - /** - * Affiche la page suivante - */ - public void nextPage() { - setPage(currentPage + 1); + /** Affiche la page suivante */ + public void pageSuivante() { + changerPage(numeroPage + 1); } - /** - * Affiche la page suivante - */ - public void previousPage() { - setPage(currentPage - 1); + /** Affiche la page suivante */ + public void pagePrecedente() { + changerPage(numeroPage - 1); } /** @@ -262,14 +276,14 @@ public class PdfPanel extends JPanel { * * @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; processing = true; try { - page.setIcon(new ImageIcon(pdfLoader.renderPage(index, scaleZoom + scaleSizing))); - currentPage = index; - indexPageInput.setText(Integer.toString(currentPage + 1)); + page.setIcon(new ImageIcon(pdfLoader.renderPage(index, zoom + taille))); + numeroPage = index; + indexPageInput.setText(Integer.toString(numeroPage + 1)); maxPageLabel.setText(String.format("/%d", pdfLoader.getNbPages())); } catch (IOException ignored) {} processing = false; diff --git a/src/lecteur_pdf/raccourcisClavier/RaccourcisClavier.java b/src/lecteur_pdf/raccourcisClavier/RaccourcisClavier.java index c18a04c..f21f949 100644 --- a/src/lecteur_pdf/raccourcisClavier/RaccourcisClavier.java +++ b/src/lecteur_pdf/raccourcisClavier/RaccourcisClavier.java @@ -18,7 +18,7 @@ import java.util.HashMap; import java.util.Map; /** - * Gestionnaire des raccourcis.save claviers de l'application + * Gestionnaire des raccourcis claviers de l'application * * @author Léo Franch * @author Lucas Vabre @@ -27,8 +27,10 @@ import java.util.Map; */ public class RaccourcisClavier extends JFrame { + /** Le nom du fichier de sauvegarde */ public static final String FICHIER_SAUVEGARDE = "raccourcis.save"; + /** Booleen qui garantis l'attribution d'un seul raccourcis à la fois */ public static boolean saisieBloquee; /** @@ -37,13 +39,19 @@ public class RaccourcisClavier extends JFrame { */ public static ArrayList listeMenuItems = new ArrayList<>(); + /** + * Liste des éléments graphiques (un élément est une ligne) de la fenêtre + */ public static ArrayList 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 raccourcis = new HashMap<>() {}; + /** + * La liste des noms de MenuItems de l'application + */ public static String[] LISTE_NOM = { "Ouvrir", "Fermer", @@ -62,7 +70,10 @@ public class RaccourcisClavier extends JFrame { "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_F, KeyEvent.CTRL_DOWN_MASK), // Fermer 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 }; + /** + * 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() { super("Modification des raccourcis claviers"); saisieBloquee = false; @@ -92,12 +106,14 @@ public class RaccourcisClavier extends JFrame { /* Creation de la fenêtre */ 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) { RaccourcisElement raccourcisElement = new RaccourcisElement(nom, raccourcis.get(nom)); listeRaccourcisElement.add(raccourcisElement); panel.add(raccourcisElement); } + /* Ajout du boutton Reset */ JButton btnReset = new JButton("Raccourcis par défaut"); btnReset.addActionListener(this::actionBtnReset); panel.add(btnReset); @@ -109,6 +125,13 @@ public class RaccourcisClavier extends JFrame { 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) { initialisationFichierRaccourcis(); chargerRaccourcis(); @@ -169,8 +192,8 @@ public class RaccourcisClavier extends JFrame { * et la sauvegarde */ private static void initialisationFichierRaccourcis() { - for (int i = 0; i < LISTE_NOM.length && i < LISTE_RACCOURCIS.length; i++) { - raccourcis.put(LISTE_NOM[i], LISTE_RACCOURCIS[i]); + for (int i = 0; i < LISTE_NOM.length && i < RACCOURCIS_DEFAUT.length; i++) { + raccourcis.put(LISTE_NOM[i], RACCOURCIS_DEFAUT[i]); } sauvegarderRaccourcis(); } diff --git a/src/lecteur_pdf/raccourcisClavier/RaccourcisElement.java b/src/lecteur_pdf/raccourcisClavier/RaccourcisElement.java index fa0a056..aa2b551 100644 --- a/src/lecteur_pdf/raccourcisClavier/RaccourcisElement.java +++ b/src/lecteur_pdf/raccourcisClavier/RaccourcisElement.java @@ -1,17 +1,46 @@ +/* + * RaccourcisElement.java 10/03/2022 + * IUT Rodez 2021-2022, INFO 2 + * Pas de copyright, aucun droits + */ + package lecteur_pdf.raccourcisClavier; +import lecteur_pdf.Popup; + import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; 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 { + /** Le nom du MenuItem */ 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; + + /** Le raccourcis clavier */ 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) { super(new GridLayout(1, 2)); @@ -28,6 +57,11 @@ public class RaccourcisElement extends JPanel { 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) { if (!RaccourcisClavier.saisieBloquee) { RaccourcisClavier.saisieBloquee = true; @@ -35,7 +69,10 @@ public class RaccourcisElement extends JPanel { btnRaccourcis.addKeyListener(new KeyListener() { + /** Valeur qui permet de définir si une touche n'est pas reconnue */ private static final int INDETERMINATE = -1; + + /** La valeur de la touche pressé precedament */ private int previousKeyPressed = INDETERMINATE; @Override @@ -46,7 +83,7 @@ public class RaccourcisElement extends JPanel { && !isMaskValide(evt.getKeyCode())) { KeyStroke ks = KeyStroke.getKeyStroke(evt.getKeyCode(), getMask(previousKeyPressed)); - System.out.println(ks); + /* Vérifie que ce raccourci clavier n'existe pas */ if (!RaccourcisClavier.raccourcis.containsValue(ks)) { btnRaccourcis.setText(getMaskString(previousKeyPressed) + " + " + ks.toString().split(" ")[2]); @@ -56,7 +93,10 @@ public class RaccourcisElement extends JPanel { RaccourcisClavier.affecterRaccourcis(); RaccourcisClavier.sauvegarderRaccourcis(); } 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()); } @@ -77,6 +117,11 @@ public class RaccourcisElement extends JPanel { 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) { return switch (maskValue) { 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) { return switch (maskValue) { 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) { return switch (modifier) { 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) { return modifierToString(keyStroke.getModifiers()) + " + " + keyStroke.toString().split(" ")[2]; } + /** + * Change le raccourcis (visuellement) + * @param raccourcis Nouveau raccourcis + */ public void setRaccourcis(KeyStroke raccourcis) { this.raccourcis = raccourcis; this.btnRaccourcis.setText(keystrokeToString(raccourcis));