This commit is contained in:
NonoL3Robot
2022-03-12 20:06:26 +01:00
parent 8f20574cc0
commit b951de846d
6 changed files with 188 additions and 80 deletions
+26 -12
View File
@@ -16,12 +16,14 @@ import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; import java.awt.event.WindowEvent;
/** /**
* Classe définissant une fenêtre qui peut contenir un document PDF * Classe définissant une {@link Fenetre fenêtre} qui peut contenir un
* document PDF
* *
* @author Léo Franch * @author Léo Franch
* @author Tristan Nogaret * @author Tristan Nogaret
* @author Lucàs Vabre * @author Lucàs Vabre
* @author Noé Villeneuve * @author Noé Villeneuve
* @see JFrame
*/ */
public class Fenetre extends JFrame { public class Fenetre extends JFrame {
@@ -31,23 +33,28 @@ public class Fenetre extends JFrame {
public static final String TITRE = "LPDA"; public static final String TITRE = "LPDA";
/** /**
* Le Panel contenant le document PDF * Le {@link PdfPanel panel} contenant le document PDF
*/ */
private final PdfPanel pdfPanel; private final PdfPanel pdfPanel;
/* Relatif au FullScreen */ /* Relatif au FullScreen */
/** /**
* Booléen qui définit si la fenêtre est en mode plein écran ou non * Booléen qui définit si la {@link Fenetre fenêtre} est en mode
* {@link lecteur_pdf.menuBar.menuItems.PleinEcran plein écran} ou non
*/ */
private boolean fullscreen = false; private boolean fullscreen = false;
/** /**
* Composant Graphique permettant la mise en place du plein écran * Composant graphique permettant la mise en place du
* {@link lecteur_pdf.menuBar.menuItems.PleinEcran plein écran}
*
* @see GraphicsDevice
*/ */
private GraphicsDevice device; private GraphicsDevice device;
/** /**
* Créé une nouvelle fenêtre vide * Créé une nouvelle {@link Fenetre fenêtre} vide
*/ */
public Fenetre() { public Fenetre() {
super(TITRE); super(TITRE);
@@ -82,20 +89,24 @@ public class Fenetre extends JFrame {
} }
/** /**
* @return Le Panel contenant le document PDF * @return Le {@link PdfPanel panel} contenant le document PDF
*/ */
public PdfPanel getPdfPanel() { public PdfPanel getPdfPanel() {
return pdfPanel; return pdfPanel;
} }
/** /**
* Si fullscreen est égal à false -> Désactive le mode Plein Écran * Si fullscreen est égal à false ->
* Sinon Active le mode Plein Écran * <ul><li>Désactive le mode
* {@link lecteur_pdf.menuBar.menuItems.PleinEcran Plein Écran}</li>
* <li>Sinon, active le mode
* {@link lecteur_pdf.menuBar.menuItems.PleinEcran Plein Écran}</li></ul>
*/ */
public void pleinEcran() { public void pleinEcran() {
if (!fullscreen) { // Active le Plein Écran if (!fullscreen) { // Active le Plein Écran
GraphicsEnvironment graphics = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsEnvironment graphics
= GraphicsEnvironment.getLocalGraphicsEnvironment();
device = graphics.getDefaultScreenDevice(); device = graphics.getDefaultScreenDevice();
device.setFullScreenWindow(this); device.setFullScreenWindow(this);
} else { // Désactive le Plein Écran } else { // Désactive le Plein Écran
@@ -108,7 +119,7 @@ public class Fenetre extends JFrame {
} }
/** /**
* Décharge le PDF courant, ferme la fenêtre * Décharge le PDF courant, ferme la {@link Fenetre fenêtre}
* S'il s'agit de la dernière fenêtre ouverte, arrête l'application * S'il s'agit de la dernière fenêtre ouverte, arrête l'application
*/ */
public void quitter() { public void quitter() {
@@ -122,11 +133,14 @@ public class Fenetre extends JFrame {
/* Si la liste des fenêtres n'est pas pleine alors on réactive le /* Si la liste des fenêtres n'est pas pleine alors on réactive le
bouton pour créer une nouvelle fenêtre */ bouton pour créer une nouvelle fenêtre */
if (GestionFenetre.FENETRE_LIST.size() < GestionFenetre.NB_MAX_PDF) if (GestionFenetre.FENETRE_LIST.size() < GestionFenetre.NB_MAX_PDF) {
GestionMode.activerBtnNouvelleFenetre(); GestionMode.activerBtnNouvelleFenetre();
}
/* S'il n'y a plus de fenêtres ouvertes on quitte l'application */ /* S'il n'y a plus de fenêtres ouvertes on quitte l'application */
if (GestionFenetre.FENETRE_LIST.size() == 0) System.exit(0); if (GestionFenetre.FENETRE_LIST.size() == 0) {
System.exit(0);
}
} }
/** /**
+25 -11
View File
@@ -12,7 +12,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
* Gestionnaire des fenêtres ouvertes dans l'application * Gestionnaire des {@link Fenetre fenêtres} ouvertes dans l'application
* *
* @author Léo Franch * @author Léo Franch
* @author Tristan Nogaret * @author Tristan Nogaret
@@ -22,9 +22,13 @@ import java.util.List;
public class GestionFenetre { public class GestionFenetre {
/** /**
* Icône de l'application (affiché en haut à droite des fenêtres) * Icône de l'application (affiché en haut à droite des
* {@link Fenetre fenêtres})
*
* @see Image
*/ */
public static final Image ICONE = new ImageIcon("./lib/icon.png").getImage(); public static final Image ICONE = new ImageIcon(
"./lib/icon.png").getImage();
/** /**
* Nombre maximum de PDF que l'application peut ouvrir en simultané * Nombre maximum de PDF que l'application peut ouvrir en simultané
@@ -32,7 +36,9 @@ public class GestionFenetre {
public static final int NB_MAX_PDF = 2; public static final int NB_MAX_PDF = 2;
/** /**
* Liste des fenêtres ouvertes * Liste des {@link Fenetre fenêtres} ouvertes
*
* @see List
*/ */
public static final List<Fenetre> FENETRE_LIST = new ArrayList<>(); public static final List<Fenetre> FENETRE_LIST = new ArrayList<>();
@@ -48,29 +54,37 @@ public class GestionFenetre {
/** /**
* Méthode qui affiche la page suivante de tous les PDF ouverts * Méthode qui affiche la page suivante de tous les PDF ouverts
* (mode Synchronisé) * ({@link lecteur_pdf.menuBar.menuItems.ModeSynchronise mode Synchronisé})
*/ */
public static void nextPages() { public static void nextPages() {
for (Fenetre ihm : FENETRE_LIST) ihm.getPdfPanel().pageSuivante(); for (Fenetre ihm : FENETRE_LIST) {
ihm.getPdfPanel().pageSuivante();
}
} }
/** /**
* Méthode qui affiche la page précédente de tous les PDF ouverts * Méthode qui affiche la page précédente de tous les PDF ouverts
* (mode Synchronisé) * ({@link lecteur_pdf.menuBar.menuItems.ModeSynchronise mode Synchronisé})
*/ */
public static void previousPages() { public static void previousPages() {
for (Fenetre ihm : FENETRE_LIST) ihm.getPdfPanel().pagePrecedente(); for (Fenetre ihm : FENETRE_LIST) {
ihm.getPdfPanel().pagePrecedente();
}
} }
/** /**
* Lance l'application * Lance l'application
*
* @param args non utilisé * @param args non utilisé
*/ */
public static void main(String[] args) { public static void main(String[] args) {
/* Définit le style de la fenêtre sur l'explorateur Windows si possible */ /* Définit le style de la fenêtre sur l'explorateur Windows si
possible */
try { try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); UIManager.setLookAndFeel(
} catch (Exception ignored) {} "com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception ignored) {
}
GestionMode.setModeSepare(true); GestionMode.setModeSepare(true);
newIhmPdf(); newIhmPdf();
+67 -24
View File
@@ -14,7 +14,8 @@ import java.awt.*;
import java.util.ArrayList; import java.util.ArrayList;
/** /**
* Gestionnaire de mode Synchronisé ou Séparé * Gestionnaire de mode {@link ModeSynchronise Synchronisé} ou
* {@link ModeSepare Séparé}
* *
* @author Léo Franch * @author Léo Franch
* @author Tristan Nogaret * @author Tristan Nogaret
@@ -23,40 +24,82 @@ import java.util.ArrayList;
*/ */
public class GestionMode { public class GestionMode {
/** Défini si le mode séparé est activé ou non */ /**
* Définit si le {@link ModeSepare mode Séparé} est activé ou non
*/
private static boolean modeSepare; private static boolean modeSepare;
/** Liste les MenuItems de type NouvelleFenetre de l'application */ /**
private static final ArrayList<NouvelleFenetre> nouvelleFenetreList = new ArrayList<>(); * Liste les {@link lecteur_pdf.menuBar.menuItems.MenuItem MenuItems}
* de type {@link NouvelleFenetre NouvelleFenetre} de l'application
/** Liste les MenuItem de type ModeSepare de l'application */ *
private static final ArrayList<ModeSepare> modeSepareList = new ArrayList<>(); * @see ArrayList
*/
/** Liste les MenuItem de type ModeSynchronise de l'application */ private static final ArrayList<NouvelleFenetre> nouvelleFenetreList
private static final ArrayList<ModeSynchronise> modeSynchroniseList = new ArrayList<>(); = new ArrayList<>();
/** /**
* Référence les éléments NouvelleFenetre, ModeSepare, ModeSynchronise * Liste les {@link lecteur_pdf.menuBar.menuItems.MenuItem MenuItems}
* lors de la création d'une nouvelle fenêtre * de type {@link ModeSepare ModeSepare} de l'application
* @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 * @see ArrayList
* @param synchronise Référence du MenuItem ModeSynchronise de la fenêtre crée
*/ */
public static void addItem(NouvelleFenetre fenetre, ModeSepare separe, ModeSynchronise synchronise) { private static final ArrayList<ModeSepare> modeSepareList
= new ArrayList<>();
/**
* Liste les {@link lecteur_pdf.menuBar.menuItems.MenuItem MenuItems}
* de type {@link ModeSynchronise ModeSynchronise} de l'application
*
* @see ArrayList
*/
private static final ArrayList<ModeSynchronise> modeSynchroniseList
= new ArrayList<>();
/**
* Référence les éléments
* {@link NouvelleFenetre NouvelleFenetre},
* {@link ModeSepare ModeSepare} et
* {@link ModeSynchronise ModeSynchronise}
* lors de la création d'une nouvelle {@link Fenetre fenêtre}
*
* @param fenetre Référence du
* {@link lecteur_pdf.menuBar.menuItems.MenuItem
* MenuItem}
* {@link NouvelleFenetre NouvelleFenetre} de la fenêtre
* créée
* @param separe Référence du
* {@link lecteur_pdf.menuBar.menuItems.MenuItem
* MenuItem}
* {@link ModeSepare ModeSepare} de la fenêtre créée
* @param synchronise Référence du
* {@link lecteur_pdf.menuBar.menuItems.MenuItem
* MenuItem}
* {@link ModeSynchronise ModeSynchronise} de la fenêtre
* créée
*/
public static void addItem(NouvelleFenetre fenetre,
ModeSepare separe,
ModeSynchronise synchronise) {
nouvelleFenetreList.add(fenetre); nouvelleFenetreList.add(fenetre);
modeSepareList.add(separe); modeSepareList.add(separe);
modeSynchroniseList.add(synchronise); modeSynchroniseList.add(synchronise);
updateMode(); updateMode();
} }
/** @return true si le mode séparé est activé, false sinon */ /**
* @return <ul><li>true si le {@link ModeSepare mode séparé} est
* activé</li><li>false sinon</li></ul>
*/
public static boolean isModeSepare() { public static boolean isModeSepare() {
return modeSepare; return modeSepare;
} }
/** /**
* Change de mode * Change de mode
* @param mode true pour le mode séparé, false pour le mode synchronisé *
* @param mode <ul><li>true pour le mode séparé</li>
* <li>false pour le mode synchronisé</li></ul>
*/ */
public static void setModeSepare(boolean mode) { public static void setModeSepare(boolean mode) {
modeSepare = mode; modeSepare = mode;
@@ -64,8 +107,8 @@ public class GestionMode {
} }
/** /**
* Met à jour dans toutes les fenêtres ouvertes la checkbox du mode * Met à jour dans toutes les {@link Fenetre fenêtres} ouvertes la
* sélectionné * checkbox du mode sélectionné
*/ */
private static void updateMode() { private static void updateMode() {
for (int i = 0; i < modeSepareList.size(); i++) { for (int i = 0; i < modeSepareList.size(); i++) {
@@ -75,8 +118,8 @@ public class GestionMode {
} }
/** /**
* Grise le bouton "Nouvelle Fenêtre" de toutes les fenêtres de * Grise le bouton "{@link NouvelleFenetre Nouvelle Fenêtre}" de toutes les
* l'application * {@link Fenetre fenêtres} de l'application
*/ */
public static void desactiverBtnNouvelleFenetre() { public static void desactiverBtnNouvelleFenetre() {
for (NouvelleFenetre item : nouvelleFenetreList) { for (NouvelleFenetre item : nouvelleFenetreList) {
@@ -86,8 +129,8 @@ public class GestionMode {
} }
/** /**
* Dégrise le bouton "Nouvelle Fenêtre" de toutes les fenêtres de * Dégrise le bouton "{@link NouvelleFenetre Nouvelle Fenêtre}" de toutes
* l'application * les {@link Fenetre fenêtres} de l'application
*/ */
public static void activerBtnNouvelleFenetre() { public static void activerBtnNouvelleFenetre() {
for (NouvelleFenetre item : nouvelleFenetreList) { for (NouvelleFenetre item : nouvelleFenetreList) {
+25 -13
View File
@@ -10,7 +10,7 @@ import javax.swing.*;
import java.awt.*; import java.awt.*;
/** /**
* Classe outils permettant de créer des fenêtres Popups * Classe outils permettant de créer des fenêtres popups
* *
* @author Léo Franch * @author Léo Franch
* @author Tristan Nogaret * @author Tristan Nogaret
@@ -23,28 +23,40 @@ public class Popup {
* Créé une nouvelle fenêtre comportant un message et * Créé une nouvelle fenêtre comportant un message et
* deux boutons : Oui et Non * deux boutons : Oui et Non
* *
* @param parent La fenêtre parente de référence * @param parent La {@link Fenetre fenêtre} parente de référence
* @param titre Titre de la fenêtre * @param titre Titre de la {@link Fenetre fenêtre}
* @param message Message affiché dans la fenêtre * @param message Message affiché dans la {@link Fenetre fenêtre}
* @return JOptionPane.YES_OPTION si oui est cliqué, JOptionPane.NO_OPTION si non est cliqué * @return JOptionPane.YES_OPTION si oui est cliqué, JOptionPane
* .NO_OPTION si non est cliqué
* @see JOptionPane
*/ */
public static int OuiNonPopup(Component parent, String titre, String message) { public static int OuiNonPopup(Component parent,
String titre,
String message) {
String[] choix = {"Oui", "Non"}; String[] choix = {"Oui", "Non"};
return JOptionPane.showOptionDialog(parent, message, titre, JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE, return JOptionPane.showOptionDialog(parent, message, titre,
JOptionPane.YES_NO_OPTION,
JOptionPane.INFORMATION_MESSAGE,
null, choix, choix[0]); null, choix, choix[0]);
} }
/** /**
* Créé une nouvelle fenêtre comportant un message d'erreur avec un * Créé une nouvelle {@link Fenetre fenêtre} comportant un message
* bouton OK * d'erreur avec un bouton OK
* *
* @param parent La fenêtre parente de référence * @param parent La {@link Fenetre fenêtre} parente de référence
* @param titre Titre de la fenêtre * @param titre Titre de la {@link Fenetre fenêtre}
* @param message Message d'erreur * @param message Message d'erreur
* @see JOptionPane
*/ */
public static void errorPopup(Component parent, String titre, String message) { public static void errorPopup(Component parent,
String titre,
String message) {
JOptionPane d = new JOptionPane(); JOptionPane d = new JOptionPane();
String[] choix = {"OK"}; String[] choix = {"OK"};
JOptionPane.showOptionDialog(parent, message, titre, JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE, null, choix, choix[0]); JOptionPane.showOptionDialog(parent, message, titre,
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE, null, choix,
choix[0]);
} }
} }
+42 -13
View File
@@ -12,42 +12,71 @@ import javax.swing.filechooser.FileSystemView;
import java.io.File; import java.io.File;
/** /**
* Classe qui permet d'ouvrir une fenêtre pour sélectionner le fichier pdf à ouvrir * Classe qui permet d'ouvrir une {@link Fenetre fenêtre} pour sélectionner
* le fichier pdf à ouvrir
* *
* @author Léo FRANCH * @author Léo FRANCH
* @author Tristan NOGARET * @author Tristan NOGARET
* @author Lucàs VABRE * @author Lucàs VABRE
* @author Noé VILLENEUVE * @author Noé VILLENEUVE
* @see JFileChooser
* @see File
* @see FileNameExtensionFilter
* @see FileSystemView
*/ */
public class SelectionnerFichier { public class SelectionnerFichier {
/** Le titre de la fenêtre */ /**
* Le titre de la {@link Fenetre fenêtre}
*/
private static final String TITRE = "Sélectionnez un PDF"; private static final String TITRE = "Sélectionnez un PDF";
/** Description du filtre */ /**
* Description du filtre
*
* @see FileNameExtensionFilter
*/
private static final String DESCRIPTION = "PDF files (*.pdf)"; private static final String DESCRIPTION = "PDF files (*.pdf)";
/** Extension de fichier filtré */ /**
* Extension de fichier filtré
*/
private static final String EXTENSION = "pdf"; private static final String EXTENSION = "pdf";
/** Valeur du bouton OK */ /**
* Valeur du bouton Ok
*/
private static final String BOUTON_OK = "Ouvrir"; private static final String BOUTON_OK = "Ouvrir";
/** Valeur du bouton Annuler */ /**
* Valeur du bouton Annuler
*/
private static final String BOUTON_ANNULER = "Annuler"; private static final String BOUTON_ANNULER = "Annuler";
/** Indice au survol du bouton Ok */ /**
private static final String INDICE_BOUTON_OK = "Ouvre le fichier sélectionné"; * Indice au survol du bouton Ok
*/
private static final String INDICE_BOUTON_OK
= "Ouvre le fichier sélectionné";
/** Indice au survol du bouton Annuler */ /**
* Indice au survol du bouton Annuler
*/
private static final String INDICE_BOUTON_ANNULER = "Annule la sélection"; private static final String INDICE_BOUTON_ANNULER = "Annule la sélection";
/** /**
* Méthode qui créée une fenêtre pour que l'utilisateur choisisse un * Méthode qui créée une {@link Fenetre fenêtre} pour que l'utilisateur
* fichier PDF * choisisse un fichier PDF
* *
* @return le fichier choisi par l'utilisateur, null si aucun fichier * @param parent La {@link Fenetre fenêtre} parente de référence
* n'est choisi * @return <ul><li>le fichier choisi par l'utilisateur</li>
* <li>null si aucun fichier n'est choisi</li></ul>
* @see JFileChooser
* @see File
* @see FileSystemView
* @see FileNameExtensionFilter
* @see SwingUtilities
* @see UIManager
*/ */
public static File ouvrirFichier(JFrame parent) { public static File ouvrirFichier(JFrame parent) {
@@ -26,16 +26,12 @@ public class FermerFichier extends MenuItem {
/** /**
* Titre de la {@link lecteur_pdf.Popup Popup} lors de la fermeture d'un * Titre de la {@link lecteur_pdf.Popup Popup} lors de la fermeture d'un
* document * document
*
* @see javax.swing.Popup
*/ */
public static final String TITRE = "Fermeture du document"; public static final String TITRE = "Fermeture du document";
/** /**
* Message de la {@link lecteur_pdf.Popup Popup} lors de la fermeture * Message de la {@link lecteur_pdf.Popup Popup} lors de la fermeture
* d'un {@link lecteur_pdf.pdf.DocumentPdf document} * d'un {@link lecteur_pdf.pdf.DocumentPdf document}
*
* @see javax.swing.Popup
*/ */
public static final String MESSAGE public static final String MESSAGE
= "Êtes-vous sûr de vouloir fermer le document ?"; = "Êtes-vous sûr de vouloir fermer le document ?";