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
+27 -13
View File
@@ -16,12 +16,14 @@ import java.awt.event.WindowAdapter;
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 Tristan Nogaret
* @author Lucàs Vabre
* @author Noé Villeneuve
* @see JFrame
*/
public class Fenetre extends JFrame {
@@ -31,23 +33,28 @@ public class Fenetre extends JFrame {
public static final String TITRE = "LPDA";
/**
* Le Panel contenant le document PDF
* Le {@link PdfPanel panel} contenant le document PDF
*/
private final PdfPanel pdfPanel;
/* 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;
/**
* 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;
/**
* Créé une nouvelle fenêtre vide
* Créé une nouvelle {@link Fenetre fenêtre} vide
*/
public Fenetre() {
super(TITRE);
@@ -63,7 +70,7 @@ public class Fenetre extends JFrame {
setJMenuBar(new MenuBar(this)); // Ajoute la barre des menus
/* Action à la fermeture de la fenêtre */
this.addWindowListener(new WindowAdapter(){
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent et) {
quitter();
@@ -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() {
return pdfPanel;
}
/**
* Si fullscreen est égal à false -> Désactive le mode Plein Écran
* Sinon Active le mode Plein Écran
* Si fullscreen est égal à false ->
* <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() {
if (!fullscreen) { // Active le Plein Écran
GraphicsEnvironment graphics = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsEnvironment graphics
= GraphicsEnvironment.getLocalGraphicsEnvironment();
device = graphics.getDefaultScreenDevice();
device.setFullScreenWindow(this);
} 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
*/
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
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();
}
/* 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);
}
}
/**
+26 -12
View File
@@ -12,7 +12,7 @@ import java.util.ArrayList;
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 Tristan Nogaret
@@ -22,17 +22,23 @@ import java.util.List;
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é
*/
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<>();
@@ -48,29 +54,37 @@ public class GestionFenetre {
/**
* 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() {
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
* (mode Synchronisé)
* ({@link lecteur_pdf.menuBar.menuItems.ModeSynchronise mode Synchronisé})
*/
public static void previousPages() {
for (Fenetre ihm : FENETRE_LIST) ihm.getPdfPanel().pagePrecedente();
for (Fenetre ihm : FENETRE_LIST) {
ihm.getPdfPanel().pagePrecedente();
}
}
/**
* Lance l'application
*
* @param args non utilisé
*/
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 {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception ignored) {}
UIManager.setLookAndFeel(
"com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception ignored) {
}
GestionMode.setModeSepare(true);
newIhmPdf();
+68 -25
View File
@@ -14,7 +14,8 @@ import java.awt.*;
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 Tristan Nogaret
@@ -23,40 +24,82 @@ import java.util.ArrayList;
*/
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;
/** Liste les MenuItems de type NouvelleFenetre de l'application */
private static final ArrayList<NouvelleFenetre> nouvelleFenetreList = new ArrayList<>();
/** Liste les MenuItem de type ModeSepare de l'application */
private static final ArrayList<ModeSepare> modeSepareList = new ArrayList<>();
/** Liste les MenuItem de type ModeSynchronise de l'application */
private static final ArrayList<ModeSynchronise> modeSynchroniseList = new ArrayList<>();
/**
* Liste les {@link lecteur_pdf.menuBar.menuItems.MenuItem MenuItems}
* de type {@link NouvelleFenetre NouvelleFenetre} de l'application
*
* @see ArrayList
*/
private static final ArrayList<NouvelleFenetre> nouvelleFenetreList
= new ArrayList<>();
/**
* Référence les éléments 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
* Liste les {@link lecteur_pdf.menuBar.menuItems.MenuItem MenuItems}
* de type {@link ModeSepare ModeSepare} de l'application
*
* @see ArrayList
*/
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);
modeSepareList.add(separe);
modeSynchroniseList.add(synchronise);
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() {
return modeSepare;
}
/**
* 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) {
modeSepare = mode;
@@ -64,19 +107,19 @@ public class GestionMode {
}
/**
* Met à jour dans toutes les fenêtres ouvertes la checkbox du mode
* sélectionné
* Met à jour dans toutes les {@link Fenetre fenêtres} ouvertes la
* checkbox du mode sélectionné
*/
private static void updateMode() {
for (int i = 0; i < modeSepareList.size() ; i++) {
for (int i = 0; i < modeSepareList.size(); i++) {
modeSepareList.get(i).setSelected(modeSepare);
modeSynchroniseList.get(i).setSelected(!modeSepare);
}
}
/**
* Grise le bouton "Nouvelle Fenêtre" de toutes les fenêtres de
* l'application
* Grise le bouton "{@link NouvelleFenetre Nouvelle Fenêtre}" de toutes les
* {@link Fenetre fenêtres} de l'application
*/
public static void desactiverBtnNouvelleFenetre() {
for (NouvelleFenetre item : nouvelleFenetreList) {
@@ -86,8 +129,8 @@ public class GestionMode {
}
/**
* Dégrise le bouton "Nouvelle Fenêtre" de toutes les fenêtres de
* l'application
* Dégrise le bouton "{@link NouvelleFenetre Nouvelle Fenêtre}" de toutes
* les {@link Fenetre fenêtres} de l'application
*/
public static void activerBtnNouvelleFenetre() {
for (NouvelleFenetre item : nouvelleFenetreList) {
+25 -13
View File
@@ -10,7 +10,7 @@ import javax.swing.*;
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 Tristan Nogaret
@@ -23,28 +23,40 @@ public class Popup {
* Créé une nouvelle fenêtre comportant un message et
* deux boutons : Oui et Non
*
* @param parent La fenêtre parente de référence
* @param titre Titre de la fenêtre
* @param message Message affiché dans la fenêtre
* @return JOptionPane.YES_OPTION si oui est cliqué, JOptionPane.NO_OPTION si non est cliqué
* @param parent La {@link Fenetre fenêtre} parente de référence
* @param titre Titre de la {@link Fenetre 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é
* @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"};
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]);
}
/**
* Créé une nouvelle fenêtre comportant un message d'erreur avec un
* bouton OK
* Créé une nouvelle {@link Fenetre fenêtre} comportant un message
* d'erreur avec un bouton OK
*
* @param parent La fenêtre parente de référence
* @param titre Titre de la fenêtre
* @param parent La {@link Fenetre fenêtre} parente de référence
* @param titre Titre de la {@link Fenetre fenêtre}
* @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();
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;
/**
* 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 Tristan NOGARET
* @author Lucàs VABRE
* @author Noé VILLENEUVE
* @see JFileChooser
* @see File
* @see FileNameExtensionFilter
* @see FileSystemView
*/
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";
/** Description du filtre */
/**
* Description du filtre
*
* @see FileNameExtensionFilter
*/
private static final String DESCRIPTION = "PDF files (*.pdf)";
/** Extension de fichier filtré */
/**
* Extension de fichier filtré
*/
private static final String EXTENSION = "pdf";
/** Valeur du bouton OK */
/**
* Valeur du bouton Ok
*/
private static final String BOUTON_OK = "Ouvrir";
/** Valeur du bouton Annuler */
/**
* Valeur du bouton 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";
/**
* Méthode qui créée une fenêtre pour que l'utilisateur choisisse un
* fichier PDF
* Méthode qui créée une {@link Fenetre fenêtre} pour que l'utilisateur
* choisisse un fichier PDF
*
* @return le fichier choisi par l'utilisateur, null si aucun fichier
* n'est choisi
* @param parent La {@link Fenetre fenêtre} parente de référence
* @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) {
@@ -26,16 +26,12 @@ public class FermerFichier extends MenuItem {
/**
* Titre de la {@link lecteur_pdf.Popup Popup} lors de la fermeture d'un
* document
*
* @see javax.swing.Popup
*/
public static final String TITRE = "Fermeture du document";
/**
* Message de la {@link lecteur_pdf.Popup Popup} lors de la fermeture
* d'un {@link lecteur_pdf.pdf.DocumentPdf document}
*
* @see javax.swing.Popup
*/
public static final String MESSAGE
= "Êtes-vous sûr de vouloir fermer le document ?";