From 403236b72182053f0d0ada083535b1ae8d2be87e Mon Sep 17 00:00:00 2001 From: LucasV-IUT Date: Thu, 24 Feb 2022 13:58:20 +0100 Subject: [PATCH] =?UTF-8?q?Mode=20s=C3=A9par=C3=A9/Synchronis=C3=A9=20ok?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Ajout d'une classe MenuItem qui est utilisé par tout les JMenuItems (utile pour les raccourcis claviers) - Ajout d'une classe Raccourcis claviers avec une hash map a compléter - Ajout de commentaires - Erreurs ouvertures et fermetures de fichier générés, ouverture et fermeture de fenêtre géré - Fermeture des pdf proprement - Fermeture de l'application lorsqu'il n'y a plus de fenêtre dans l'application --- src/lecteur_pdf/GestionPdf.java | 44 ++++- src/lecteur_pdf/IhmPdf.java | 57 +++---- src/lecteur_pdf/RaccourcisClavier.java | 12 ++ src/lecteur_pdf/menuBar/menu/MenuMode.java | 23 ++- .../menuBar/menuItems/FermerFichier.java | 20 +-- .../menuBar/menuItems/MenuItem.java | 30 ++++ .../menuBar/menuItems/ModeSepare.java | 5 +- .../menuBar/menuItems/ModeSynchronise.java | 4 +- .../menuBar/menuItems/ModifierTouches.java | 15 +- .../menuBar/menuItems/NouvelleFenetre.java | 9 +- .../menuBar/menuItems/OuvrirFichier.java | 27 ++- .../menuBar/menuItems/PagePrecedente.java | 12 +- .../menuBar/menuItems/PageSuivante.java | 12 +- .../menuBar/menuItems/PleinEcran.java | 14 +- .../menuBar/menuItems/Quitter.java | 16 +- .../menuBar/menuItems/ZoomDefaut.java | 18 +- .../menuBar/menuItems/ZoomMoins.java | 18 +- .../menuBar/menuItems/ZoomPlus.java | 19 +-- src/lecteur_pdf/pdf/PdfLoader.java | 1 + src/lecteur_pdf/pdf/PdfPanel.java | 155 ++++++++++++------ 20 files changed, 310 insertions(+), 201 deletions(-) create mode 100644 src/lecteur_pdf/RaccourcisClavier.java create mode 100644 src/lecteur_pdf/menuBar/menuItems/MenuItem.java diff --git a/src/lecteur_pdf/GestionPdf.java b/src/lecteur_pdf/GestionPdf.java index b26a528..d88b5fd 100644 --- a/src/lecteur_pdf/GestionPdf.java +++ b/src/lecteur_pdf/GestionPdf.java @@ -5,37 +5,69 @@ import java.util.ArrayList; import java.util.List; public class GestionPdf { + public static String titreApplication = "LPDA"; + public static boolean modeDoubleAffichage = false; public static boolean modeSynchronise = false; public static final int maxPdf = 2; public static final List ihmPdfList = new ArrayList<>(); + public static void setModeSynchronise(boolean value) { + modeSynchronise = value; + for(IhmPdf ihm : ihmPdfList) { + ihm.modeSepare.setSelected(!value); + ihm.modeSynchronise.setSelected(value); + } + } + + /** + * Crée une nouvelle fenêtre + */ public static void newIhmPdf() { if (ihmPdfList.size() >= maxPdf) { - throw new IllegalStateException(); + // TODO Message erreur "nombre max de fenêtre atteint" + return; } try { - IhmPdf ihm = new IhmPdf(SelectionnerFichier.ouvrirFichier()); + IhmPdf ihm = new IhmPdf(); ihmPdfList.add(ihm); } catch (IOException ignored) {} modeDoubleAffichage = ihmPdfList.size() >= 2; } - public static void main(String[] args) { - newIhmPdf(); - } - + /** + * Methode affiche la page suivante en mode Synchronisé + */ public static void nextPages() { for (IhmPdf ihm : ihmPdfList) { ihm.pdfPanel.nextPage(); } } + /** + * Methode affiche la page précédente en mode Synchronisé + */ public static void previousPages() { for (IhmPdf ihm : ihmPdfList) { ihm.pdfPanel.previousPage(); } } + + public void chargerRaccourcisClaviers() { + // TODO changer les raccourcis clavier a partir d'un fichier + } + + public void sauvegarderRaccourcisClaviers() { + // TODO sauvegarder les raccourcis clavier dans un fichier + } + + /** + * Lance l'application + * @param args non utilisé + */ + public static void main(String[] args) { + newIhmPdf(); + } } diff --git a/src/lecteur_pdf/IhmPdf.java b/src/lecteur_pdf/IhmPdf.java index e6c29e7..c0840de 100644 --- a/src/lecteur_pdf/IhmPdf.java +++ b/src/lecteur_pdf/IhmPdf.java @@ -7,11 +7,14 @@ package lecteur_pdf; import lecteur_pdf.menuBar.MenuBar; +import lecteur_pdf.menuBar.menuItems.ModeSepare; +import lecteur_pdf.menuBar.menuItems.ModeSynchronise; import lecteur_pdf.pdf.PdfPanel; import javax.swing.*; import java.awt.*; -import java.io.File; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import java.io.IOException; /** @@ -23,41 +26,38 @@ public class IhmPdf extends JFrame { PdfPanel pdfPanel; MenuBar menuBar; + ModeSepare modeSepare; + ModeSynchronise modeSynchronise; - public IhmPdf(File pdfFile) throws IOException { - super(pdfFile.getName()); + public IhmPdf() throws IOException { + super(GestionPdf.titreApplication); /* Déclaration des attributs */ menuBar = new MenuBar(this); - pdfPanel = new PdfPanel(pdfFile); + pdfPanel = new PdfPanel(); /* Hierarchie */ setContentPane(pdfPanel); setJMenuBar(menuBar); + /* Action à la fermeture de la fenêtre */ + this.addWindowListener(new WindowAdapter(){ + @Override + public void windowClosing(WindowEvent et) { + quitter(); + } + }); + setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); + /* Render de la Frame */ - setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); pack(); setVisible(true); } - public void fermerFichier() { - try { - pdfPanel = new PdfPanel(null); - validate(); - } catch (IOException ignored) { - } - } - public PdfPanel getPdfPanel() { return pdfPanel; } - public void ouvrirFichier() throws IOException { - File fichier = SelectionnerFichier.ouvrirFichier(); - pdfPanel = new PdfPanel(fichier); - validate(); - } private boolean fullscreen = false; private GraphicsDevice device; @@ -78,21 +78,16 @@ public class IhmPdf extends JFrame { } public void quitter() { + pdfPanel.dechargerPdf(); + GestionPdf.ihmPdfList.remove(this); dispose(); + if (GestionPdf.ihmPdfList.size() == 0) { + System.exit(0); + } } - public void zoomDefaut() { - pdfPanel.updateScale(1.0f); - validate(); - } - - public void zoomMoins() { - pdfPanel.updateScale(0.5f); - validate(); - } - - public void zoomPlus() { - pdfPanel.updateScale(1.5f); - validate(); + public void setMode(ModeSepare modeSepare, ModeSynchronise modeSynchronise) { + this.modeSepare = modeSepare; + this.modeSynchronise = modeSynchronise; } } diff --git a/src/lecteur_pdf/RaccourcisClavier.java b/src/lecteur_pdf/RaccourcisClavier.java new file mode 100644 index 0000000..c71e81c --- /dev/null +++ b/src/lecteur_pdf/RaccourcisClavier.java @@ -0,0 +1,12 @@ +package lecteur_pdf; + +import javax.swing.*; +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +public class RaccourcisClavier implements Serializable { + + public static Map gestionnaireRaccourcis = new HashMap<>(); + +} diff --git a/src/lecteur_pdf/menuBar/menu/MenuMode.java b/src/lecteur_pdf/menuBar/menu/MenuMode.java index eb0e97c..abb062d 100644 --- a/src/lecteur_pdf/menuBar/menu/MenuMode.java +++ b/src/lecteur_pdf/menuBar/menu/MenuMode.java @@ -1,7 +1,10 @@ package lecteur_pdf.menuBar.menu; +import lecteur_pdf.GestionPdf; import lecteur_pdf.IhmPdf; -import lecteur_pdf.menuBar.menuItems.*; +import lecteur_pdf.menuBar.menuItems.ModeSepare; +import lecteur_pdf.menuBar.menuItems.ModeSynchronise; +import lecteur_pdf.menuBar.menuItems.NouvelleFenetre; import javax.swing.*; @@ -10,7 +13,21 @@ public class MenuMode extends JMenu { super("Mode"); // Ajoute les menu items add(new NouvelleFenetre(parent)); - add(new ModeSepare(parent)); - add(new ModeSynchronise(parent)); + + ButtonGroup groupe = new ButtonGroup(); + ModeSepare modeSepare = new ModeSepare(parent); + ModeSynchronise modeSynchronise = new ModeSynchronise(parent); + + add(modeSepare); + add(modeSynchronise); + + groupe.add(modeSepare); + groupe.add(modeSynchronise); + + + modeSepare.setSelected(!GestionPdf.modeSynchronise); + modeSynchronise.setSelected(GestionPdf.modeSynchronise); + + parent.setMode(modeSepare, modeSynchronise); } } \ No newline at end of file diff --git a/src/lecteur_pdf/menuBar/menuItems/FermerFichier.java b/src/lecteur_pdf/menuBar/menuItems/FermerFichier.java index 4fe372b..e4ddcc2 100644 --- a/src/lecteur_pdf/menuBar/menuItems/FermerFichier.java +++ b/src/lecteur_pdf/menuBar/menuItems/FermerFichier.java @@ -1,23 +1,21 @@ package lecteur_pdf.menuBar.menuItems; +import lecteur_pdf.GestionPdf; import lecteur_pdf.IhmPdf; -import javax.swing.*; import java.awt.event.KeyEvent; -public class FermerFichier extends JMenuItem { - - IhmPdf parent; +public class FermerFichier extends MenuItem { public FermerFichier(IhmPdf parent) { - super("Fermer"); - this.parent = parent; + super(parent, "Fermer"); - addActionListener(e -> {parent.fermerFichier();}); - - KeyStroke raccourciFermer = KeyStroke.getKeyStroke(KeyEvent.VK_X, - KeyEvent.CTRL_DOWN_MASK); - setAccelerator(raccourciFermer); + addActionListener(e -> { + parent.getPdfPanel().dechargerPdf(); + parent.setTitle(GestionPdf.titreApplication); + parent.pack(); + }); + setRaccourcis(KeyEvent.VK_X, KeyEvent.CTRL_DOWN_MASK); } } diff --git a/src/lecteur_pdf/menuBar/menuItems/MenuItem.java b/src/lecteur_pdf/menuBar/menuItems/MenuItem.java new file mode 100644 index 0000000..4f5d402 --- /dev/null +++ b/src/lecteur_pdf/menuBar/menuItems/MenuItem.java @@ -0,0 +1,30 @@ +package lecteur_pdf.menuBar.menuItems; + +import lecteur_pdf.IhmPdf; +import lecteur_pdf.RaccourcisClavier; + +import javax.swing.*; + +public class MenuItem extends JMenuItem { + IhmPdf parent; + + public MenuItem(IhmPdf parent, String name) { + super(name); + this.parent = parent; + + } + + public void setRaccourcis(int key) { + KeyStroke raccourcis = KeyStroke.getKeyStroke((char)key); + setAccelerator(raccourcis); + + RaccourcisClavier.gestionnaireRaccourcis.put(this, raccourcis); + } + + public void setRaccourcis(int key, int mask) { + KeyStroke raccourcis = KeyStroke.getKeyStroke(key, mask); + setAccelerator(raccourcis); + + RaccourcisClavier.gestionnaireRaccourcis.put(this, raccourcis); + } +} diff --git a/src/lecteur_pdf/menuBar/menuItems/ModeSepare.java b/src/lecteur_pdf/menuBar/menuItems/ModeSepare.java index 6f9586c..132d987 100644 --- a/src/lecteur_pdf/menuBar/menuItems/ModeSepare.java +++ b/src/lecteur_pdf/menuBar/menuItems/ModeSepare.java @@ -5,7 +5,8 @@ import lecteur_pdf.IhmPdf; import javax.swing.*; -public class ModeSepare extends JMenuItem { +public class ModeSepare extends JRadioButtonMenuItem { + IhmPdf parent; public ModeSepare(IhmPdf parent) { @@ -13,7 +14,7 @@ public class ModeSepare extends JMenuItem { this.parent = parent; addActionListener(e -> { - GestionPdf.modeSynchronise = false; + GestionPdf.setModeSynchronise(false); }); // TODO ajouter une checkbox pour indiquer si l'option est utilisé diff --git a/src/lecteur_pdf/menuBar/menuItems/ModeSynchronise.java b/src/lecteur_pdf/menuBar/menuItems/ModeSynchronise.java index e98e90a..39de33f 100644 --- a/src/lecteur_pdf/menuBar/menuItems/ModeSynchronise.java +++ b/src/lecteur_pdf/menuBar/menuItems/ModeSynchronise.java @@ -5,7 +5,7 @@ import lecteur_pdf.IhmPdf; import javax.swing.*; -public class ModeSynchronise extends JMenuItem { +public class ModeSynchronise extends JRadioButtonMenuItem { IhmPdf parent; @@ -14,7 +14,7 @@ public class ModeSynchronise extends JMenuItem { this.parent = parent; addActionListener(e -> { - GestionPdf.modeSynchronise = true; + GestionPdf.setModeSynchronise(true); }); // TODO ajouter une checkbox pour indiquer si l'option est utilisé diff --git a/src/lecteur_pdf/menuBar/menuItems/ModifierTouches.java b/src/lecteur_pdf/menuBar/menuItems/ModifierTouches.java index 3a92ac9..caf4ecf 100644 --- a/src/lecteur_pdf/menuBar/menuItems/ModifierTouches.java +++ b/src/lecteur_pdf/menuBar/menuItems/ModifierTouches.java @@ -2,17 +2,14 @@ package lecteur_pdf.menuBar.menuItems; import lecteur_pdf.IhmPdf; -import javax.swing.*; -import java.awt.event.KeyEvent; - -public class ModifierTouches extends JMenuItem { - - IhmPdf parent; +public class ModifierTouches extends MenuItem { public ModifierTouches(IhmPdf parent) { - super("Modifier Touches"); - this.parent = parent; + super(parent, "Modifier Touches"); + + addActionListener(e -> { + // TODO Ouverture de la fenêtre de dialogue de modification des touches + }); - // TODO ajouter l'options de modif de touches } } diff --git a/src/lecteur_pdf/menuBar/menuItems/NouvelleFenetre.java b/src/lecteur_pdf/menuBar/menuItems/NouvelleFenetre.java index 055142f..97643d6 100644 --- a/src/lecteur_pdf/menuBar/menuItems/NouvelleFenetre.java +++ b/src/lecteur_pdf/menuBar/menuItems/NouvelleFenetre.java @@ -3,15 +3,10 @@ package lecteur_pdf.menuBar.menuItems; import lecteur_pdf.GestionPdf; import lecteur_pdf.IhmPdf; -import javax.swing.*; - -public class NouvelleFenetre extends JMenuItem { - - IhmPdf parent; +public class NouvelleFenetre extends MenuItem { public NouvelleFenetre(IhmPdf parent) { - super("Nouvelle Fenêtre"); - this.parent = parent; + super(parent, "Nouvelle Fenêtre"); addActionListener(e -> { /* Essaye de créer une nouvelle fenêtre */ diff --git a/src/lecteur_pdf/menuBar/menuItems/OuvrirFichier.java b/src/lecteur_pdf/menuBar/menuItems/OuvrirFichier.java index d9b63fe..64d758f 100644 --- a/src/lecteur_pdf/menuBar/menuItems/OuvrirFichier.java +++ b/src/lecteur_pdf/menuBar/menuItems/OuvrirFichier.java @@ -1,29 +1,28 @@ package lecteur_pdf.menuBar.menuItems; import lecteur_pdf.IhmPdf; +import lecteur_pdf.SelectionnerFichier; -import javax.swing.*; import java.awt.event.KeyEvent; -import java.io.IOException; +import java.io.File; -public class OuvrirFichier extends JMenuItem { - - IhmPdf parent; +public class OuvrirFichier extends MenuItem { public OuvrirFichier(IhmPdf parent) { - super("Ouvrir"); - this.parent = parent; + super(parent, "Ouvrir"); addActionListener(e -> { - try { - parent.ouvrirFichier(); - } catch (IOException ex) { - ex.printStackTrace(); + File fichier = SelectionnerFichier.ouvrirFichier(); + if (fichier != null) { + if (parent.getPdfPanel().chargerPdf(fichier)) { + parent.setTitle(fichier.getName()); + parent.pack(); + } else { + // TODO Erreur fichier n'as pas pu etre chargé + } } }); - KeyStroke raccourciOuvrir = KeyStroke.getKeyStroke(KeyEvent.VK_O, - KeyEvent.CTRL_DOWN_MASK); - setAccelerator(raccourciOuvrir); + setRaccourcis(KeyEvent.VK_O, KeyEvent.CTRL_DOWN_MASK); } } diff --git a/src/lecteur_pdf/menuBar/menuItems/PagePrecedente.java b/src/lecteur_pdf/menuBar/menuItems/PagePrecedente.java index 128ce74..f9fa67b 100644 --- a/src/lecteur_pdf/menuBar/menuItems/PagePrecedente.java +++ b/src/lecteur_pdf/menuBar/menuItems/PagePrecedente.java @@ -3,15 +3,10 @@ package lecteur_pdf.menuBar.menuItems; import lecteur_pdf.GestionPdf; import lecteur_pdf.IhmPdf; -import javax.swing.*; - -public class PagePrecedente extends JMenuItem { - - IhmPdf parent; +public class PagePrecedente extends MenuItem { public PagePrecedente(IhmPdf parent) { - super("Page précédente"); - this.parent = parent; + super(parent,"Page précédente"); addActionListener(e -> { if (GestionPdf.modeDoubleAffichage && GestionPdf.modeSynchronise) { @@ -21,7 +16,6 @@ public class PagePrecedente extends JMenuItem { } }); - KeyStroke raccourciPagePrecedente = KeyStroke.getKeyStroke('l'); - setAccelerator(raccourciPagePrecedente); + setRaccourcis('l'); } } diff --git a/src/lecteur_pdf/menuBar/menuItems/PageSuivante.java b/src/lecteur_pdf/menuBar/menuItems/PageSuivante.java index a2a7a8b..ef7fb31 100644 --- a/src/lecteur_pdf/menuBar/menuItems/PageSuivante.java +++ b/src/lecteur_pdf/menuBar/menuItems/PageSuivante.java @@ -3,15 +3,10 @@ package lecteur_pdf.menuBar.menuItems; import lecteur_pdf.GestionPdf; import lecteur_pdf.IhmPdf; -import javax.swing.*; - -public class PageSuivante extends JMenuItem { - - IhmPdf parent; +public class PageSuivante extends MenuItem { public PageSuivante(IhmPdf parent) { - super("Page suivante"); - this.parent = parent; + super(parent,"Page suivante"); addActionListener(e -> { if (GestionPdf.modeDoubleAffichage && GestionPdf.modeSynchronise) { @@ -21,7 +16,6 @@ public class PageSuivante extends JMenuItem { } }); - KeyStroke raccourciPageSuivante = KeyStroke.getKeyStroke('m'); - setAccelerator(raccourciPageSuivante); + setRaccourcis('m'); } } diff --git a/src/lecteur_pdf/menuBar/menuItems/PleinEcran.java b/src/lecteur_pdf/menuBar/menuItems/PleinEcran.java index eded438..af3f2f4 100644 --- a/src/lecteur_pdf/menuBar/menuItems/PleinEcran.java +++ b/src/lecteur_pdf/menuBar/menuItems/PleinEcran.java @@ -2,20 +2,16 @@ package lecteur_pdf.menuBar.menuItems; import lecteur_pdf.IhmPdf; -import javax.swing.*; import java.awt.event.KeyEvent; -public class PleinEcran extends JMenuItem { - - IhmPdf parent; +public class PleinEcran extends MenuItem { public PleinEcran(IhmPdf parent) { - super("Mode Plein Ecran"); - this.parent = parent; - KeyStroke raccourciPleinEcran = KeyStroke.getKeyStroke(KeyEvent.VK_F11, - 0); - setAccelerator(raccourciPleinEcran); + super(parent, "Mode Plein Ecran"); + addActionListener(e -> {parent.pleinEcran();}); + setRaccourcis(KeyEvent.VK_F11); + } } diff --git a/src/lecteur_pdf/menuBar/menuItems/Quitter.java b/src/lecteur_pdf/menuBar/menuItems/Quitter.java index 50e87c8..0101edf 100644 --- a/src/lecteur_pdf/menuBar/menuItems/Quitter.java +++ b/src/lecteur_pdf/menuBar/menuItems/Quitter.java @@ -2,22 +2,18 @@ package lecteur_pdf.menuBar.menuItems; import lecteur_pdf.IhmPdf; -import javax.swing.*; import java.awt.event.KeyEvent; -public class Quitter extends JMenuItem { - - IhmPdf parent; +public class Quitter extends MenuItem { public Quitter(IhmPdf parent) { - super("Quitter"); - this.parent = parent; + super(parent, "Quitter"); - addActionListener(e -> {parent.quitter();}); + addActionListener(e -> { + parent.quitter(); + }); - KeyStroke raccourciQuitter = KeyStroke.getKeyStroke(KeyEvent.VK_Q, - KeyEvent.CTRL_DOWN_MASK); - setAccelerator(raccourciQuitter); + setRaccourcis(KeyEvent.VK_Q, KeyEvent.CTRL_DOWN_MASK); } } diff --git a/src/lecteur_pdf/menuBar/menuItems/ZoomDefaut.java b/src/lecteur_pdf/menuBar/menuItems/ZoomDefaut.java index 058254e..3a8d6a8 100644 --- a/src/lecteur_pdf/menuBar/menuItems/ZoomDefaut.java +++ b/src/lecteur_pdf/menuBar/menuItems/ZoomDefaut.java @@ -2,21 +2,19 @@ package lecteur_pdf.menuBar.menuItems; import lecteur_pdf.IhmPdf; -import javax.swing.*; import java.awt.event.KeyEvent; -public class ZoomDefaut extends JMenuItem { - - IhmPdf parent; +public class ZoomDefaut extends MenuItem { public ZoomDefaut(IhmPdf parent) { - super("Zoom 100%"); - this.parent = parent; + super(parent, "Zoom 100%"); - KeyStroke raccourciZoomDefaut = KeyStroke.getKeyStroke(KeyEvent.VK_L, - KeyEvent.CTRL_DOWN_MASK); - setAccelerator(raccourciZoomDefaut); - addActionListener(e -> {parent.zoomDefaut();}); + addActionListener(e -> { + parent.getPdfPanel().updateScale(1.0f); + parent.validate(); + }); + + setRaccourcis(KeyEvent.VK_L, KeyEvent.CTRL_DOWN_MASK); } diff --git a/src/lecteur_pdf/menuBar/menuItems/ZoomMoins.java b/src/lecteur_pdf/menuBar/menuItems/ZoomMoins.java index 9800536..6a5ee96 100644 --- a/src/lecteur_pdf/menuBar/menuItems/ZoomMoins.java +++ b/src/lecteur_pdf/menuBar/menuItems/ZoomMoins.java @@ -2,21 +2,19 @@ package lecteur_pdf.menuBar.menuItems; import lecteur_pdf.IhmPdf; -import javax.swing.*; import java.awt.event.KeyEvent; -public class ZoomMoins extends JMenuItem { - - IhmPdf parent; +public class ZoomMoins extends MenuItem { public ZoomMoins(IhmPdf parent) { - super("Zoom 50%"); - this.parent = parent; + super(parent, "Zoom 50%"); - KeyStroke raccourciZoomMoins = KeyStroke.getKeyStroke(KeyEvent.VK_K, - KeyEvent.CTRL_DOWN_MASK); - setAccelerator(raccourciZoomMoins); - addActionListener(e -> {parent.zoomMoins();}); + addActionListener(e -> { + parent.getPdfPanel().updateScale(0.5f); + parent.validate(); + }); + + setRaccourcis(KeyEvent.VK_K, KeyEvent.CTRL_DOWN_MASK); } } diff --git a/src/lecteur_pdf/menuBar/menuItems/ZoomPlus.java b/src/lecteur_pdf/menuBar/menuItems/ZoomPlus.java index c4cdbc3..2e09a06 100644 --- a/src/lecteur_pdf/menuBar/menuItems/ZoomPlus.java +++ b/src/lecteur_pdf/menuBar/menuItems/ZoomPlus.java @@ -2,20 +2,19 @@ package lecteur_pdf.menuBar.menuItems; import lecteur_pdf.IhmPdf; -import javax.swing.*; import java.awt.event.KeyEvent; -public class ZoomPlus extends JMenuItem { - - IhmPdf parent; +public class ZoomPlus extends MenuItem { public ZoomPlus(IhmPdf parent) { - super("Zoom 150%"); - this.parent = parent; - KeyStroke raccourciZoomPlus = KeyStroke.getKeyStroke(KeyEvent.VK_M, - KeyEvent.CTRL_DOWN_MASK); - setAccelerator(raccourciZoomPlus); - addActionListener(e -> {parent.zoomPlus();}); + super(parent, "Zoom 150%"); + + addActionListener(e -> { + parent.getPdfPanel().updateScale(1.5f); + parent.validate(); + }); + + setRaccourcis(KeyEvent.VK_M, KeyEvent.CTRL_DOWN_MASK); } } \ No newline at end of file diff --git a/src/lecteur_pdf/pdf/PdfLoader.java b/src/lecteur_pdf/pdf/PdfLoader.java index db6965f..d78f1c2 100644 --- a/src/lecteur_pdf/pdf/PdfLoader.java +++ b/src/lecteur_pdf/pdf/PdfLoader.java @@ -29,6 +29,7 @@ public class PdfLoader { public void close() { try { + renderer = null; document.close(); } catch(IOException ignored) {} } diff --git a/src/lecteur_pdf/pdf/PdfPanel.java b/src/lecteur_pdf/pdf/PdfPanel.java index 3b4c795..ea6d729 100644 --- a/src/lecteur_pdf/pdf/PdfPanel.java +++ b/src/lecteur_pdf/pdf/PdfPanel.java @@ -9,7 +9,7 @@ public class PdfPanel extends JPanel { private int currentPage; private float currentScale; - final PdfLoader pdfLoader; + private PdfLoader pdfLoader; private JButton suivantButton; private JButton precedentButton; @@ -19,68 +19,125 @@ public class PdfPanel extends JPanel { private JScrollPane scrollPane; private JTextField indexPage; - public PdfPanel(File pdfFile) throws IOException { + public PdfPanel() { super(); this.currentScale = 1.0f; scrollPane.setMaximumSize(Toolkit.getDefaultToolkit().getScreenSize()); - /* Définitions des arguments */ - pdfLoader = new PdfLoader(pdfFile); - if (pdfFile != null) { - defaultPage(); + // TODO supprimer le form et creer les éléments 1 par 1 - /* Hierarchie */ - add(mainPanel); + /* Hierarchie */ + add(mainPanel); - /* Actions */ - suivantButton.addActionListener(e -> nextPage()); - precedentButton.addActionListener(e -> previousPage()); - indexPage.addActionListener(e -> updatePageInput()); - } + /* Actions */ + suivantButton.addActionListener(e -> nextPage()); + precedentButton.addActionListener(e -> previousPage()); - } + indexPage.addActionListener(e -> { - public void updateScale(float scale) { - this.currentScale = scale; - updatePage(currentPage); - } + String saisie = indexPage.getText(); - private void defaultPage() { - updatePage(0); - } + int index = Integer.parseInt(saisie); - public void nextPage() { - updatePage(currentPage + 1); - } - - public void previousPage() { - updatePage(currentPage - 1); - } - - public void updatePage(int index) { - try { - if (pdfLoader == null) throw new IllegalStateException(); - page.setIcon(new ImageIcon(pdfLoader.renderPage(index, - currentScale))); - currentPage = index; - pageIndicator.setText(String.format("%d/%d", currentPage + 1, - pdfLoader.getNbPages())); - } catch (IOException | IllegalArgumentException | IllegalStateException ignored) {} - } - - public void updatePageInput() { - String input = indexPage.getText(); - try { - int index = Integer.parseInt(input); - if (index > 0 && index <= pdfLoader.getNbPages()) { - updatePage(index - 1); + /* Si cet entier est valide on change de page sinon on efface le contenu de la saisie */ + if (isPageValide(index)) { + setPage(index - 1); } else { - throw new Exception(); + indexPage.setText(null); } - } catch (Exception e) { - indexPage.setText(""); + }); + + } + + /** + * Prédicat qui vérifie si un index de page est valide pour le PDF courrant + * @param index Entier correspondant a l'indice du numéro de page à tester + * @return true si le prédicat est vérifié, false sinon + */ + private boolean isPageValide(int index) { + if (pdfLoader == null) return false; + return 0 <= index && index < pdfLoader.getNbPages(); + } + + /** + * Methode qui permet de charger un PDF dans le fenêtre courrante + * @param pdfFile Le fichier PDF à charger + * @return true si le PDF à pu se charger, false sinon + */ + public boolean chargerPdf(File pdfFile) { + try { + setPdfLoader(new PdfLoader(pdfFile)); + setPage(0); + } catch (IOException e) { + return false; } + return true; + } + + public void setPdfLoader(PdfLoader pdfLoader) { + this.pdfLoader = pdfLoader; + } + + public void dechargerPdf() { + if (pdfLoader == null) { + return; + } + + /* Ferme le loader et l'efface */ + pdfLoader.close(); + pdfLoader = null; + + /* Efface l'image de la page */ + page.setIcon(null); + currentPage = 0; + + /* Interface Vide */ + indexPage.setText(""); + pageIndicator.setText("/ -"); + + validate(); + } + + /** + * Change la taille de la page courrante + * @param scale Valeur flottante (1.00f == 100%) + */ + public void updateScale(float scale) { + currentScale = scale; + setPage(currentPage); + } + + /** + * Affiche la page suivante + */ + public void nextPage() { + setPage(currentPage + 1); + } + + /** + * Affiche la page suivante + */ + public void previousPage() { + setPage(currentPage - 1); + } + + /** + * Essaye de changer de page si possible, sinon ne fait rien + * @param index Le numéro de la page où l'on veut se rendre + */ + private void setPage(int index) { + if (!isPageValide(index)) return; + + try { + page.setIcon(new ImageIcon(pdfLoader.renderPage(index, currentScale))); + currentPage = index; + indexPage.setText(Integer.toString(currentPage +1)); + pageIndicator.setText(String.format("/%d", pdfLoader.getNbPages())); + } catch (IOException e) { + e.printStackTrace(); + } + } }