This commit is contained in:
NonoL3Robot
2022-03-11 14:11:25 +01:00
parent 32c2685d87
commit 8f20574cc0
3 changed files with 231 additions and 79 deletions
@@ -6,6 +6,7 @@
package lecteur_pdf.raccourcisClavier;
import lecteur_pdf.Fenetre;
import lecteur_pdf.GestionFenetre;
import javax.swing.*;
@@ -24,6 +25,10 @@ import java.util.Map;
* @author Tristan Nogaret
* @author Lucàs Vabre
* @author Noé Villeneuve
* @see JFrame
* @see ArrayList
* @see HashMap
* @see KeyStroke
*/
public class RaccourcisClavier extends JFrame {
@@ -38,24 +43,37 @@ public class RaccourcisClavier extends JFrame {
public static boolean saisieBloquee;
/**
* Liste des menus items, se remplis à la création de chaque MenuItem de
* Liste des {@link lecteur_pdf.menuBar.menuItems menus items}, se
* remplis à la création de chaque
* {@link lecteur_pdf.menuBar.menuItems.MenuItem MenuItem} de
* l'application
*
* @see ArrayList
*/
public static ArrayList<JMenuItem> listeMenuItems = new ArrayList<>();
/**
* Liste des éléments graphiques (un élément est une ligne) de la fenêtre
* Liste des {@link RaccourcisElement éléments graphiques} (un élément
* est une ligne) de la {@link Fenetre fenêtre}
*
* @see ArrayList
*/
public static ArrayList<RaccourcisElement> listeRaccourcisElement = new ArrayList<>();
public static ArrayList<RaccourcisElement> listeRaccourcisElement
= new ArrayList<>();
/**
* HashMap qui prend en clé le Nom du MenuItem et en valeur une
* HashMap qui prend en clé le nom du
* {@link lecteur_pdf.menuBar.menuItems.MenuItem MenuItem} et en valeur une
* combinaison de touche : le raccourci clavier
*
* @see HashMap
* @see KeyStroke
*/
public static Map<String, KeyStroke> raccourcis = new HashMap<>() {};
/**
* La liste des noms de MenuItems de l'application
* La liste des noms de
* {@link lecteur_pdf.menuBar.menuItems.MenuItem MenuItem} de l'application
*/
public static String[] LISTE_NOM = {
"Ouvrir", "Fermer", "Quitter", "Mode Plein Écran", "Page précédente",
@@ -101,9 +119,9 @@ public class RaccourcisClavier extends JFrame {
};
/**
* Créé une nouvelle fenêtre contenant la liste des Raccourcis claviers
* de l'application ainsi qu'un bouton Raccourcis par défaut qui remet
* les raccourcis par défaut de l'application
* Créé une nouvelle {@link Fenetre fenêtre} contenant la liste des
* raccourcis claviers de l'application ainsi qu'un bouton raccourcis par
* défaut qui réinitialise les raccourcis claviers de l'application
*/
public RaccourcisClavier() {
super("Modification des raccourcis claviers");
@@ -142,8 +160,8 @@ public class RaccourcisClavier extends JFrame {
/**
* Action lors du clic sur le bouton Reset
* Charge les raccourcis par défaut puis les sauvegarde
* Met a jour l'interface
* Charge les raccourcis par défaut puis les sauvegarde et met à jour
* l'interface
*/
private void actionBtnReset(ActionEvent evt) {
initialisationFichierRaccourcis();
@@ -162,6 +180,9 @@ public class RaccourcisClavier extends JFrame {
/**
* Lis le fichier de sauvegarde et restaure la HashMap des raccourcis
*
* @see FileInputStream
* @see ObjectInputStream
*/
public static void chargerRaccourcis() {
try {
@@ -184,6 +205,9 @@ public class RaccourcisClavier extends JFrame {
/**
* Écrit dans le fichier de sauvegarde la HashMap des raccourcis
*
* @see FileOutputStream
* @see ObjectOutputStream
*/
public static void sauvegarderRaccourcis() {
try {
@@ -213,7 +237,9 @@ public class RaccourcisClavier extends JFrame {
}
/**
* Affecte a chaque MenuItems le raccourci qui lui est destiné
* Affecte a chaque
* {@link lecteur_pdf.menuBar.menuItems.MenuItem MenuItem} le raccourci
* qui lui est destiné
*/
public static void affecterRaccourcis() {
for (JMenuItem menuItem : listeMenuItems) {
@@ -22,26 +22,45 @@ import java.awt.event.KeyListener;
* @author Tristan Nogaret
* @author Lucàs Vabre
* @author Noé Villeneuve
* @see JPanel
*/
public class RaccourcisElement extends JPanel {
/** Le nom du MenuItem */
/**
* Le nom du MenuItem
*/
private final String nom;
/** Le bouton qui contient en valeur la séquence de touches correspondant
* au raccourci du MenuItem de l'application */
/**
* Le bouton qui contient en valeur la séquence de touches correspondant
* au raccourci du
* {@link lecteur_pdf.menuBar.menuItems.MenuItem MenuItem} de l'application
*
* @see JButton
*/
private final JButton btnRaccourcis;
/** Le raccourci clavier */
/**
* Le raccourci clavier
*
* @see KeyStroke
*/
private KeyStroke raccourcis;
/**
* Crée un nouveau JPanel comportant 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 bouton pour éditer le raccourci clavier
* <li>Dans la première colonne on trouve un label qui défini le
* {@link lecteur_pdf.menuBar.menuItems.MenuItem MenuItem}</li>
* <li>Dans la seconde colonne on trouve le bouton pour éditer le
* raccourci clavier</li>
*
* @param nom Le nom du MenuItem ciblé
* @param raccourcis Le raccourci clavier actuel du MenuItem ciblé
* @param nom Le nom du
* {@link lecteur_pdf.menuBar.menuItems.MenuItem
* MenuItem} ciblé
* @param raccourcis Le raccourci clavier actuel du
* {@link lecteur_pdf.menuBar.menuItems.MenuItem
* MenuItem} ciblé
* @see GridLayout
*/
public RaccourcisElement(String nom, KeyStroke raccourcis) {
super(new GridLayout(1, 2));
@@ -71,24 +90,33 @@ public class RaccourcisElement extends JPanel {
btnRaccourcis.addKeyListener(new KeyListener() {
/** Valeur qui permet de définir si une touche n'est pas reconnue */
/**
* 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ée précédemment */
/**
* La valeur de la touche pressée précédemment
*/
private int previousKeyPressed = INDETERMINATE;
@Override
public void keyPressed(KeyEvent evt) {
if (previousKeyPressed == INDETERMINATE) previousKeyPressed = evt.getKeyCode();
else if (previousKeyPressed != evt.getKeyCode()
&& isMaskValide(previousKeyPressed)
&& !isMaskValide(evt.getKeyCode())) {
if (previousKeyPressed == INDETERMINATE) {
previousKeyPressed = evt.getKeyCode();
} else if (previousKeyPressed != evt.getKeyCode()
&& isMaskValide(previousKeyPressed)
&& !isMaskValide(evt.getKeyCode())) {
KeyStroke ks = KeyStroke.getKeyStroke(evt.getKeyCode(), getMask(previousKeyPressed));
KeyStroke ks = KeyStroke.getKeyStroke(evt.getKeyCode(),
getMask(
previousKeyPressed));
/* Vérifie que ce raccourci clavier n'existe pas */
if (!RaccourcisClavier.raccourcis.containsValue(ks)) {
btnRaccourcis.setText(getMaskString(previousKeyPressed) + " + " + ks.toString().split(" ")[2]);
btnRaccourcis.setText(
getMaskString(previousKeyPressed) + " + "
+ ks.toString().split(" ")[2]);
// On modifie la valeur
RaccourcisClavier.raccourcis.replace(nom, ks);
raccourcis = ks;
@@ -97,10 +125,17 @@ public class RaccourcisElement extends JPanel {
} else {
final String TITRE_ERREUR = "Erreur raccourcis";
final String MESSAGE_ERREUR = "Le raccourcis que "
+ "vous venez de réaliser est déjà affecté à une autre fonctionnalité";
+ "vous venez de "
+ "réaliser est "
+ "déjà affecté à "
+ "une autre "
+ "fonctionnalité";
Popup.errorPopup(btnRaccourcis, TITRE_ERREUR, MESSAGE_ERREUR);
btnRaccourcis.setText(modifierToString(raccourcis.getModifiers()) + " + " + (char)raccourcis.getKeyCode());
Popup.errorPopup(btnRaccourcis, TITRE_ERREUR,
MESSAGE_ERREUR);
btnRaccourcis.setText(
modifierToString(raccourcis.getModifiers())
+ " + " + (char) raccourcis.getKeyCode());
}
btnRaccourcis.removeKeyListener(this);
@@ -109,11 +144,14 @@ public class RaccourcisElement extends JPanel {
}
@Override
public void keyTyped(KeyEvent evt) {}
public void keyTyped(KeyEvent evt) {
}
@Override
public void keyReleased(KeyEvent evt) {
if (previousKeyPressed == evt.getKeyCode()) previousKeyPressed = INDETERMINATE;
if (previousKeyPressed == evt.getKeyCode()) {
previousKeyPressed = INDETERMINATE;
}
}
private boolean isMaskValide(int maskValue) {
@@ -123,8 +161,11 @@ public class RaccourcisElement extends JPanel {
/**
* Méthode outil qui permet de convertir la valeur tapée en
* KeyEvent
* @param maskValue Valeur de masque tapé (control, shift ou alt)
* @param maskValue Valeur de masque tapé (control, shift ou
* alt)
* @return Le KeyEvent correspondant
*
* @see KeyEvent
*/
private int getMask(int maskValue) {
return switch (maskValue) {
@@ -137,7 +178,8 @@ public class RaccourcisElement extends JPanel {
/**
* Méthode outil qui permet de convertir la valeur tapée en
* chaîne de caractère
* @param maskValue Valeur de masque tapé (controle, shift ou alt)
* @param maskValue Valeur de masque tapé (controle, shift ou
* alt)
* @return La chaine de caractère correspondante
*/
private String getMaskString(int maskValue) {
@@ -152,7 +194,8 @@ public class RaccourcisElement extends JPanel {
}
/**
* Convertit un Modifier en chaîne de caractère
* Convertit un modifier en chaîne de caractère
*
* @param modifier valeur du modifier (Element d'un KeyStroke != KeyEvent)
* @return La chaîne de caractère correspondante
*/
@@ -165,16 +208,21 @@ public class RaccourcisElement extends JPanel {
}
/**
* Convertis un raccourci en chaîne de caractère
* Convertit un raccourci en chaîne de caractère
*
* @param keyStroke Le raccourci en question
* @return La chaîne de caractère construite à partir du raccourci
*
* @see KeyStroke
*/
private String keystrokeToString(KeyStroke keyStroke) {
return modifierToString(keyStroke.getModifiers()) + " + " + keyStroke.toString().split(" ")[2];
return modifierToString(keyStroke.getModifiers()) + " + "
+ keyStroke.toString().split(" ")[2];
}
/**
* Change le raccourci (visuellement)
*
* @param raccourcis nouveau raccourci
*/
public void setRaccourcis(KeyStroke raccourcis) {