diff options
Diffstat (limited to 'platform/java/example/Viewer.java')
-rw-r--r-- | platform/java/example/Viewer.java | 203 |
1 files changed, 203 insertions, 0 deletions
diff --git a/platform/java/example/Viewer.java b/platform/java/example/Viewer.java new file mode 100644 index 00000000..91b0fa1d --- /dev/null +++ b/platform/java/example/Viewer.java @@ -0,0 +1,203 @@ +package example; + +import com.artifex.mupdf.fitz.*; + +import java.io.File; + +import java.awt.Frame; +import java.awt.Label; +import java.awt.Button; +import java.awt.Panel; +import java.awt.BorderLayout; +import java.awt.FlowLayout; +import java.awt.event.ActionListener; +import java.awt.event.WindowListener; +import java.awt.event.WindowEvent; +import java.awt.event.ActionEvent; + +import javax.swing.JFileChooser; +import javax.swing.filechooser.FileFilter; +import javax.swing.JOptionPane; + +public class Viewer extends Frame implements WindowListener, ActionListener +{ + protected Document doc; + protected Panel toolbar; + protected PageCanvas pageCanvas; + protected Label pageLabel; + protected Button firstButton, prevButton, nextButton, lastButton; + protected int pageCount; + protected int pageNumber; + + public Viewer(Document doc_) { + super("MuPDF"); + + this.doc = doc_; + + pageCount = doc.countPages(); + pageNumber = 0; + + setSize(600, 900); + setTitle("MuPDF: " + doc.getMetaData(Document.META_INFO_TITLE)); + + toolbar = new Panel(); + toolbar.setLayout(new FlowLayout(FlowLayout.LEFT)); + firstButton = new Button("|<"); + firstButton.addActionListener(this); + prevButton = new Button("<"); + prevButton.addActionListener(this); + nextButton = new Button(">"); + nextButton.addActionListener(this); + lastButton = new Button(">|"); + lastButton.addActionListener(this); + pageLabel = new Label(); + + toolbar.add(firstButton); + toolbar.add(prevButton); + toolbar.add(nextButton); + toolbar.add(lastButton); + toolbar.add(pageLabel); + + add(toolbar, BorderLayout.NORTH); + + addWindowListener(this); + + stuff(); + } + + public void stuff() { + pageLabel.setText("Page " + (pageNumber + 1) + " / " + pageCount); + if (pageCanvas != null) + remove(pageCanvas); + pageCanvas = new PageCanvas(doc.loadPage(pageNumber)); + add(pageCanvas, BorderLayout.CENTER); + validate(); + } + + public void actionPerformed(ActionEvent event) { + Object source = event.getSource(); + int oldPageNumber = pageNumber; + + if (source == firstButton) + pageNumber = 0; + if (source == lastButton) + pageNumber = pageCount - 1; + if (source == prevButton) { + pageNumber = pageNumber - 1; + if (pageNumber < 0) + pageNumber = 0; + } + if (source == nextButton) { + pageNumber = pageNumber + 1; + if (pageNumber >= pageCount) + pageNumber = pageCount - 1; + } + + if (pageNumber != oldPageNumber) + stuff(); + } + + public void windowClosing(WindowEvent event) { + System.exit(0); + } + + public void windowActivated(WindowEvent event) { } + public void windowDeactivated(WindowEvent event) { } + public void windowIconified(WindowEvent event) { } + public void windowDeiconified(WindowEvent event) { } + public void windowOpened(WindowEvent event) { } + public void windowClosed(WindowEvent event) { } + + public static void main(String[] args) + { + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setDialogTitle("Choose a file to open"); + fileChooser.setFileFilter(new FileFilter() + { + public String getDescription() + { + return "Supported files (*.pdf, *,xps, *.jpg, *.jpeg, *.png, *.epub, *.cbz, *.cbr)"; + } + + public boolean accept(File f) + { + if (f.isDirectory()) + return true; + + String filename = f.getName().toLowerCase(); + if (filename.endsWith(".pdf")) + return true; + if (filename.endsWith(".xps")) + return true; + if (filename.endsWith(".jpg")) + return true; + if (filename.endsWith(".jpeg")) + return true; + if (filename.endsWith(".png")) + return true; + if (filename.endsWith(".epub")) + return true; + if (filename.endsWith(".cbz")) + return true; + if (filename.endsWith(".cbr")) + return true; + + return false; + } + }); + + while (true) + { + try + { + // get a file to open + int result = fileChooser.showOpenDialog(null); + if (result == JFileChooser.APPROVE_OPTION) + { + // user selects a file + File selectedFile = fileChooser.getSelectedFile(); + if (selectedFile != null) + { + Document doc = new Document(selectedFile.getAbsolutePath()); + if (doc != null) + { + Viewer app = new Viewer(doc); + if (app != null) + { + app.setVisible(true); + return; + } + else + { + infoBox("Cannot create Viewer for "+selectedFile.getAbsolutePath(),"Error"); + } + } + else + { + infoBox("Cannot open "+selectedFile.getAbsolutePath(),"Error"); + } + } + else + { + infoBox("Selected file not found.","Error"); + } + } + else + { + infoBox("File selection cancelled.","Error"); + return; + } + + } + catch (Exception e) + { + infoBox("Exception: "+e.getMessage(),"Error"); + } + } + } + + private static void infoBox(String infoMessage, String titleBar) + { + JOptionPane.showMessageDialog(null, infoMessage, "InfoBox: " + titleBar, JOptionPane.INFORMATION_MESSAGE); + } +} |