org.jpedal.jbig2.examples.viewer.NavigationToolbar Maven / Gradle / Ivy
/**
* ===========================================
* Java Pdf Extraction Decoding Access Library
* ===========================================
*
* Project Info: http://www.jpedal.org
* (C) Copyright 1997-2008, IDRsolutions and Contributors.
* Main Developer: Simon Barnett
*
* This file is part of JPedal
*
* Copyright (c) 2008, IDRsolutions
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the IDRsolutions nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY IDRsolutions ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL IDRsolutions BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Other JBIG2 image decoding implementations include
* jbig2dec (http://jbig2dec.sourceforge.net/)
* xpdf (http://www.foolabs.com/xpdf/)
*
* The final draft JBIG2 specification can be found at http://www.jpeg.org/public/fcd14492.pdf
*
* All three of the above resources were used in the writing of this software, with methodologies,
* processes and inspiration taken from all three.
*
* ---------------
* NavigationToolbar.java
* ---------------
*/
package org.jpedal.jbig2.examples.viewer;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import org.jpedal.jbig2.JBIG2Decoder;
public class NavigationToolbar extends JToolBar {
protected static final int FIRSTPAGE = 0;
protected static final int FBACKPAGE = 1;
protected static final int BACKPAGE = 2;
protected static final int FORWARDPAGE = 3;
protected static final int FFORWARDPAGE = 4;
protected static final int LASTPAGE = 5;
protected static final int SETPAGE = 6;
protected JTextField currentPageBox = new JTextField(4);
private JLabel totalNoOfPages = new JLabel();
private JBIG2Viewer viewer;
public NavigationToolbar(JBIG2Viewer viewer) {
this.viewer = viewer;
totalNoOfPages.setText("of 1");
currentPageBox.setText("1");
add(Box.createHorizontalGlue());
addButton("Rewind To Start", "/org/jpedal/jbig2/examples/viewer/res/start.gif", FIRSTPAGE);
addButton("Back 10 Pages", "/org/jpedal/jbig2/examples/viewer/res/fback.gif", FBACKPAGE);
addButton("Back", "/org/jpedal/jbig2/examples/viewer/res/back.gif", BACKPAGE);
add(new JLabel("Page"));
currentPageBox.setMaximumSize(new Dimension(5, 50));
currentPageBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
executeCommand(SETPAGE);
}
});
add(currentPageBox);
add(totalNoOfPages);
addButton("Forward", "/org/jpedal/jbig2/examples/viewer/res/forward.gif", FORWARDPAGE);
addButton("Forward 10 Pages", "/org/jpedal/jbig2/examples/viewer/res/fforward.gif", FFORWARDPAGE);
addButton("Fast Forward To End", "/org/jpedal/jbig2/examples/viewer/res/end.gif", LASTPAGE);
add(Box.createHorizontalGlue());
// close();
}
public void setTotalNoOfPages(int noOfPages) {
totalNoOfPages.setText("of " + noOfPages);
}
public void setCurrentPage(int currentPage) {
currentPageBox.setText(String.valueOf(currentPage));
}
private void addButton(String tooltip, String url, final int type) {
JButton button = new JButton();
button.setIcon(new ImageIcon(getClass().getResource(url)));
button.setToolTipText(tooltip);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
executeCommand(type);
}
});
add(button);
}
public void executeCommand(int type) {
JBIG2Decoder decoder = viewer.getDecoder();
switch (type) {
case FIRSTPAGE:
viewer.displayPage(1);
break;
case FBACKPAGE:
viewer.displayPage(viewer.getCurrentPage() - 10);
break;
case BACKPAGE:
viewer.displayPage(viewer.getCurrentPage() - 1);
break;
case FORWARDPAGE:
viewer.displayPage(viewer.getCurrentPage() + 1);
break;
case FFORWARDPAGE:
viewer.displayPage(viewer.getCurrentPage() + 10);
break;
case LASTPAGE:
viewer.displayPage(decoder.getNumberOfPages());
break;
case SETPAGE:
int page = -1;
try {
page = Integer.parseInt(currentPageBox.getText());
} catch (NumberFormatException e) {
e.printStackTrace();
}
if (page >= 1 && page <= decoder.getNumberOfPages()) {
viewer.displayPage(page);
} else {
currentPageBox.setText(String.valueOf(viewer.getCurrentPage()));
}
break;
}
}
}