fix #29 Raccourcis clavier fonctionnels

Co-Authored-By: NonoL3Robot <75622909+NonoL3Robot@users.noreply.github.com>
This commit is contained in:
LucasV-IUT
2022-03-06 23:41:55 +01:00
parent 6e0da3e290
commit 7619d6efc9
9 changed files with 217 additions and 164 deletions
BIN
View File
Binary file not shown.
-3
View File
@@ -84,8 +84,5 @@ public class GestionPdf {
GestionMode.setModeSepare();
newIhmPdf();
// System.out.println(RaccourcisClavier.raccourcis);
// System.out.println(RaccourcisClavier.gestionnaireRaccourcis);
}
}
+6
View File
@@ -8,6 +8,7 @@ package lecteur_pdf;
import lecteur_pdf.menuBar.MenuBar;
import lecteur_pdf.pdf.PdfPanel;
import lecteur_pdf.raccourcisClavier.RaccourcisClavier;
import javax.swing.*;
import java.awt.*;
@@ -57,6 +58,11 @@ public class IhmPdf extends JFrame {
});
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
/* Affecte les raccourcis claviers de la fenêtre */
RaccourcisClavier.chargerRaccourcis();
RaccourcisClavier.affecterRaccourcis();
RaccourcisClavier.sauvegarderRaccourcis();
/* Render de la Frame */
pack();
setVisible(true);
@@ -32,7 +32,7 @@ public class FermerFichier extends MenuItem {
public FermerFichier(IhmPdf parent) {
super(parent, "Fermer");
/* TODO Définition du raccourcis clavier a modifier */
/* TODO Définition du raccourcis.save clavier a modifier */
// setRaccourcis(KeyEvent.VK_X, KeyEvent.CTRL_DOWN_MASK);
}
@@ -37,24 +37,24 @@ public abstract class MenuItem extends JMenuItem {
super(name);
this.parent = parent;
addActionListener(this::action);
RaccourcisClavier.listeItem.put(name, this);
RaccourcisClavier.listeMenuItems.add(this);
}
protected abstract void action(ActionEvent evt);
// public void setRaccourcis(int key) {
// KeyStroke raccourcis = KeyStroke.getKeyStroke((char) key);
// setAccelerator(raccourcis);
// KeyStroke raccourcis.save = KeyStroke.getKeyStroke((char) key);
// setAccelerator(raccourcis.save);
//
// RaccourcisClavier.raccourcis.put(this.getText(), raccourcis);
// RaccourcisClavier.raccourcis.save.put(this.getText(), raccourcis.save);
// RaccourcisClavier.gestionnaireRaccourcis.put(this, this.getText());
// }
// public void setRaccourcis(int key, int mask) {
// KeyStroke raccourcis = KeyStroke.getKeyStroke(key, mask);
// setAccelerator(raccourcis);
// KeyStroke raccourcis.save = KeyStroke.getKeyStroke(key, mask);
// setAccelerator(raccourcis.save);
//
// RaccourcisClavier.raccourcis.put(this.getText(), raccourcis);
// RaccourcisClavier.raccourcis.save.put(this.getText(), raccourcis.save);
// RaccourcisClavier.gestionnaireRaccourcis.put(this, this.getText());
// }
@@ -6,16 +6,16 @@
package lecteur_pdf.raccourcisClavier;
import lecteur_pdf.menuBar.menuItems.MenuItem;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* Gestionnaire des raccourcis claviers de l'application
* Gestionnaire des raccourcis.save claviers de l'application
*
* @author Léo Franch
* @author Lucas Vabre
@@ -24,66 +24,142 @@ import java.util.Map;
*/
public class RaccourcisClavier extends JFrame {
public static Map<String, JMenuItem> listeItem = new HashMap<>();
public static boolean saisieBloquee;
public final String[][] RACCOURCIS = {
{"Ouvrir", "o",},
{"Fermer", "f",},
{"Quitter", "x",},
{"Mode Plein Ecran", "p",},
{"Page Prédédente", "m",},
{"Page Suivante", "l",},
{"Zoom 50%", "&",},
{"Zoom 100%", "é",},
{"Zoom 150%", "\"",},
{"Page Entière", "a",},
{"Pleine Largeur", "z",},
{"Nouvelle Fenêtre", "n",},
// { "Mode Séparé",},
// { "Mode Synchronisé",},
{"Modifier Touches", "!",}
public static final String FICHIER_SAUVEGARDE = "raccourcis.save";
/**
* Liste des menus items, se remplis a la création de chaque MenuItem de l'application
*/
public static ArrayList<JMenuItem> listeMenuItems = new ArrayList<>();
/**
* HashMap qui prend en clé le Nom et en valeur une combinaison de touche : le raccourcis.save clavier
*/
public static Map<String, KeyStroke> raccourcis = new HashMap<>() {};
public static String[] LISTE_NOM = {
"Ouvrir",
"Fermer",
"Quitter",
"Mode Plein Ecran",
"Page Prédédente",
"Page Suivante",
"Zoom 50%",
"Zoom 100%",
"Zoom 150%",
"Page Entière",
"Pleine Largeur",
"Nouvelle Fenêtre",
// "Mode Séparé",
// "Mode Synchronisé",
"Modifier Touches"
};
public static KeyStroke[] LISTE_RACCOURCIS = {
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
KeyStroke.getKeyStroke(KeyEvent.VK_F11, KeyEvent.CTRL_DOWN_MASK), // Mode Plein Ecran
KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, KeyEvent.CTRL_DOWN_MASK), // Page Prédédente
KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, KeyEvent.CTRL_DOWN_MASK), // Page Suivante
KeyStroke.getKeyStroke(KeyEvent.VK_MINUS, KeyEvent.CTRL_DOWN_MASK), // Zoom 50%
KeyStroke.getKeyStroke(KeyEvent.VK_NUMPAD0, KeyEvent.CTRL_DOWN_MASK), // Zoom 100%
KeyStroke.getKeyStroke(KeyEvent.VK_PLUS, KeyEvent.CTRL_DOWN_MASK), // Zoom 150%
KeyStroke.getKeyStroke(KeyEvent.VK_W, KeyEvent.CTRL_DOWN_MASK), // Page Entière
KeyStroke.getKeyStroke(KeyEvent.VK_X, KeyEvent.CTRL_DOWN_MASK), // Pleine Largeur
KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.CTRL_DOWN_MASK), // Nouvelle Fenêtre
// KeyStroke.getKeyStroke(KeyEvent.VK_O,KeyEvent.CTRL_DOWN_MASK), // Mode Séparé
// KeyStroke.getKeyStroke(KeyEvent.VK_O,KeyEvent.CTRL_DOWN_MASK), // Mode Synchronisé
KeyStroke.getKeyStroke(KeyEvent.VK_P, KeyEvent.CTRL_DOWN_MASK), // Modifier Touches
};
public RaccourcisClavier() {
super("Modification des raccourcis claviers");
JPanel panel = new JPanel(new GridLayout(RACCOURCIS.length, 1, 10, 5));
saisieBloquee = false;
System.out.println(listeItem);
/* Charge le fichier et affecte les raccourcis aux MenuItems */
chargerRaccourcis();
affecterRaccourcis();
for (int i = 0; i < listeItem.size(); i++) {
RaccourcisElement raccourcisElement = new RaccourcisElement(RACCOURCIS[i][0], listeItem.get(RACCOURCIS[i][0]));
// Si l'actions n'as pas de raccourcis, mettre celui par défaut
// try {
// listeItem.get(RACCOURCIS[i][0]).getAccelerator();
// } catch (NullPointerException e) {
// listeItem.get(RACCOURCIS[i][0]).setAccelerator(KeyStroke.getKeyStroke(RACCOURCIS[i][1].charAt(0), KeyEvent.CTRL_DOWN_MASK));
// }
/* Creattion de la fenêtre */
JPanel panel = new JPanel(new GridLayout(raccourcis.size(), 1, 10, 5));
for (String nom : LISTE_NOM) {
RaccourcisElement raccourcisElement = new RaccourcisElement(nom, raccourcis.get(nom));
panel.add(raccourcisElement);
}
add(panel);
add(new JScrollPane(panel));
sauvegarderRaccourcis();
// JPanel panel = new JPanel();
// for (String nomOptions : raccourcis.keySet()) {
// panel.add(new ligneRaccourci(nomOptions,
// (char) raccourcis.get(nomOptions)
// .getKeyCode()));
// }
// add(panel);
pack();
setMinimumSize(new Dimension(400, 200));
// setSize(200, 400);
// setResizable(false);
setVisible(true);
}
private void chargerRaccourcisDefaut() {
/**
* Lis le fichier de sauvegarde et restaure la HashMap des raccourcis
*/
public static void chargerRaccourcis() {
try {
FileInputStream fis = new FileInputStream(FICHIER_SAUVEGARDE);
ObjectInputStream ois = new ObjectInputStream(fis);
raccourcis = (HashMap) ois.readObject();
ois.close();
fis.close();
System.out.println("Chargement des données avec succès");
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (ClassNotFoundException c) {
System.out.println("Class not found");
c.printStackTrace();
}
/* Test : Affichage du contenu de la HashMap dans l'ordre des noms */
// for (String a : LISTE_NOM) {
// System.out.println(a + " : " + raccourcis.get(a));
// }
}
private void chargerRaccourcis() {
/**
* Ecrit dans le fichier de sauvegarde la HashMap des raccourcis
*/
public static void sauvegarderRaccourcis() {
try {
FileOutputStream fos = new FileOutputStream(FICHIER_SAUVEGARDE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(raccourcis);
oos.close();
fos.close();
System.out.println("Sauvegardé avec succes");
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Remplis la HashMap avec les raccourcis claviers par défaut
* et la sauvegarde
*/
private void initialisationFichierRaccourcis() {
for (int i = 0; i < LISTE_NOM.length && i < LISTE_RACCOURCIS.length ; i++) {
raccourcis.put(LISTE_NOM[i], LISTE_RACCOURCIS[i]);
}
sauvegarderRaccourcis();
}
/**
* Affecte a chaque MenuItems le raccourcis qui lui est destiné
*/
public static void affecterRaccourcis() {
for (JMenuItem menuItem : listeMenuItems) {
menuItem.setAccelerator(raccourcis.get(menuItem.getText()));
}
}
}
@@ -4,55 +4,103 @@ import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class RaccourcisElement extends JPanel {
JLabel nomElement;
JButton btnRaccourcis;
KeyEvent raccourcis;
JMenuItem menuItem;
private final String nom;
private final JButton btnRaccourcis;
private KeyStroke raccourcis;
public RaccourcisElement(String nom, JMenuItem menuItem) {
public RaccourcisElement(String nom, KeyStroke raccourcis) {
super(new GridLayout(1, 2));
nomElement = new JLabel(nom);
this.menuItem = menuItem;
btnRaccourcis = new JButton();
this.nom = nom;
this.raccourcis = raccourcis;
/* Interface */
JLabel nomElement = new JLabel(nom);
btnRaccourcis = new JButton(modifierToString(raccourcis.getModifiers()) + " + " + (char)raccourcis.getKeyCode());
add(nomElement);
add(btnRaccourcis);
btnRaccourcis.addActionListener(this::action);
// this.setVisible(false);
}
public void action(ActionEvent evt) {
// TODO ecoute la frappe de clavier et change le raccourcis
// KeyListener kl = new KeyListener() {
// @Override
// public void keyTyped(KeyEvent e) {}
//
// @Override
// public void keyPressed(KeyEvent e) {
// setCaractereRaccourcis(e.getKeyChar());
// }
//
// @Override
// public void keyReleased(KeyEvent e) {}
// };
// addKeyListener(kl);
// removeKeyListener(kl);
// btnRaccourcis.setText(String.valueOf(caractereRaccourcis));
// }
//
// public void setMenuItem(JMenuItem menuItem) {
// this.menuItem = menuItem;
// this.setVisible(true);
// }
//
// public void setCaractereRaccourcis(char caractereRaccourcis) {
// this.caractereRaccourcis = caractereRaccourcis;
// menuItem.setAccelerator(KeyStroke.getKeyStroke(caractereRaccourcis, KeyEvent.CTRL_DOWN_MASK));
if (!RaccourcisClavier.saisieBloquee) {
RaccourcisClavier.saisieBloquee = true;
btnRaccourcis.setText(" --- ");
btnRaccourcis.addKeyListener(new KeyListener() {
private static final int INDETERMINATE = -1;
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())) {
KeyStroke ks = KeyStroke.getKeyStroke(evt.getKeyCode(), getMask(previousKeyPressed));
System.out.println(ks);
/* Vérifie que ce raccourcis clavier n'existe pas */
if (!RaccourcisClavier.raccourcis.containsValue(ks)) {
btnRaccourcis.setText(getMaskString(previousKeyPressed) + " + " + (char)evt.getKeyCode());
// On modifie la valeur
RaccourcisClavier.raccourcis.replace(nom, ks);
raccourcis = ks;
RaccourcisClavier.affecterRaccourcis();
RaccourcisClavier.sauvegarderRaccourcis();
} else {
// TODO Erreur cette combinaison de touche est deja utilisé
btnRaccourcis.setText(modifierToString(raccourcis.getModifiers()) + " + " + (char)raccourcis.getKeyCode());
}
btnRaccourcis.removeKeyListener(this);
RaccourcisClavier.saisieBloquee = false;
}
}
@Override
public void keyTyped(KeyEvent evt) {}
@Override
public void keyReleased(KeyEvent evt) {
if (previousKeyPressed == evt.getKeyCode()) previousKeyPressed = INDETERMINATE;
}
private boolean isMaskValide(int maskValue) {
return 16 <= maskValue && maskValue <= 18;
}
private int getMask(int maskValue) {
return switch (maskValue) {
case 16 -> KeyEvent.SHIFT_DOWN_MASK;
case 17 -> KeyEvent.CTRL_DOWN_MASK;
default -> KeyEvent.ALT_DOWN_MASK;
};
}
private String getMaskString(int maskValue) {
return switch (maskValue) {
case 16 -> "SHIFT";
case 17 -> "CTRL";
default -> "ALT";
};
}
});
}
}
private String modifierToString(int modifier) {
return switch (modifier) {
case 65 -> "SHIFT";
case 130 -> "CTRL";
default -> "ALT";
};
}
}
@@ -1,29 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="lecteur_pdf.raccourcisClavier.ligneRaccourci">
<grid id="27dc6" binding="optionsRaccourcis" layout-manager="GridLayoutManager" row-count="1" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<xy x="20" y="20" width="500" height="400"/>
</constraints>
<properties/>
<border type="none"/>
<children>
<component id="5fe9f" class="javax.swing.JLabel" binding="raccourciLabel">
<constraints>
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<text value="Label"/>
</properties>
</component>
<component id="ec92c" class="javax.swing.JButton" binding="inputButton">
<constraints>
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<text value="Button"/>
</properties>
</component>
</children>
</grid>
</form>
@@ -1,45 +0,0 @@
/*
* ligneRaccourci.java, 25/02/2022
* IUT Rodez 2022-2022, INFO2
* pas de copyright, aucun droits
*/
package lecteur_pdf.raccourcisClavier;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Locale;
import java.util.Scanner;
///**
// * TODO class comment
// */
//public class ligneRaccourci extends JPanel implements ActionListener {
// private JLabel raccourciLabel;
// private JPanel optionsRaccourcis;
// private JButton inputButton;
//
// Scanner entree = new Scanner(System.in);
//
// public ligneRaccourci(String labelName, char raccourcis) {
// raccourciLabel.setText(labelName);
// inputButton.setText(String.valueOf(raccourcis));
// add(optionsRaccourcis);
// inputButton.addActionListener(this);
// }
//
// public JLabel getRaccourciLabel() {
// return raccourciLabel;
// }
//
// public JButton getInputButton() {
// return inputButton;
// }
//
// @Override
// public void actionPerformed(ActionEvent e) {
// inputButton.setText(
// String.valueOf(entree.next().charAt(0)).toUpperCase(Locale.ROOT));
// }
//}