mirror of
https://github.com/LucasVbr/LecteurPdfDoubleAffichage.git
synced 2026-05-14 01:21:50 +00:00
fix #29 Raccourcis clavier fonctionnels
Co-Authored-By: NonoL3Robot <75622909+NonoL3Robot@users.noreply.github.com>
This commit is contained in:
Binary file not shown.
@@ -84,8 +84,5 @@ public class GestionPdf {
|
||||
|
||||
GestionMode.setModeSepare();
|
||||
newIhmPdf();
|
||||
|
||||
// System.out.println(RaccourcisClavier.raccourcis);
|
||||
// System.out.println(RaccourcisClavier.gestionnaireRaccourcis);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
// }
|
||||
//}
|
||||
Reference in New Issue
Block a user