/*
* JasperReports - Free Java Reporting Library.
* Copyright (C) 2001 - 2009 Jaspersoft Corporation. All rights reserved.
* http://www.jaspersoft.com
*
* Unless you have purchased a commercial license agreement from Jaspersoft,
* the following license terms apply:
*
* This program is part of JasperReports.
*
* JasperReports is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* JasperReports is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with JasperReports. If not, see <http://www.gnu.org/licenses/>.
*/
package net.sf.jasperreports.swing;
import java.awt.event.KeyListener;
import java.io.File;
import java.lang.reflect.Constructor;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.filechooser.FileFilter;
import net.sf.jasperreports.engine.JRConstants;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperPrintManager;
import net.sf.jasperreports.engine.util.JRClassLoader;
import net.sf.jasperreports.view.JRSaveContributor;
import net.sf.jasperreports.view.save.JRPrintSaveContributor;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* @author Teodor Danciu (teodord@users.sourceforge.net)
* @version $Id: JRViewerToolbar.java 3939 2010-08-20 09:52:00Z teodord $
*/
public class JRViewerToolbar extends JPanel implements JRViewerListener
{
private static final Log log = LogFactory.getLog(JRViewerToolbar.class);
private static final long serialVersionUID = JRConstants.SERIAL_VERSION_UID;
protected final JRViewerController viewerContext;
protected final float MIN_ZOOM = 0.5f;
protected final float MAX_ZOOM = 10f;
protected int zooms[] = {50, 75, 100, 125, 150, 175, 200, 250, 400, 800};
protected int defaultZoomIndex = 2;
protected List saveContributors = new ArrayList();
protected File lastFolder;
protected JRSaveContributor lastSaveContributor;
protected DecimalFormat zoomDecimalFormat = new DecimalFormat("#.##");
protected javax.swing.JToggleButton btnActualSize;
protected javax.swing.JButton btnFirst;
protected javax.swing.JToggleButton btnFitPage;
protected javax.swing.JToggleButton btnFitWidth;
protected javax.swing.JButton btnLast;
protected javax.swing.JButton btnNext;
protected javax.swing.JButton btnPrevious;
protected javax.swing.JButton btnPrint;
protected javax.swing.JButton btnReload;
protected javax.swing.JButton btnSave;
protected javax.swing.JButton btnZoomIn;
protected javax.swing.JButton btnZoomOut;
protected javax.swing.JComboBox cmbZoom;
protected javax.swing.JPanel pnlSep01;
protected javax.swing.JPanel pnlSep02;
protected javax.swing.JPanel pnlSep03;
protected javax.swing.JTextField txtGoTo;
public JRViewerToolbar(JRViewerController viewerContext)
{
this.viewerContext = viewerContext;
this.viewerContext.addListener(this);
initComponents();
initSaveContributors();
}
private void initComponents()
{
btnSave = new javax.swing.JButton();
btnPrint = new javax.swing.JButton();
btnReload = new javax.swing.JButton();
pnlSep01 = new javax.swing.JPanel();
btnFirst = new javax.swing.JButton();
btnPrevious = new javax.swing.JButton();
btnNext = new javax.swing.JButton();
btnLast = new javax.swing.JButton();
txtGoTo = new javax.swing.JTextField();
pnlSep02 = new javax.swing.JPanel();
btnActualSize = new javax.swing.JToggleButton();
btnFitPage = new javax.swing.JToggleButton();
btnFitWidth = new javax.swing.JToggleButton();
pnlSep03 = new javax.swing.JPanel();
btnZoomIn = new javax.swing.JButton();
btnZoomOut = new javax.swing.JButton();
cmbZoom = new javax.swing.JComboBox();
DefaultComboBoxModel model = new DefaultComboBoxModel();
for(int i = 0; i < zooms.length; i++)
{
model.addElement("" + zooms[i] + "%");
}
cmbZoom.setModel(model);
setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 0, 2));
btnSave.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/save.GIF")));
btnSave.setToolTipText(viewerContext.getBundleString("save"));
btnSave.setMargin(new java.awt.Insets(2, 2, 2, 2));
btnSave.setMaximumSize(new java.awt.Dimension(23, 23));
btnSave.setMinimumSize(new java.awt.Dimension(23, 23));
btnSave.setPreferredSize(new java.awt.Dimension(23, 23));
btnSave.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnSaveActionPerformed(evt);
}
});
add(btnSave);
btnPrint.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/print.GIF")));
btnPrint.setToolTipText(viewerContext.getBundleString("print"));
btnPrint.setMargin(new java.awt.Insets(2, 2, 2, 2));
btnPrint.setMaximumSize(new java.awt.Dimension(23, 23));
btnPrint.setMinimumSize(new java.awt.Dimension(23, 23));
btnPrint.setPreferredSize(new java.awt.Dimension(23, 23));
btnPrint.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnPrintActionPerformed(evt);
}
});
add(btnPrint);
btnReload.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/reload.GIF")));
btnReload.setToolTipText(viewerContext.getBundleString("reload"));
btnReload.setMargin(new java.awt.Insets(2, 2, 2, 2));
btnReload.setMaximumSize(new java.awt.Dimension(23, 23));
btnReload.setMinimumSize(new java.awt.Dimension(23, 23));
btnReload.setPreferredSize(new java.awt.Dimension(23, 23));
btnReload.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnReloadActionPerformed(evt);
}
});
add(btnReload);
pnlSep01.setMaximumSize(new java.awt.Dimension(10, 10));
add(pnlSep01);
btnFirst.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/first.GIF")));
btnFirst.setToolTipText(viewerContext.getBundleString("first.page"));
btnFirst.setMargin(new java.awt.Insets(2, 2, 2, 2));
btnFirst.setMaximumSize(new java.awt.Dimension(23, 23));
btnFirst.setMinimumSize(new java.awt.Dimension(23, 23));
btnFirst.setPreferredSize(new java.awt.Dimension(23, 23));
btnFirst.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnFirstActionPerformed(evt);
}
});
add(btnFirst);
btnPrevious.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/previous.GIF")));
btnPrevious.setToolTipText(viewerContext.getBundleString("previous.page"));
btnPrevious.setMargin(new java.awt.Insets(2, 2, 2, 2));
btnPrevious.setMaximumSize(new java.awt.Dimension(23, 23));
btnPrevious.setMinimumSize(new java.awt.Dimension(23, 23));
btnPrevious.setPreferredSize(new java.awt.Dimension(23, 23));
btnPrevious.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnPreviousActionPerformed(evt);
}
});
add(btnPrevious);
btnNext.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/next.GIF")));
btnNext.setToolTipText(viewerContext.getBundleString("next.page"));
btnNext.setMargin(new java.awt.Insets(2, 2, 2, 2));
btnNext.setMaximumSize(new java.awt.Dimension(23, 23));
btnNext.setMinimumSize(new java.awt.Dimension(23, 23));
btnNext.setPreferredSize(new java.awt.Dimension(23, 23));
btnNext.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnNextActionPerformed(evt);
}
});
add(btnNext);
btnLast.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/last.GIF")));
btnLast.setToolTipText(viewerContext.getBundleString("last.page"));
btnLast.setMargin(new java.awt.Insets(2, 2, 2, 2));
btnLast.setMaximumSize(new java.awt.Dimension(23, 23));
btnLast.setMinimumSize(new java.awt.Dimension(23, 23));
btnLast.setPreferredSize(new java.awt.Dimension(23, 23));
btnLast.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnLastActionPerformed(evt);
}
});
add(btnLast);
txtGoTo.setToolTipText(viewerContext.getBundleString("go.to.page"));
txtGoTo.setMaximumSize(new java.awt.Dimension(40, 23));
txtGoTo.setMinimumSize(new java.awt.Dimension(40, 23));
txtGoTo.setPreferredSize(new java.awt.Dimension(40, 23));
txtGoTo.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
txtGoToActionPerformed(evt);
}
});
add(txtGoTo);
pnlSep02.setMaximumSize(new java.awt.Dimension(10, 10));
add(pnlSep02);
btnActualSize.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/actualsize.GIF")));
btnActualSize.setToolTipText(viewerContext.getBundleString("actual.size"));
btnActualSize.setMargin(new java.awt.Insets(2, 2, 2, 2));
btnActualSize.setMaximumSize(new java.awt.Dimension(23, 23));
btnActualSize.setMinimumSize(new java.awt.Dimension(23, 23));
btnActualSize.setPreferredSize(new java.awt.Dimension(23, 23));
btnActualSize.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnActualSizeActionPerformed(evt);
}
});
add(btnActualSize);
btnFitPage.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/fitpage.GIF")));
btnFitPage.setToolTipText(viewerContext.getBundleString("fit.page"));
btnFitPage.setMargin(new java.awt.Insets(2, 2, 2, 2));
btnFitPage.setMaximumSize(new java.awt.Dimension(23, 23));
btnFitPage.setMinimumSize(new java.awt.Dimension(23, 23));
btnFitPage.setPreferredSize(new java.awt.Dimension(23, 23));
btnFitPage.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnFitPageActionPerformed(evt);
}
});
add(btnFitPage);
btnFitWidth.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/fitwidth.GIF")));
btnFitWidth.setToolTipText(viewerContext.getBundleString("fit.width"));
btnFitWidth.setMargin(new java.awt.Insets(2, 2, 2, 2));
btnFitWidth.setMaximumSize(new java.awt.Dimension(23, 23));
btnFitWidth.setMinimumSize(new java.awt.Dimension(23, 23));
btnFitWidth.setPreferredSize(new java.awt.Dimension(23, 23));
btnFitWidth.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnFitWidthActionPerformed(evt);
}
});
add(btnFitWidth);
pnlSep03.setMaximumSize(new java.awt.Dimension(10, 10));
add(pnlSep03);
btnZoomIn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/zoomin.GIF")));
btnZoomIn.setToolTipText(viewerContext.getBundleString("zoom.in"));
btnZoomIn.setMargin(new java.awt.Insets(2, 2, 2, 2));
btnZoomIn.setMaximumSize(new java.awt.Dimension(23, 23));
btnZoomIn.setMinimumSize(new java.awt.Dimension(23, 23));
btnZoomIn.setPreferredSize(new java.awt.Dimension(23, 23));
btnZoomIn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnZoomInActionPerformed(evt);
}
});
add(btnZoomIn);
btnZoomOut.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/sf/jasperreports/view/images/zoomout.GIF")));
btnZoomOut.setToolTipText(viewerContext.getBundleString("zoom.out"));
btnZoomOut.setMargin(new java.awt.Insets(2, 2, 2, 2));
btnZoomOut.setMaximumSize(new java.awt.Dimension(23, 23));
btnZoomOut.setMinimumSize(new java.awt.Dimension(23, 23));
btnZoomOut.setPreferredSize(new java.awt.Dimension(23, 23));
btnZoomOut.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnZoomOutActionPerformed(evt);
}
});
add(btnZoomOut);
cmbZoom.setEditable(true);
cmbZoom.setToolTipText(viewerContext.getBundleString("zoom.ratio"));
cmbZoom.setMaximumSize(new java.awt.Dimension(80, 23));
cmbZoom.setMinimumSize(new java.awt.Dimension(80, 23));
cmbZoom.setPreferredSize(new java.awt.Dimension(80, 23));
cmbZoom.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cmbZoomActionPerformed(evt);
}
});
cmbZoom.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
cmbZoomItemStateChanged(evt);
}
});
add(cmbZoom);
}
public void init()
{
cmbZoom.setSelectedIndex(defaultZoomIndex);
}
public void addComponentKeyListener(KeyListener listener)
{
btnSave.addKeyListener(listener);
btnPrint.addKeyListener(listener);
btnReload.addKeyListener(listener);
btnFirst.addKeyListener(listener);
btnPrevious.addKeyListener(listener);
btnNext.addKeyListener(listener);
btnLast.addKeyListener(listener);
txtGoTo.addKeyListener(listener);
btnActualSize.addKeyListener(listener);
btnFitPage.addKeyListener(listener);
btnFitWidth.addKeyListener(listener);
btnZoomIn.addKeyListener(listener);
btnZoomOut.addKeyListener(listener);
cmbZoom.addKeyListener(listener);
}
void btnSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSaveActionPerformed
// Add your handling code here:
JFileChooser fileChooser = new JFileChooser();
fileChooser.setLocale(this.getLocale());
fileChooser.updateUI();
for(int i = 0; i < saveContributors.size(); i++)
{
fileChooser.addChoosableFileFilter((JRSaveContributor)saveContributors.get(i));
}
if (saveContributors.contains(lastSaveContributor))
{
fileChooser.setFileFilter(lastSaveContributor);
}
else if (saveContributors.size() > 0)
{
fileChooser.setFileFilter((JRSaveContributor)saveContributors.get(0));
}
if (lastFolder != null)
{
fileChooser.setCurrentDirectory(lastFolder);
}
int retValue = fileChooser.showSaveDialog(this);
if (retValue == JFileChooser.APPROVE_OPTION)
{
FileFilter fileFilter = fileChooser.getFileFilter();
File file = fileChooser.getSelectedFile();
lastFolder = file.getParentFile();
JRSaveContributor contributor = null;
if (fileFilter instanceof JRSaveContributor)
{
contributor = (JRSaveContributor)fileFilter;
}
else
{
int i = 0;
while(contributor == null && i < saveContributors.size())
{
contributor = (JRSaveContributor)saveContributors.get(i++);
if (!contributor.accept(file))
{
contributor = null;
}
}
if (contributor == null)
{
contributor = new JRPrintSaveContributor(getLocale(), viewerContext.getResourceBundle());
}
}
lastSaveContributor = contributor;
try
{
contributor.save(viewerContext.getJasperPrint(), file);
}
catch (JRException e)
{
if (log.isErrorEnabled())
{
log.error("Save error.", e);
}
JOptionPane.showMessageDialog(this, viewerContext.getBundleString("error.saving"));
}
}
}//GEN-LAST:event_btnSaveActionPerformed
void btnPrintActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnPrintActionPerformed
{//GEN-HEADEREND:event_btnPrintActionPerformed
// Add your handling code here:
Thread thread =
new Thread(
new Runnable()
{
public void run()
{
try
{
btnPrint.setEnabled(false);
JasperPrintManager.printReport(viewerContext.getJasperPrint(), true);
}
catch (Exception ex)
{
if (log.isErrorEnabled())
{
log.error("Print error.", ex);
}
JOptionPane.showMessageDialog(JRViewerToolbar.this,
viewerContext.getBundleString("error.printing"));
}
finally
{
btnPrint.setEnabled(true);
}
}
}
);
thread.start();
}//GEN-LAST:event_btnPrintActionPerformed
void btnReloadActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnReloadActionPerformed
{//GEN-HEADEREND:event_btnReloadActionPerformed
// Add your handling code here:
viewerContext.reload();
}//GEN-LAST:event_btnReloadActionPerformed
void btnFirstActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnFirstActionPerformed
{//GEN-HEADEREND:event_btnFirstActionPerformed
// Add your handling code here:
viewerContext.setPageIndex(0);
viewerContext.refreshPage();
}//GEN-LAST:event_btnFirstActionPerformed
void btnPreviousActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnPreviousActionPerformed
{//GEN-HEADEREND:event_btnPreviousActionPerformed
// Add your handling code here:
viewerContext.setPageIndex(viewerContext.getPageIndex() - 1);
viewerContext.refreshPage();
}//GEN-LAST:event_btnPreviousActionPerformed
void btnNextActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnNextActionPerformed
{//GEN-HEADEREND:event_btnNextActionPerformed
// Add your handling code here:
viewerContext.setPageIndex(viewerContext.getPageIndex() + 1);
viewerContext.refreshPage();
}//GEN-LAST:event_btnNextActionPerformed
void btnLastActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnLastActionPerformed
{//GEN-HEADEREND:event_btnLastActionPerformed
// Add your handling code here:
viewerContext.setPageIndex(viewerContext.getPageCount() - 1);
viewerContext.refreshPage();
}//GEN-LAST:event_btnLastActionPerformed
void txtGoToActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtGoToActionPerformed
try
{
int pageNumber = Integer.parseInt(txtGoTo.getText());
if (
pageNumber != viewerContext.getPageIndex() + 1
&& pageNumber > 0
&& pageNumber <= viewerContext.getPageCount()
)
{
viewerContext.setPageIndex(pageNumber - 1);
viewerContext.refreshPage();
}
}
catch(NumberFormatException e)
{
}
}//GEN-LAST:event_txtGoToActionPerformed
void btnActualSizeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnActualSizeActionPerformed
// Add your handling code here:
if (btnActualSize.isSelected())
{
btnFitPage.setSelected(false);
btnFitWidth.setSelected(false);
cmbZoom.setSelectedIndex(-1);
viewerContext.setZoomRatio(1);
btnActualSize.setSelected(true);
}
}//GEN-LAST:event_btnActualSizeActionPerformed
void btnFitPageActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnFitPageActionPerformed
// Add your handling code here:
if (btnFitPage.isSelected())
{
btnActualSize.setSelected(false);
btnFitWidth.setSelected(false);
cmbZoom.setSelectedIndex(-1);
viewerContext.fitPage();
btnFitPage.setSelected(true);
}
}//GEN-LAST:event_btnFitPageActionPerformed
void btnFitWidthActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnFitWidthActionPerformed
// Add your handling code here:
if (btnFitWidth.isSelected())
{
btnActualSize.setSelected(false);
btnFitPage.setSelected(false);
cmbZoom.setSelectedIndex(-1);
viewerContext.fitWidth();
btnFitWidth.setSelected(true);
}
}//GEN-LAST:event_btnFitWidthActionPerformed
void btnZoomInActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnZoomInActionPerformed
{//GEN-HEADEREND:event_btnZoomInActionPerformed
// Add your handling code here:
btnActualSize.setSelected(false);
btnFitPage.setSelected(false);
btnFitWidth.setSelected(false);
int newZoomInt = (int)(100 * getZoomRatio());
int index = Arrays.binarySearch(zooms, newZoomInt);
if (index < 0)
{
viewerContext.setZoomRatio(zooms[- index - 1] / 100f);
}
else if (index < cmbZoom.getModel().getSize() - 1)
{
viewerContext.setZoomRatio(zooms[index + 1] / 100f);
}
}//GEN-LAST:event_btnZoomInActionPerformed
protected float getZoomRatio()
{
float newZoom = viewerContext.getZoom();
try
{
newZoom =
zoomDecimalFormat.parse(
String.valueOf(cmbZoom.getEditor().getItem())
).floatValue() / 100f;
}
catch(ParseException e)
{
}
return newZoom;
}
void btnZoomOutActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnZoomOutActionPerformed
{//GEN-HEADEREND:event_btnZoomOutActionPerformed
// Add your handling code here:
btnActualSize.setSelected(false);
btnFitPage.setSelected(false);
btnFitWidth.setSelected(false);
int newZoomInt = (int)(100 * getZoomRatio());
int index = Arrays.binarySearch(zooms, newZoomInt);
if (index > 0)
{
viewerContext.setZoomRatio(zooms[index - 1] / 100f);
}
else if (index < -1)
{
viewerContext.setZoomRatio(zooms[- index - 2] / 100f);
}
}//GEN-LAST:event_btnZoomOutActionPerformed
void cmbZoomActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cmbZoomActionPerformed
{//GEN-HEADEREND:event_cmbZoomActionPerformed
// Add your handling code here:
float newZoom = getZoomRatio();
if (newZoom < MIN_ZOOM)
{
newZoom = MIN_ZOOM;
}
if (newZoom > MAX_ZOOM)
{
newZoom = MAX_ZOOM;
}
viewerContext.setZoomRatio(newZoom);
}//GEN-LAST:event_cmbZoomActionPerformed
void cmbZoomItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cmbZoomItemStateChanged
// Add your handling code here:
btnActualSize.setSelected(false);
btnFitPage.setSelected(false);
btnFitWidth.setSelected(false);
}//GEN-LAST:event_cmbZoomItemStateChanged
/**
*
*/
public void addSaveContributor(JRSaveContributor contributor)
{
saveContributors.add(contributor);
}
/**
*
*/
public void removeSaveContributor(JRSaveContributor contributor)
{
saveContributors.remove(contributor);
}
/**
*
*/
public JRSaveContributor[] getSaveContributors()
{
return (JRSaveContributor[])saveContributors.toArray(new JRSaveContributor[saveContributors.size()]);
}
/**
* Replaces the save contributors with the ones provided as parameter.
*/
public void setSaveContributors(JRSaveContributor[] saveContributors)
{
this.saveContributors = new ArrayList();
if (saveContributors != null)
{
this.saveContributors.addAll(Arrays.asList(saveContributors));
}
}
/**
*
*/
protected void initSaveContributors()
{
final String[] DEFAULT_CONTRIBUTORS =
{
"net.sf.jasperreports.view.save.JRPrintSaveContributor",
"net.sf.jasperreports.view.save.JRPdfSaveContributor",
"net.sf.jasperreports.view.save.JRRtfSaveContributor",
"net.sf.jasperreports.view.save.JROdtSaveContributor",
"net.sf.jasperreports.view.save.JRDocxSaveContributor",
"net.sf.jasperreports.view.save.JRHtmlSaveContributor",
"net.sf.jasperreports.view.save.JRSingleSheetXlsSaveContributor",
"net.sf.jasperreports.view.save.JRMultipleSheetsXlsSaveContributor",
"net.sf.jasperreports.view.save.JRCsvSaveContributor",
"net.sf.jasperreports.view.save.JRXmlSaveContributor",
"net.sf.jasperreports.view.save.JREmbeddedImagesXmlSaveContributor"
};
for(int i = 0; i < DEFAULT_CONTRIBUTORS.length; i++)
{
try
{
Class saveContribClass = JRClassLoader.loadClassForName(DEFAULT_CONTRIBUTORS[i]);
Constructor constructor = saveContribClass.getConstructor(new Class[]{Locale.class, ResourceBundle.class});
JRSaveContributor saveContrib = (JRSaveContributor)constructor.newInstance(new Object[]{getLocale(), viewerContext.getResourceBundle()});
saveContributors.add(saveContrib);
}
catch (Exception e)
{
}
}
}
protected void reportLoaded()
{
btnReload.setEnabled(viewerContext.isReloadSupported());
}
protected void refreshPage()
{
if (!viewerContext.hasPages())
{
btnSave.setEnabled(false);
btnPrint.setEnabled(false);
btnActualSize.setEnabled(false);
btnFitPage.setEnabled(false);
btnFitWidth.setEnabled(false);
btnZoomIn.setEnabled(false);
btnZoomOut.setEnabled(false);
cmbZoom.setEnabled(false);
return;
}
btnSave.setEnabled(true);
btnPrint.setEnabled(true);
btnActualSize.setEnabled(true);
btnFitPage.setEnabled(true);
btnFitWidth.setEnabled(true);
btnZoomIn.setEnabled(viewerContext.getZoom() < MAX_ZOOM);
btnZoomOut.setEnabled(viewerContext.getZoom() > MIN_ZOOM);
cmbZoom.setEnabled(true);
}
protected void pageChanged()
{
if (viewerContext.hasPages())
{
int pageIndex = viewerContext.getPageIndex();
btnFirst.setEnabled( (pageIndex > 0) );
btnPrevious.setEnabled( (pageIndex > 0) );
boolean notLast = pageIndex < viewerContext.getPageCount() - 1;
btnNext.setEnabled(notLast);
btnLast.setEnabled(notLast);
txtGoTo.setEnabled(btnFirst.isEnabled() || btnLast.isEnabled());
txtGoTo.setText("" + (pageIndex + 1));
}
else
{
btnFirst.setEnabled(false);
btnPrevious.setEnabled(false);
btnNext.setEnabled(false);
btnLast.setEnabled(false);
txtGoTo.setEnabled(false);
txtGoTo.setText("");
}
}
protected void zoomChanged()
{
cmbZoom.getEditor().setItem(zoomDecimalFormat.format(viewerContext.getZoom() * 100) + "%");
}
public boolean isFitPage()
{
return btnFitPage.isSelected();
}
public boolean isFitWidth()
{
return btnFitPage.isSelected();
}
public void setFitWidth()
{
btnFitWidth.setSelected(true);
}
protected void fitPage()
{
btnFitPage.setSelected(true);
}
protected void fitWidth()
{
btnFitWidth.setSelected(true);
}
public void viewerEvent(JRViewerEvent event)
{
switch (event.getCode())
{
case JRViewerEvent.EVENT_FIT_PAGE:
fitPage();
break;
case JRViewerEvent.EVENT_FIT_WIDTH:
fitWidth();
break;
case JRViewerEvent.EVENT_PAGE_CHANGED:
pageChanged();
break;
case JRViewerEvent.EVENT_REFRESH_PAGE:
refreshPage();
break;
case JRViewerEvent.EVENT_ZOOM_CHANGED:
zoomChanged();
break;
case JRViewerEvent.EVENT_REPORT_LOADED:
reportLoaded();
break;
}
}
}