home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2007 April / PCpro_2007_04.ISO / files / dsl / ManageEngineWiFiManager.exe / Disk1 / data1.cab / SourceFiles / WiFiManager.exe / classes / JRViewer.java < prev    next >
Encoding:
Java Source  |  2007-01-17  |  48.3 KB  |  1,554 lines

  1. /*
  2.  * ============================================================================
  3.  *                   The JasperReports License, Version 1.0
  4.  * ============================================================================
  5.  * 
  6.  * Copyright (C) 2001-2004 Teodor Danciu (teodord@users.sourceforge.net). All rights reserved.
  7.  * 
  8.  * Redistribution and use in source and binary forms, with or without modification,
  9.  * are permitted provided that the following conditions are met:
  10.  * 
  11.  * 1. Redistributions of source code must retain the above copyright notice,
  12.  *    this list of conditions and the following disclaimer.
  13.  * 
  14.  * 2. Redistributions in binary form must reproduce the above copyright notice,
  15.  *    this list of conditions and the following disclaimer in the documentation
  16.  *    and/or other materials provided with the distribution.
  17.  * 
  18.  * 3. The end-user documentation included with the redistribution, if any, must
  19.  *    include the following acknowledgment: "This product includes software
  20.  *    developed by Teodor Danciu (http://jasperreports.sourceforge.net)."
  21.  *    Alternately, this acknowledgment may appear in the software itself, if
  22.  *    and wherever such third-party acknowledgments normally appear.
  23.  * 
  24.  * 4. The name "JasperReports" must not be used to endorse or promote products 
  25.  *    derived from this software without prior written permission. For written 
  26.  *    permission, please contact teodord@users.sourceforge.net.
  27.  * 
  28.  * 5. Products derived from this software may not be called "JasperReports", nor 
  29.  *    may "JasperReports" appear in their name, without prior written permission
  30.  *    of Teodor Danciu.
  31.  * 
  32.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  33.  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  34.  * FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
  35.  * APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
  36.  * INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
  37.  * DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
  38.  * OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
  39.  * ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
  40.  * (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
  41.  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  42.  */
  43.  
  44. /*
  45.  * ============================================================================
  46.  *                   GNU Lesser General Public License
  47.  * ============================================================================
  48.  *
  49.  * JasperReports - Free Java report-generating library.
  50.  * Copyright (C) 2001-2004 Teodor Danciu teodord@users.sourceforge.net
  51.  * 
  52.  * This library is free software; you can redistribute it and/or
  53.  * modify it under the terms of the GNU Lesser General Public
  54.  * License as published by the Free Software Foundation; either
  55.  * version 2.1 of the License, or (at your option) any later version.
  56.  * 
  57.  * This library is distributed in the hope that it will be useful,
  58.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  59.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  60.  * Lesser General Public License for more details.
  61.  * 
  62.  * You should have received a copy of the GNU Lesser General Public
  63.  * License along with this library; if not, write to the Free Software
  64.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA.
  65.  * 
  66.  * Teodor Danciu
  67.  * 173, Calea Calarasilor, Bl. 42, Sc. 1, Ap. 18
  68.  * Postal code 030615, Sector 3
  69.  * Bucharest, ROMANIA
  70.  * Email: teodord@users.sourceforge.net
  71.  */
  72.  
  73. /*
  74.  * Contributors:
  75.  * Ryan Johnson - delscovich@users.sourceforge.net
  76.  * Carlton Moore - cmoore79@users.sourceforge.net
  77.  */
  78. package dori.jasper.view;
  79.  
  80. import java.awt.Component;
  81. import java.awt.Container;
  82. import java.awt.Cursor;
  83. import java.awt.Dimension;
  84. import java.awt.Image;
  85. import java.awt.Point;
  86. import java.awt.event.MouseEvent;
  87. import java.awt.event.MouseListener;
  88. import java.io.File;
  89. import java.io.InputStream;
  90. import java.text.DecimalFormat;
  91. import java.text.ParseException;
  92. import java.util.ArrayList;
  93. import java.util.Arrays;
  94. import java.util.Collection;
  95. import java.util.HashMap;
  96. import java.util.Iterator;
  97. import java.util.Map;
  98.  
  99. import javax.swing.DefaultComboBoxModel;
  100. import javax.swing.ImageIcon;
  101. import javax.swing.JFileChooser;
  102. import javax.swing.JOptionPane;
  103. import javax.swing.JPanel;
  104. import javax.swing.JViewport;
  105. import javax.swing.filechooser.FileFilter;
  106.  
  107. import dori.jasper.engine.JRException;
  108. import dori.jasper.engine.JRHyperlink;
  109. import dori.jasper.engine.JRPrintAnchorIndex;
  110. import dori.jasper.engine.JRPrintElement;
  111. import dori.jasper.engine.JRPrintHyperlink;
  112. import dori.jasper.engine.JRPrintPage;
  113. import dori.jasper.engine.JasperPrint;
  114. import dori.jasper.engine.JasperPrintManager;
  115. import dori.jasper.engine.util.JRClassLoader;
  116. import dori.jasper.engine.util.JRLoader;
  117. import dori.jasper.engine.util.JRSaver;
  118. import dori.jasper.engine.xml.JRPrintXmlLoader;
  119.  
  120.  
  121. /**
  122.  *
  123.  */
  124. public class JRViewer extends javax.swing.JPanel implements JRHyperlinkListener
  125. {
  126.  
  127.     /**
  128.      *
  129.      */
  130.     private static final int TYPE_FILE_NAME = 1;
  131.     private static final int TYPE_INPUT_STREAM = 2;
  132.     private static final int TYPE_JASPER_PRINT = 3;
  133.  
  134.     protected float MIN_ZOOM = 0.5f;
  135.     protected float MAX_ZOOM = 2.5f;
  136.     protected int zooms[] = {50, 75, 100, 125, 150, 175, 200, 250};
  137.  
  138.     private int type = TYPE_FILE_NAME;
  139.     private boolean isXML = false;
  140.     private String reportFileName = null;
  141.     private JasperPrint jasperPrint = null;
  142.     private int pageIndex = 0;
  143.     private float zoom = 1f;
  144.  
  145.     private DecimalFormat zoomDecimalFormat = new DecimalFormat("#.##");
  146.  
  147.     private int downX = 0;
  148.     private int downY = 0;
  149.  
  150.     private java.util.List hyperlinkListeners = new ArrayList();
  151.     private Map linksMap = new HashMap();
  152.     private MouseListener mouseListener = 
  153.         new java.awt.event.MouseAdapter()
  154.         {
  155.             public void mouseClicked(java.awt.event.MouseEvent evt)
  156.             {
  157.                 hyperlinkClicked(evt);
  158.             }
  159.         };
  160.  
  161.  
  162.     /** Creates new form JRViewer */
  163.     public JRViewer(String fileName, boolean isXML) throws JRException
  164.     {
  165.         setZooms();
  166.         
  167.         initComponents();
  168.         
  169.         setZoomRatio(1);
  170.  
  171.         loadReport(fileName, isXML);
  172.         setPageIndex(0);
  173.         refreshPage();
  174.         
  175.         addHyperlinkListener(this);
  176.     }
  177.  
  178.     
  179.     /** Creates new form JRViewer */
  180.     public JRViewer(InputStream is, boolean isXML) throws JRException
  181.     {
  182.         setZooms();
  183.         
  184.         initComponents();
  185.         
  186.         setZoomRatio(1);
  187.  
  188.         loadReport(is, isXML);
  189.         setPageIndex(0);
  190.         refreshPage();
  191.  
  192.         addHyperlinkListener(this);
  193.     }
  194.  
  195.     
  196.     /** Creates new form JRViewer */
  197.     public JRViewer(JasperPrint jrPrint) throws JRException
  198.     {
  199.         setZooms();
  200.         
  201.         initComponents();
  202.         
  203.         setZoomRatio(1);
  204.  
  205.         loadReport(jrPrint);
  206.         setPageIndex(0);
  207.         refreshPage();
  208.  
  209.         addHyperlinkListener(this);
  210.     }
  211.  
  212.     
  213.     /**
  214.      *
  215.      */
  216.     public void clear()
  217.     {
  218.         emptyContainer(this);
  219.         jasperPrint = null;
  220.     }
  221.  
  222.  
  223.     /**
  224.      *
  225.      */
  226.     protected void setZooms()
  227.     {
  228.     }
  229.  
  230.  
  231.     /**
  232.      *
  233.      */
  234.     public void addHyperlinkListener(JRHyperlinkListener listener) throws JRException
  235.     {
  236.         hyperlinkListeners.add(listener);
  237.     }
  238.  
  239.  
  240.     /**
  241.      *
  242.      */
  243.     public void removeHyperlinkListener(JRHyperlinkListener listener) throws JRException
  244.     {
  245.         hyperlinkListeners.remove(listener);
  246.     }
  247.  
  248.  
  249.     /**
  250.      *
  251.      */
  252.     public void gotoHyperlink(JRPrintHyperlink hyperlink) throws JRException
  253.     {
  254.         switch(hyperlink.getHyperlinkType())
  255.         {
  256.             case JRHyperlink.HYPERLINK_TYPE_REFERENCE :
  257.             {
  258.                 if (hyperlinkListeners != null && hyperlinkListeners.size() > 1)
  259.                 {
  260.                     System.out.println("Hyperlink reference : " + hyperlink.getHyperlinkReference());
  261.                     System.out.println("Implement your own JRHyperlinkListener to manage this type of event.");
  262.                 }
  263.                 break;
  264.             }
  265.             case JRHyperlink.HYPERLINK_TYPE_LOCAL_ANCHOR :
  266.             {
  267.                 if (hyperlink.getHyperlinkAnchor() != null)
  268.                 {
  269.                     Map anchorIndexes = jasperPrint.getAnchorIndexes();
  270.                     JRPrintAnchorIndex anchorIndex = (JRPrintAnchorIndex)anchorIndexes.get(hyperlink.getHyperlinkAnchor());
  271.                     if (anchorIndex.getPageIndex() != pageIndex)
  272.                     {
  273.                         setPageIndex(anchorIndex.getPageIndex());
  274.                         refreshPage();
  275.                     }
  276.                     Container container = pnlInScroll.getParent();
  277.                     if (container instanceof JViewport)
  278.                     {
  279.                         JViewport viewport = (JViewport) container;
  280.  
  281.                         int newX = (int)(anchorIndex.getElement().getX() * zoom);
  282.                         int newY = (int)(anchorIndex.getElement().getY() * zoom);
  283.  
  284.                         int maxX = pnlInScroll.getWidth() - viewport.getWidth();
  285.                         int maxY = pnlInScroll.getHeight() - viewport.getHeight();
  286.  
  287.                         if (newX < 0)
  288.                         {
  289.                             newX = 0;
  290.                         }
  291.                         if (newX > maxX)
  292.                         {
  293.                             newX = maxX;
  294.                         }
  295.                         if (newY < 0)
  296.                         {
  297.                             newY = 0;
  298.                         }
  299.                         if (newY > maxY)
  300.                         {
  301.                             newY = maxY;
  302.                         }
  303.             
  304.                         viewport.setViewPosition(new Point(newX, newY));
  305.                     }
  306.                 }
  307.                 
  308.                 break;
  309.             }
  310.             case JRHyperlink.HYPERLINK_TYPE_LOCAL_PAGE :
  311.             {
  312.                 int page = pageIndex + 1;
  313.                 if (hyperlink.getHyperlinkPage() != null)
  314.                 {
  315.                     page = hyperlink.getHyperlinkPage().intValue();
  316.                 }
  317.                 
  318.                 if (page >= 1 && page <= jasperPrint.getPages().size() && page != pageIndex + 1)
  319.                 {
  320.                     setPageIndex(page - 1);
  321.                     refreshPage();
  322.                     Container container = pnlInScroll.getParent();
  323.                     if (container instanceof JViewport)
  324.                     {
  325.                         JViewport viewport = (JViewport) container;
  326.                         viewport.setViewPosition(new Point(0, 0));
  327.                     }
  328.                 }
  329.                 
  330.                 break;
  331.             }
  332.             case JRHyperlink.HYPERLINK_TYPE_REMOTE_ANCHOR :
  333.             {
  334.                 if (hyperlinkListeners != null && hyperlinkListeners.size() > 1)
  335.                 {
  336.                     System.out.println("Hyperlink reference : " + hyperlink.getHyperlinkReference());
  337.                     System.out.println("Hyperlink anchor    : " + hyperlink.getHyperlinkAnchor());
  338.                     System.out.println("Implement your own JRHyperlinkListener to manage this type of event.");
  339.                 }
  340.                 break;
  341.             }
  342.             case JRHyperlink.HYPERLINK_TYPE_REMOTE_PAGE :
  343.             {
  344.                 if (hyperlinkListeners != null && hyperlinkListeners.size() > 1)
  345.                 {
  346.                     System.out.println("Hyperlink reference : " + hyperlink.getHyperlinkReference());
  347.                     System.out.println("Hyperlink page      : " + hyperlink.getHyperlinkPage());
  348.                     System.out.println("Implement your own JRHyperlinkListener to manage this type of event.");
  349.                 }
  350.                 break;
  351.             }
  352.             case JRHyperlink.HYPERLINK_TYPE_NONE :
  353.             default :
  354.             {
  355.                 break;
  356.             }
  357.         }
  358.     }
  359.  
  360.     
  361.     /** This method is called from within the constructor to
  362.      * initialize the form.
  363.      * WARNING: Do NOT modify this code. The content of this method is
  364.      * always regenerated by the Form Editor.
  365.      */
  366.     private void initComponents() {//GEN-BEGIN:initComponents
  367.         java.awt.GridBagConstraints gridBagConstraints;
  368.  
  369.         tlbToolBar = new javax.swing.JPanel();
  370.         btnSave = new javax.swing.JButton();
  371.         btnPrint = new javax.swing.JButton();
  372.         btnReload = new javax.swing.JButton();
  373.         pnlSep01 = new javax.swing.JPanel();
  374.         btnFirst = new javax.swing.JButton();
  375.         btnPrevious = new javax.swing.JButton();
  376.         btnNext = new javax.swing.JButton();
  377.         btnLast = new javax.swing.JButton();
  378.         pnlSep02 = new javax.swing.JPanel();
  379.         btnActualSize = new javax.swing.JToggleButton();
  380.         btnFitPage = new javax.swing.JToggleButton();
  381.         btnFitWidth = new javax.swing.JToggleButton();
  382.         pnlSep03 = new javax.swing.JPanel();
  383.         btnZoomIn = new javax.swing.JButton();
  384.         btnZoomOut = new javax.swing.JButton();
  385.         cmbZoom = new javax.swing.JComboBox();
  386.         DefaultComboBoxModel model = new DefaultComboBoxModel();
  387.         for(int i = 0; i < zooms.length; i++)
  388.         {
  389.             model.addElement("" + zooms[i] + "%");
  390.         }
  391.         cmbZoom.setModel(model);
  392.  
  393.         pnlMain = new javax.swing.JPanel();
  394.         scrollPane = new javax.swing.JScrollPane();
  395.         scrollPane.getHorizontalScrollBar().setUnitIncrement(5);
  396.         scrollPane.getVerticalScrollBar().setUnitIncrement(5);
  397.  
  398.         pnlInScroll = new javax.swing.JPanel();
  399.         pnlPage = new javax.swing.JPanel();
  400.         jPanel4 = new javax.swing.JPanel();
  401.         pnlLinks = new javax.swing.JPanel();
  402.         jPanel5 = new javax.swing.JPanel();
  403.         jPanel6 = new javax.swing.JPanel();
  404.         jPanel7 = new javax.swing.JPanel();
  405.         jPanel8 = new javax.swing.JPanel();
  406.         jLabel1 = new javax.swing.JLabel();
  407.         jPanel9 = new javax.swing.JPanel();
  408.         lblPage = new javax.swing.JLabel();
  409.         pnlStatus = new javax.swing.JPanel();
  410.         lblStatus = new javax.swing.JLabel();
  411.  
  412.         setLayout(new java.awt.BorderLayout());
  413.  
  414.         setMinimumSize(new java.awt.Dimension(450, 150));
  415.         setPreferredSize(new java.awt.Dimension(450, 150));
  416.         tlbToolBar.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 0, 2));
  417.  
  418.         btnSave.setIcon(new javax.swing.ImageIcon(getClass().getResource("/dori/jasper/view/images/save.GIF")));
  419.         btnSave.setToolTipText("Save");
  420.         btnSave.setMargin(new java.awt.Insets(2, 2, 2, 2));
  421.         btnSave.setMaximumSize(new java.awt.Dimension(23, 23));
  422.         btnSave.setMinimumSize(new java.awt.Dimension(23, 23));
  423.         btnSave.setPreferredSize(new java.awt.Dimension(23, 23));
  424.         btnSave.addActionListener(new java.awt.event.ActionListener() {
  425.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  426.                 btnSaveActionPerformed(evt);
  427.             }
  428.         });
  429.  
  430.         tlbToolBar.add(btnSave);
  431.  
  432.         btnPrint.setIcon(new javax.swing.ImageIcon(getClass().getResource("/dori/jasper/view/images/print.GIF")));
  433.         btnPrint.setToolTipText("Print");
  434.         btnPrint.setMargin(new java.awt.Insets(2, 2, 2, 2));
  435.         btnPrint.setMaximumSize(new java.awt.Dimension(23, 23));
  436.         btnPrint.setMinimumSize(new java.awt.Dimension(23, 23));
  437.         btnPrint.setPreferredSize(new java.awt.Dimension(23, 23));
  438.         btnPrint.addActionListener(new java.awt.event.ActionListener() {
  439.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  440.                 btnPrintActionPerformed(evt);
  441.             }
  442.         });
  443.  
  444.         tlbToolBar.add(btnPrint);
  445.  
  446.         btnReload.setIcon(new javax.swing.ImageIcon(getClass().getResource("/dori/jasper/view/images/reload.GIF")));
  447.         btnReload.setToolTipText("Reload");
  448.         btnReload.setMargin(new java.awt.Insets(2, 2, 2, 2));
  449.         btnReload.setMaximumSize(new java.awt.Dimension(23, 23));
  450.         btnReload.setMinimumSize(new java.awt.Dimension(23, 23));
  451.         btnReload.setPreferredSize(new java.awt.Dimension(23, 23));
  452.         btnReload.addActionListener(new java.awt.event.ActionListener() {
  453.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  454.                 btnReloadActionPerformed(evt);
  455.             }
  456.         });
  457.  
  458.         tlbToolBar.add(btnReload);
  459.  
  460.         pnlSep01.setMaximumSize(new java.awt.Dimension(10, 10));
  461.         tlbToolBar.add(pnlSep01);
  462.  
  463.         btnFirst.setIcon(new javax.swing.ImageIcon(getClass().getResource("/dori/jasper/view/images/first.GIF")));
  464.         btnFirst.setToolTipText("First Page");
  465.         btnFirst.setMargin(new java.awt.Insets(2, 2, 2, 2));
  466.         btnFirst.setMaximumSize(new java.awt.Dimension(23, 23));
  467.         btnFirst.setMinimumSize(new java.awt.Dimension(23, 23));
  468.         btnFirst.setPreferredSize(new java.awt.Dimension(23, 23));
  469.         btnFirst.addActionListener(new java.awt.event.ActionListener() {
  470.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  471.                 btnFirstActionPerformed(evt);
  472.             }
  473.         });
  474.  
  475.         tlbToolBar.add(btnFirst);
  476.  
  477.         btnPrevious.setIcon(new javax.swing.ImageIcon(getClass().getResource("/dori/jasper/view/images/previous.GIF")));
  478.         btnPrevious.setToolTipText("Previous Page");
  479.         btnPrevious.setMargin(new java.awt.Insets(2, 2, 2, 2));
  480.         btnPrevious.setMaximumSize(new java.awt.Dimension(23, 23));
  481.         btnPrevious.setMinimumSize(new java.awt.Dimension(23, 23));
  482.         btnPrevious.setPreferredSize(new java.awt.Dimension(23, 23));
  483.         btnPrevious.addActionListener(new java.awt.event.ActionListener() {
  484.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  485.                 btnPreviousActionPerformed(evt);
  486.             }
  487.         });
  488.  
  489.         tlbToolBar.add(btnPrevious);
  490.  
  491.         btnNext.setIcon(new javax.swing.ImageIcon(getClass().getResource("/dori/jasper/view/images/next.GIF")));
  492.         btnNext.setToolTipText("Next Page");
  493.         btnNext.setMargin(new java.awt.Insets(2, 2, 2, 2));
  494.         btnNext.setMaximumSize(new java.awt.Dimension(23, 23));
  495.         btnNext.setMinimumSize(new java.awt.Dimension(23, 23));
  496.         btnNext.setPreferredSize(new java.awt.Dimension(23, 23));
  497.         btnNext.addActionListener(new java.awt.event.ActionListener() {
  498.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  499.                 btnNextActionPerformed(evt);
  500.             }
  501.         });
  502.  
  503.         tlbToolBar.add(btnNext);
  504.  
  505.         btnLast.setIcon(new javax.swing.ImageIcon(getClass().getResource("/dori/jasper/view/images/last.GIF")));
  506.         btnLast.setToolTipText("Last Page");
  507.         btnLast.setMargin(new java.awt.Insets(2, 2, 2, 2));
  508.         btnLast.setMaximumSize(new java.awt.Dimension(23, 23));
  509.         btnLast.setMinimumSize(new java.awt.Dimension(23, 23));
  510.         btnLast.setPreferredSize(new java.awt.Dimension(23, 23));
  511.         btnLast.addActionListener(new java.awt.event.ActionListener() {
  512.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  513.                 btnLastActionPerformed(evt);
  514.             }
  515.         });
  516.  
  517.         tlbToolBar.add(btnLast);
  518.  
  519.         pnlSep02.setMaximumSize(new java.awt.Dimension(10, 10));
  520.         tlbToolBar.add(pnlSep02);
  521.  
  522.         btnActualSize.setIcon(new javax.swing.ImageIcon(getClass().getResource("/dori/jasper/view/images/actualsize.GIF")));
  523.         btnActualSize.setToolTipText("Actual Size");
  524.         btnActualSize.setMargin(new java.awt.Insets(2, 2, 2, 2));
  525.         btnActualSize.setMaximumSize(new java.awt.Dimension(23, 23));
  526.         btnActualSize.setMinimumSize(new java.awt.Dimension(23, 23));
  527.         btnActualSize.setPreferredSize(new java.awt.Dimension(23, 23));
  528.         btnActualSize.addActionListener(new java.awt.event.ActionListener() {
  529.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  530.                 btnActualSizeActionPerformed(evt);
  531.             }
  532.         });
  533.  
  534.         tlbToolBar.add(btnActualSize);
  535.  
  536.         btnFitPage.setIcon(new javax.swing.ImageIcon(getClass().getResource("/dori/jasper/view/images/fitpage.GIF")));
  537.         btnFitPage.setToolTipText("Fit Page");
  538.         btnFitPage.setMargin(new java.awt.Insets(2, 2, 2, 2));
  539.         btnFitPage.setMaximumSize(new java.awt.Dimension(23, 23));
  540.         btnFitPage.setMinimumSize(new java.awt.Dimension(23, 23));
  541.         btnFitPage.setPreferredSize(new java.awt.Dimension(23, 23));
  542.         btnFitPage.addActionListener(new java.awt.event.ActionListener() {
  543.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  544.                 btnFitPageActionPerformed(evt);
  545.             }
  546.         });
  547.  
  548.         tlbToolBar.add(btnFitPage);
  549.  
  550.         btnFitWidth.setIcon(new javax.swing.ImageIcon(getClass().getResource("/dori/jasper/view/images/fitwidth.GIF")));
  551.         btnFitWidth.setToolTipText("Fit Width");
  552.         btnFitWidth.setMargin(new java.awt.Insets(2, 2, 2, 2));
  553.         btnFitWidth.setMaximumSize(new java.awt.Dimension(23, 23));
  554.         btnFitWidth.setMinimumSize(new java.awt.Dimension(23, 23));
  555.         btnFitWidth.setPreferredSize(new java.awt.Dimension(23, 23));
  556.         btnFitWidth.addActionListener(new java.awt.event.ActionListener() {
  557.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  558.                 btnFitWidthActionPerformed(evt);
  559.             }
  560.         });
  561.  
  562.         tlbToolBar.add(btnFitWidth);
  563.  
  564.         pnlSep03.setMaximumSize(new java.awt.Dimension(10, 10));
  565.         tlbToolBar.add(pnlSep03);
  566.  
  567.         btnZoomIn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/dori/jasper/view/images/zoomin.GIF")));
  568.         btnZoomIn.setToolTipText("Zoom In");
  569.         btnZoomIn.setMargin(new java.awt.Insets(2, 2, 2, 2));
  570.         btnZoomIn.setMaximumSize(new java.awt.Dimension(23, 23));
  571.         btnZoomIn.setMinimumSize(new java.awt.Dimension(23, 23));
  572.         btnZoomIn.setPreferredSize(new java.awt.Dimension(23, 23));
  573.         btnZoomIn.addActionListener(new java.awt.event.ActionListener() {
  574.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  575.                 btnZoomInActionPerformed(evt);
  576.             }
  577.         });
  578.  
  579.         tlbToolBar.add(btnZoomIn);
  580.  
  581.         btnZoomOut.setIcon(new javax.swing.ImageIcon(getClass().getResource("/dori/jasper/view/images/zoomout.GIF")));
  582.         btnZoomOut.setToolTipText("Zoom Out");
  583.         btnZoomOut.setMargin(new java.awt.Insets(2, 2, 2, 2));
  584.         btnZoomOut.setMaximumSize(new java.awt.Dimension(23, 23));
  585.         btnZoomOut.setMinimumSize(new java.awt.Dimension(23, 23));
  586.         btnZoomOut.setPreferredSize(new java.awt.Dimension(23, 23));
  587.         btnZoomOut.addActionListener(new java.awt.event.ActionListener() {
  588.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  589.                 btnZoomOutActionPerformed(evt);
  590.             }
  591.         });
  592.  
  593.         tlbToolBar.add(btnZoomOut);
  594.  
  595.         cmbZoom.setEditable(true);
  596.         cmbZoom.setToolTipText("Zoom Ratio");
  597.         cmbZoom.setMaximumSize(new java.awt.Dimension(80, 23));
  598.         cmbZoom.setMinimumSize(new java.awt.Dimension(80, 23));
  599.         cmbZoom.setPreferredSize(new java.awt.Dimension(80, 23));
  600.         cmbZoom.addActionListener(new java.awt.event.ActionListener() {
  601.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  602.                 cmbZoomActionPerformed(evt);
  603.             }
  604.         });
  605.  
  606.         cmbZoom.addItemListener(new java.awt.event.ItemListener() {
  607.             public void itemStateChanged(java.awt.event.ItemEvent evt) {
  608.                 cmbZoomItemStateChanged(evt);
  609.             }
  610.         });
  611.  
  612.         tlbToolBar.add(cmbZoom);
  613.  
  614.         add(tlbToolBar, java.awt.BorderLayout.NORTH);
  615.  
  616.         pnlMain.setLayout(new java.awt.BorderLayout());
  617.  
  618.         pnlMain.addComponentListener(new java.awt.event.ComponentAdapter() {
  619.             public void componentResized(java.awt.event.ComponentEvent evt) {
  620.                 pnlMainComponentResized(evt);
  621.             }
  622.         });
  623.  
  624.         scrollPane.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
  625.         scrollPane.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
  626.         pnlInScroll.setLayout(new java.awt.GridBagLayout());
  627.  
  628.         pnlPage.setLayout(new java.awt.BorderLayout());
  629.  
  630.         pnlPage.setMinimumSize(new java.awt.Dimension(100, 100));
  631.         pnlPage.setPreferredSize(new java.awt.Dimension(100, 100));
  632.         jPanel4.setLayout(new java.awt.GridBagLayout());
  633.  
  634.         jPanel4.setMinimumSize(new java.awt.Dimension(100, 120));
  635.         jPanel4.setPreferredSize(new java.awt.Dimension(100, 120));
  636.         pnlLinks.setLayout(null);
  637.  
  638.         pnlLinks.setMinimumSize(new java.awt.Dimension(5, 5));
  639.         pnlLinks.setPreferredSize(new java.awt.Dimension(5, 5));
  640.         pnlLinks.setOpaque(false);
  641.         pnlLinks.addMouseListener(new java.awt.event.MouseAdapter() {
  642.             public void mousePressed(java.awt.event.MouseEvent evt) {
  643.                 pnlLinksMousePressed(evt);
  644.             }
  645.             public void mouseReleased(java.awt.event.MouseEvent evt) {
  646.                 pnlLinksMouseReleased(evt);
  647.             }
  648.         });
  649.  
  650.         pnlLinks.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
  651.             public void mouseDragged(java.awt.event.MouseEvent evt) {
  652.                 pnlLinksMouseDragged(evt);
  653.             }
  654.         });
  655.  
  656.         gridBagConstraints = new java.awt.GridBagConstraints();
  657.         gridBagConstraints.gridx = 0;
  658.         gridBagConstraints.gridy = 0;
  659.         gridBagConstraints.gridwidth = 2;
  660.         gridBagConstraints.gridheight = 2;
  661.         gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
  662.         jPanel4.add(pnlLinks, gridBagConstraints);
  663.  
  664.         jPanel5.setBackground(java.awt.Color.gray);
  665.         jPanel5.setMinimumSize(new java.awt.Dimension(5, 5));
  666.         jPanel5.setPreferredSize(new java.awt.Dimension(5, 5));
  667.         gridBagConstraints = new java.awt.GridBagConstraints();
  668.         gridBagConstraints.gridx = 2;
  669.         gridBagConstraints.gridy = 1;
  670.         gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
  671.         jPanel4.add(jPanel5, gridBagConstraints);
  672.  
  673.         jPanel6.setMinimumSize(new java.awt.Dimension(5, 5));
  674.         jPanel6.setPreferredSize(new java.awt.Dimension(5, 5));
  675.         gridBagConstraints = new java.awt.GridBagConstraints();
  676.         gridBagConstraints.gridx = 0;
  677.         gridBagConstraints.gridy = 2;
  678.         jPanel4.add(jPanel6, gridBagConstraints);
  679.  
  680.         jPanel7.setBackground(java.awt.Color.gray);
  681.         jPanel7.setMinimumSize(new java.awt.Dimension(5, 5));
  682.         jPanel7.setPreferredSize(new java.awt.Dimension(5, 5));
  683.         gridBagConstraints = new java.awt.GridBagConstraints();
  684.         gridBagConstraints.gridx = 1;
  685.         gridBagConstraints.gridy = 2;
  686.         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
  687.         jPanel4.add(jPanel7, gridBagConstraints);
  688.  
  689.         jPanel8.setBackground(java.awt.Color.gray);
  690.         jPanel8.setMinimumSize(new java.awt.Dimension(5, 5));
  691.         jPanel8.setPreferredSize(new java.awt.Dimension(5, 5));
  692.         jLabel1.setText("jLabel1");
  693.         jPanel8.add(jLabel1);
  694.  
  695.         gridBagConstraints = new java.awt.GridBagConstraints();
  696.         gridBagConstraints.gridx = 2;
  697.         gridBagConstraints.gridy = 2;
  698.         jPanel4.add(jPanel8, gridBagConstraints);
  699.  
  700.         jPanel9.setMinimumSize(new java.awt.Dimension(5, 5));
  701.         jPanel9.setPreferredSize(new java.awt.Dimension(5, 5));
  702.         gridBagConstraints = new java.awt.GridBagConstraints();
  703.         gridBagConstraints.gridx = 2;
  704.         gridBagConstraints.gridy = 0;
  705.         jPanel4.add(jPanel9, gridBagConstraints);
  706.  
  707.         lblPage.setBackground(java.awt.Color.white);
  708.         lblPage.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0)));
  709.         lblPage.setOpaque(true);
  710.         gridBagConstraints = new java.awt.GridBagConstraints();
  711.         gridBagConstraints.gridx = 0;
  712.         gridBagConstraints.gridy = 0;
  713.         gridBagConstraints.gridwidth = 2;
  714.         gridBagConstraints.gridheight = 2;
  715.         gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
  716.         gridBagConstraints.weightx = 1.0;
  717.         gridBagConstraints.weighty = 1.0;
  718.         jPanel4.add(lblPage, gridBagConstraints);
  719.  
  720.         pnlPage.add(jPanel4, java.awt.BorderLayout.CENTER);
  721.  
  722.         gridBagConstraints = new java.awt.GridBagConstraints();
  723.         gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
  724.         pnlInScroll.add(pnlPage, gridBagConstraints);
  725.  
  726.         scrollPane.setViewportView(pnlInScroll);
  727.  
  728.         pnlMain.add(scrollPane, java.awt.BorderLayout.CENTER);
  729.  
  730.         add(pnlMain, java.awt.BorderLayout.CENTER);
  731.  
  732.         pnlStatus.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 0));
  733.  
  734.         lblStatus.setFont(new java.awt.Font("Dialog", 1, 10));
  735.         lblStatus.setText("Page i of n");
  736.         pnlStatus.add(lblStatus);
  737.  
  738.         add(pnlStatus, java.awt.BorderLayout.SOUTH);
  739.  
  740.     }//GEN-END:initComponents
  741.  
  742.     private void cmbZoomItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cmbZoomItemStateChanged
  743.         // Add your handling code here:
  744.         btnActualSize.setSelected(false);
  745.         btnFitPage.setSelected(false);
  746.         btnFitWidth.setSelected(false);
  747.     }//GEN-LAST:event_cmbZoomItemStateChanged
  748.  
  749.     private void pnlMainComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_pnlMainComponentResized
  750.         // Add your handling code here:
  751.         if (btnFitPage.isSelected())
  752.         {
  753.             setZoomRatio(((float)pnlInScroll.getVisibleRect().getHeight() - 20f) / (float)jasperPrint.getPageHeight());
  754.         }
  755.         else if (btnFitWidth.isSelected())
  756.         {
  757.             setZoomRatio(((float)pnlInScroll.getVisibleRect().getWidth() - 20f) / (float)jasperPrint.getPageWidth());
  758.         }
  759.         
  760.     }//GEN-LAST:event_pnlMainComponentResized
  761.  
  762.     private void btnActualSizeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnActualSizeActionPerformed
  763.         // Add your handling code here:
  764.         if (btnActualSize.isSelected())
  765.         {
  766.             btnFitPage.setSelected(false);
  767.             btnFitWidth.setSelected(false);
  768.  
  769.             setZoomRatio(1);
  770.         }
  771.     }//GEN-LAST:event_btnActualSizeActionPerformed
  772.  
  773.     private void btnFitWidthActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnFitWidthActionPerformed
  774.         // Add your handling code here:
  775.         if (btnFitWidth.isSelected())
  776.         {
  777.             btnActualSize.setSelected(false);
  778.             btnFitPage.setSelected(false);
  779.  
  780.             setZoomRatio(((float)pnlInScroll.getVisibleRect().getWidth() - 20f) / (float)jasperPrint.getPageWidth());
  781.         }
  782.     }//GEN-LAST:event_btnFitWidthActionPerformed
  783.  
  784.     private void btnFitPageActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnFitPageActionPerformed
  785.         // Add your handling code here:
  786.         if (btnFitPage.isSelected())
  787.         {
  788.             btnActualSize.setSelected(false);
  789.             btnFitWidth.setSelected(false);
  790.  
  791.             setZoomRatio(((float)pnlInScroll.getVisibleRect().getHeight() - 20f) / (float)jasperPrint.getPageHeight());
  792.         }
  793.     }//GEN-LAST:event_btnFitPageActionPerformed
  794.  
  795.     private void btnSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSaveActionPerformed
  796.         // Add your handling code here:
  797.         
  798.         JFileChooser fileChooser = new JFileChooser();
  799.  
  800.         FileFilter jrprintFileFilter = 
  801.             new FileFilter()
  802.             {
  803.                 public boolean accept(File file)
  804.                 {
  805.                     if (file.isDirectory())
  806.                         return true;
  807.                     else
  808.                         return file.getName().toLowerCase().endsWith(".jrprint");
  809.                 }
  810.                 
  811.                 public String getDescription(){ return "JasperReports (*.jrprint)"; }
  812.             };
  813.         fileChooser.addChoosableFileFilter(jrprintFileFilter);
  814.  
  815.         JRSaveContributor pdfSaveContrib = null;
  816.         try 
  817.         {
  818.             Class pdfSaveContribClass = JRClassLoader.loadClassForName("dori.jasper.view.save.JRPdfSaveContributor");
  819.             pdfSaveContrib = (JRSaveContributor)pdfSaveContribClass.newInstance();
  820.             fileChooser.addChoosableFileFilter(pdfSaveContrib);
  821.         }
  822.         catch (Exception e)
  823.         {
  824.         }
  825.     
  826.         JRSaveContributor htmlSaver = null;
  827.         try 
  828.         {
  829.             Class htmlSaverClass = JRClassLoader.loadClassForName("dori.jasper.view.save.JRHtmlSaveContributor");
  830.             htmlSaver = (JRSaveContributor)htmlSaverClass.newInstance();
  831.             fileChooser.addChoosableFileFilter(htmlSaver);
  832.         }
  833.         catch (Exception e)
  834.         {
  835.         }
  836.     
  837.         JRSaveContributor xlsSingleSheetSaver = null;
  838.         try 
  839.         {
  840.             Class xlsSingleSheetSaverClass = JRClassLoader.loadClassForName("dori.jasper.view.save.JRSingleSheetXlsSaveContributor");
  841.             xlsSingleSheetSaver = (JRSaveContributor)xlsSingleSheetSaverClass.newInstance();
  842.             fileChooser.addChoosableFileFilter(xlsSingleSheetSaver);
  843.         }
  844.         catch (Exception e)
  845.         {
  846.         }
  847.     
  848.         JRSaveContributor xlsMultipleSheetsSaver = null;
  849.         try 
  850.         {
  851.             Class xlsMultipleSheetsSaverClass = JRClassLoader.loadClassForName("dori.jasper.view.save.JRMultipleSheetsXlsSaveContributor");
  852.             xlsMultipleSheetsSaver = (JRSaveContributor)xlsMultipleSheetsSaverClass.newInstance();
  853.             fileChooser.addChoosableFileFilter(xlsMultipleSheetsSaver);
  854.         }
  855.         catch (Exception e)
  856.         {
  857.         }
  858.     
  859.         JRSaveContributor csvSaver = null;
  860.         try 
  861.         {
  862.             Class csvSaverClass = JRClassLoader.loadClassForName("dori.jasper.view.save.JRCsvSaveContributor");
  863.             csvSaver = (JRSaveContributor)csvSaverClass.newInstance();
  864.             fileChooser.addChoosableFileFilter(csvSaver);
  865.         }
  866.         catch (Exception e)
  867.         {
  868.         }
  869.     
  870.         JRSaveContributor xmlSaver = null;
  871.         try 
  872.         {
  873.             Class xmlSaverClass = JRClassLoader.loadClassForName("dori.jasper.view.save.JRXmlSaveContributor");
  874.             xmlSaver = (JRSaveContributor)xmlSaverClass.newInstance();
  875.             fileChooser.addChoosableFileFilter(xmlSaver);
  876.         }
  877.         catch (Exception e)
  878.         {
  879.         }
  880.     
  881.         JRSaveContributor xmlEmbeddedImagesSaver = null;
  882.         try 
  883.         {
  884.             Class xmlEmbeddedImagesSaverClass = JRClassLoader.loadClassForName("dori.jasper.view.save.JREmbeddedImagesXmlSaveContributor");
  885.             xmlEmbeddedImagesSaver = (JRSaveContributor)xmlEmbeddedImagesSaverClass.newInstance();
  886.             fileChooser.addChoosableFileFilter(xmlEmbeddedImagesSaver);
  887.         }
  888.         catch (Exception e)
  889.         {
  890.         }
  891.  
  892.         fileChooser.setFileFilter(jrprintFileFilter);
  893.     
  894.         int retValue = fileChooser.showSaveDialog(this);
  895.         if (retValue == JFileChooser.APPROVE_OPTION)
  896.         {
  897.             FileFilter fileFilter = fileChooser.getFileFilter();
  898.             File file = fileChooser.getSelectedFile();
  899.             // OpManager - Start.  While saving reports if file extension is not given by the user then the extensions are appended at the end.
  900.             String oriFileName = file.toString();
  901.             if(oriFileName.indexOf(".") == -1)
  902.             {
  903.                 String fileDescr = fileFilter.getDescription();
  904.                 if(fileDescr.indexOf("All Files") != -1)
  905.                 {
  906.                     oriFileName = oriFileName + ".jrprint";
  907.                 }
  908.                 else if(fileDescr.indexOf(".jrprint") != -1)
  909.                 {
  910.                     oriFileName = oriFileName + ".jrprint";
  911.                 }
  912.                 else if(fileDescr.indexOf(".pdf") != -1)
  913.                 {
  914.                     oriFileName = oriFileName + ".pdf";
  915.                 }
  916.                 else if(fileDescr.indexOf(".html") != -1)
  917.                 {
  918.                     oriFileName = oriFileName + ".html";
  919.                 }
  920.                 else if(fileDescr.indexOf(".xls") != -1)
  921.                 {
  922.                     oriFileName = oriFileName + ".xls";
  923.                 }
  924.                 else if(fileDescr.indexOf(".csv") != -1)
  925.                 {
  926.                     oriFileName = oriFileName + ".csv";
  927.                 }
  928.                 else if(fileDescr.indexOf(".xml") != -1)
  929.                 {
  930.                     oriFileName = oriFileName + ".xml";
  931.                 }
  932.             }
  933.             file = new File(oriFileName);
  934.             String lowerCaseFileName = file.getName().toLowerCase();
  935.             // OpManager - End
  936.             
  937.             try
  938.             {
  939.                 if (fileFilter == jrprintFileFilter)
  940.                 {
  941.                     JRSaver.saveObject(jasperPrint, file);
  942.                 }
  943.                 else if (fileFilter instanceof JRSaveContributor)
  944.                 {
  945.                     ((JRSaveContributor)fileFilter).save(jasperPrint, file);
  946.                 }
  947.                 else
  948.                 {
  949.                     if (lowerCaseFileName.endsWith(".jrprint"))
  950.                     {
  951.                         JRSaver.saveObject(jasperPrint, file);
  952.                     }
  953.                     else if (
  954.                         lowerCaseFileName.endsWith(".pdf") 
  955.                         && pdfSaveContrib != null
  956.                         )
  957.                     {
  958.                         pdfSaveContrib.save(jasperPrint, file);
  959.                     }
  960.                     else if (
  961.                         (lowerCaseFileName.endsWith(".html") 
  962.                         || lowerCaseFileName.endsWith(".htm"))
  963.                         && htmlSaver != null
  964.                         )
  965.                     {
  966.                         htmlSaver.save(jasperPrint, file);
  967.                     }
  968.                     else if (
  969.                         lowerCaseFileName.endsWith(".xls")
  970.                         && xlsSingleSheetSaver != null
  971.                         )
  972.                     {
  973.                         xlsSingleSheetSaver.save(jasperPrint, file);
  974.                     }
  975.                     else if (
  976.                         lowerCaseFileName.endsWith(".csv")
  977.                         && csvSaver != null
  978.                         )
  979.                     {
  980.                         csvSaver.save(jasperPrint, file);
  981.                     }
  982.                     else if (
  983.                         lowerCaseFileName.endsWith(".xml") 
  984.                         || lowerCaseFileName.endsWith(".jrpxml")
  985.                         && xmlSaver != null
  986.                         )
  987.                     {
  988.                         xmlSaver.save(jasperPrint, file);
  989.                     }
  990.                     else
  991.                     {
  992.                         JRSaver.saveObject(jasperPrint, fileChooser.getSelectedFile());
  993.                     }
  994.                 }
  995.             }
  996.             catch (JRException e)
  997.             {
  998.                 e.printStackTrace();
  999.                 JOptionPane.showMessageDialog(null, "Error saving document. See the console for details.");
  1000.             }
  1001.         }
  1002.     }//GEN-LAST:event_btnSaveActionPerformed
  1003.  
  1004.     private void pnlLinksMouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_pnlLinksMouseDragged
  1005.         // Add your handling code here:
  1006.  
  1007.         Container container = pnlInScroll.getParent();
  1008.         if (container instanceof JViewport)
  1009.         {
  1010.             JViewport viewport = (JViewport) container;
  1011.             Point point = viewport.getViewPosition();
  1012.             int newX = point.x - (evt.getX() - downX);
  1013.             int newY = point.y - (evt.getY() - downY);
  1014.             
  1015.             int maxX = pnlInScroll.getWidth() - viewport.getWidth();
  1016.             int maxY = pnlInScroll.getHeight() - viewport.getHeight();
  1017.  
  1018.             if (newX < 0)
  1019.             {
  1020.                 newX = 0;
  1021.             }
  1022.             if (newX > maxX)
  1023.             {
  1024.                 newX = maxX;
  1025.             }
  1026.             if (newY < 0)
  1027.             {
  1028.                 newY = 0;
  1029.             }
  1030.             if (newY > maxY)
  1031.             {
  1032.                 newY = maxY;
  1033.             }
  1034.             
  1035.             viewport.setViewPosition(new Point(newX, newY));
  1036.         }
  1037.     }//GEN-LAST:event_pnlLinksMouseDragged
  1038.  
  1039.     private void pnlLinksMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_pnlLinksMouseReleased
  1040.         // Add your handling code here:
  1041.         pnlLinks.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
  1042.     }//GEN-LAST:event_pnlLinksMouseReleased
  1043.  
  1044.     private void pnlLinksMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_pnlLinksMousePressed
  1045.         // Add your handling code here:
  1046.         pnlLinks.setCursor(new Cursor(Cursor.MOVE_CURSOR));
  1047.         
  1048.         downX = evt.getX();
  1049.         downY = evt.getY();
  1050.     }//GEN-LAST:event_pnlLinksMousePressed
  1051.  
  1052.     private void btnPrintActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnPrintActionPerformed
  1053.     {//GEN-HEADEREND:event_btnPrintActionPerformed
  1054.         // Add your handling code here:
  1055.         
  1056.         Thread thread = 
  1057.             new Thread(
  1058.                 new Runnable()
  1059.                 {
  1060.                     public void run()
  1061.                     {
  1062.                         try 
  1063.                         {
  1064.                             JasperPrintManager.printReport(jasperPrint, true);
  1065.                         }
  1066.                         catch (Exception ex) 
  1067.                         {
  1068.                             ex.printStackTrace();
  1069.                             JOptionPane.showMessageDialog(null, "Error printing report. See the console for details.");
  1070.                         }
  1071.                     }
  1072.                 }
  1073.             );
  1074.         
  1075.         thread.start();
  1076.  
  1077.     }//GEN-LAST:event_btnPrintActionPerformed
  1078.  
  1079.     private void btnLastActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnLastActionPerformed
  1080.     {//GEN-HEADEREND:event_btnLastActionPerformed
  1081.         // Add your handling code here:
  1082.         setPageIndex(jasperPrint.getPages().size() - 1);
  1083.         refreshPage();
  1084.     }//GEN-LAST:event_btnLastActionPerformed
  1085.  
  1086.     private void btnNextActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnNextActionPerformed
  1087.     {//GEN-HEADEREND:event_btnNextActionPerformed
  1088.         // Add your handling code here:
  1089.         setPageIndex(pageIndex + 1);
  1090.         refreshPage();
  1091.     }//GEN-LAST:event_btnNextActionPerformed
  1092.  
  1093.     private void btnPreviousActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnPreviousActionPerformed
  1094.     {//GEN-HEADEREND:event_btnPreviousActionPerformed
  1095.         // Add your handling code here:
  1096.         setPageIndex(pageIndex - 1);
  1097.         refreshPage();
  1098.     }//GEN-LAST:event_btnPreviousActionPerformed
  1099.  
  1100.     private void btnFirstActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnFirstActionPerformed
  1101.     {//GEN-HEADEREND:event_btnFirstActionPerformed
  1102.         // Add your handling code here:
  1103.         setPageIndex(0);
  1104.         refreshPage();
  1105.     }//GEN-LAST:event_btnFirstActionPerformed
  1106.  
  1107.     private void btnReloadActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnReloadActionPerformed
  1108.     {//GEN-HEADEREND:event_btnReloadActionPerformed
  1109.         // Add your handling code here:
  1110.         if (type == TYPE_FILE_NAME)
  1111.         {
  1112.             try
  1113.             {
  1114.                 loadReport(reportFileName, isXML);
  1115.             }
  1116.             catch (JRException e)
  1117.             {
  1118.                 e.printStackTrace();
  1119.  
  1120.                 jasperPrint = null;
  1121.                 setPageIndex(0);
  1122.                 refreshPage();
  1123.  
  1124.                 JOptionPane.showMessageDialog(this, "Error loading report. See the console for details.");
  1125.             }
  1126.  
  1127.             setPageIndex(0);
  1128.             zoom = 0;//force pageRefresh()
  1129.             setZoomRatio(1);
  1130.         }
  1131.     }//GEN-LAST:event_btnReloadActionPerformed
  1132.  
  1133.     private void btnZoomInActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnZoomInActionPerformed
  1134.     {//GEN-HEADEREND:event_btnZoomInActionPerformed
  1135.         // Add your handling code here:
  1136.         btnActualSize.setSelected(false);
  1137.         btnFitPage.setSelected(false);
  1138.         btnFitWidth.setSelected(false);
  1139.  
  1140.         int newZoomInt = (int)(100 * getZoomRatio());
  1141.         int index = Arrays.binarySearch(zooms, newZoomInt);
  1142.         if (index < 0)
  1143.         {
  1144.             setZoomRatio((float)zooms[- index - 1] / 100f);
  1145.         }
  1146.         else if (index < cmbZoom.getModel().getSize() - 1)
  1147.         {
  1148.             setZoomRatio((float)zooms[index + 1] / 100f);
  1149.         }
  1150.     }//GEN-LAST:event_btnZoomInActionPerformed
  1151.  
  1152.     private void btnZoomOutActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnZoomOutActionPerformed
  1153.     {//GEN-HEADEREND:event_btnZoomOutActionPerformed
  1154.         // Add your handling code here:
  1155.         btnActualSize.setSelected(false);
  1156.         btnFitPage.setSelected(false);
  1157.         btnFitWidth.setSelected(false);
  1158.  
  1159.         int newZoomInt = (int)(100 * getZoomRatio());
  1160.         int index = Arrays.binarySearch(zooms, newZoomInt);
  1161.         if (index > 0)
  1162.         {
  1163.             setZoomRatio((float)zooms[index - 1] / 100f);
  1164.         }
  1165.         else if (index < -1)
  1166.         {
  1167.             setZoomRatio((float)zooms[- index - 2] / 100f);
  1168.         }
  1169.     }//GEN-LAST:event_btnZoomOutActionPerformed
  1170.  
  1171.     private void cmbZoomActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cmbZoomActionPerformed
  1172.     {//GEN-HEADEREND:event_cmbZoomActionPerformed
  1173.         // Add your handling code here:
  1174.         float newZoom = getZoomRatio();
  1175.         
  1176.         if (newZoom < MIN_ZOOM)
  1177.         {
  1178.             newZoom = MIN_ZOOM;
  1179.         }
  1180.         
  1181.         if (newZoom > MAX_ZOOM)
  1182.         {
  1183.             newZoom = MAX_ZOOM;
  1184.         }
  1185.  
  1186.         setZoomRatio(newZoom);
  1187.     }//GEN-LAST:event_cmbZoomActionPerformed
  1188.  
  1189.  
  1190.     /**
  1191.     */
  1192.     private void hyperlinkClicked(MouseEvent evt)
  1193.     {
  1194.         JPanel link = (JPanel)evt.getSource();
  1195.         JRPrintHyperlink element = (JRPrintHyperlink)linksMap.get(link);
  1196.         
  1197.         try
  1198.         {
  1199.             JRHyperlinkListener listener = null;
  1200.             for(int i = 0; i < hyperlinkListeners.size(); i++)
  1201.             {
  1202.                 listener = (JRHyperlinkListener)hyperlinkListeners.get(i);
  1203.                 listener.gotoHyperlink(element);
  1204.             }
  1205.         }
  1206.         catch(JRException e)
  1207.         {
  1208.             e.printStackTrace();
  1209.             JOptionPane.showMessageDialog(this, "Error encoutered when following hyperlink. See the console for details.");
  1210.         }
  1211.     }
  1212.  
  1213.  
  1214.     /**
  1215.     */
  1216.     private void setPageIndex(int index)
  1217.     {
  1218.         pageIndex = index;
  1219.         if (
  1220.             jasperPrint != null && 
  1221.             jasperPrint.getPages() != null &&
  1222.             jasperPrint.getPages().size() > 0
  1223.             )
  1224.         {
  1225.             btnFirst.setEnabled( (pageIndex > 0) );
  1226.             btnPrevious.setEnabled( (pageIndex > 0) );
  1227.             btnNext.setEnabled( (pageIndex < jasperPrint.getPages().size() - 1) );
  1228.             btnLast.setEnabled( (pageIndex < jasperPrint.getPages().size() - 1) );
  1229.             lblStatus.setText("Page " + (pageIndex + 1) + " of " + jasperPrint.getPages().size());
  1230.         }
  1231.         else
  1232.         {
  1233.             btnFirst.setEnabled(false);
  1234.             btnPrevious.setEnabled(false);
  1235.             btnNext.setEnabled(false);
  1236.             btnLast.setEnabled(false);
  1237.             lblStatus.setText("");
  1238.         }
  1239.     }
  1240.  
  1241.  
  1242.     /**
  1243.     */
  1244.     protected void loadReport(String fileName, boolean isXML) throws JRException
  1245.     {
  1246.         if (isXML)
  1247.         {
  1248.             jasperPrint = JRPrintXmlLoader.load(fileName);
  1249.         }
  1250.         else
  1251.         {
  1252.             jasperPrint = (JasperPrint)JRLoader.loadObject(fileName);
  1253.         }
  1254.  
  1255.         type = TYPE_FILE_NAME;
  1256.         this.isXML = isXML;
  1257.         reportFileName = fileName;
  1258.         btnReload.setEnabled(true);
  1259.     }
  1260.  
  1261.  
  1262.     /**
  1263.     */
  1264.     protected void loadReport(InputStream is, boolean isXML) throws JRException
  1265.     {
  1266.         if (isXML)
  1267.         {
  1268.             jasperPrint = JRPrintXmlLoader.load(is);
  1269.         }
  1270.         else
  1271.         {
  1272.             jasperPrint = (JasperPrint)JRLoader.loadObject(is);
  1273.         }
  1274.  
  1275.         type = TYPE_INPUT_STREAM;
  1276.         this.isXML = isXML;
  1277.         btnReload.setEnabled(false);
  1278.     }
  1279.  
  1280.  
  1281.     /**
  1282.     */
  1283.     protected void loadReport(JasperPrint jrPrint) throws JRException
  1284.     {
  1285.         jasperPrint = jrPrint;
  1286.         type = TYPE_JASPER_PRINT;
  1287.         isXML = false;
  1288.         btnReload.setEnabled(false);
  1289.     }
  1290.  
  1291.  
  1292.     /**
  1293.     */
  1294.     protected void refreshPage()
  1295.     {
  1296.         if (
  1297.             jasperPrint == null ||
  1298.             jasperPrint.getPages() == null ||
  1299.             jasperPrint.getPages().size() == 0
  1300.             )
  1301.         {
  1302.             pnlPage.setVisible(false);
  1303.             btnSave.setEnabled(false);
  1304.             btnPrint.setEnabled(false);
  1305.             btnActualSize.setEnabled(false);
  1306.             btnFitPage.setEnabled(false);
  1307.             btnFitWidth.setEnabled(false);
  1308.             btnZoomIn.setEnabled(false);
  1309.             btnZoomOut.setEnabled(false);
  1310.             cmbZoom.setEnabled(false);
  1311.             
  1312.             if (jasperPrint != null)
  1313.             {
  1314.                 JOptionPane.showMessageDialog(this, "The document has no pages.");
  1315.             }
  1316.  
  1317.             return;
  1318.         }
  1319.  
  1320.         pnlPage.setVisible(true);
  1321.         btnSave.setEnabled(true);
  1322.         btnPrint.setEnabled(true);
  1323.         btnActualSize.setEnabled(true);
  1324.         btnFitPage.setEnabled(true);
  1325.         btnFitWidth.setEnabled(true);
  1326.         btnZoomIn.setEnabled(zoom < MAX_ZOOM);
  1327.         btnZoomOut.setEnabled(zoom > MIN_ZOOM);
  1328.         cmbZoom.setEnabled(true);
  1329.         
  1330.         Image image = null;
  1331.         ImageIcon imageIcon = null;
  1332.  
  1333.         Dimension dim = new Dimension(
  1334.             (int)(jasperPrint.getPageWidth() * zoom) + 8, // 2 from border, 5 from shadow and 1 extra pixel for image
  1335.             (int)(jasperPrint.getPageHeight() * zoom) + 8
  1336.             );
  1337.         pnlPage.setMaximumSize(dim);
  1338.         pnlPage.setMinimumSize(dim);
  1339.         pnlPage.setPreferredSize(dim);
  1340.  
  1341.         try
  1342.         {
  1343.             image = JasperPrintManager.printPageToImage(jasperPrint, pageIndex, zoom);
  1344.             imageIcon = new ImageIcon(image);
  1345.         }
  1346.         catch(Exception e)
  1347.         {
  1348.             e.printStackTrace();
  1349.             JOptionPane.showMessageDialog(this, "Error displaying report page. See the console for details.");
  1350.         }
  1351.  
  1352.         pnlLinks.removeAll();
  1353.         linksMap = new HashMap();
  1354.  
  1355.         java.util.List pages = jasperPrint.getPages();
  1356.         JRPrintPage page = (JRPrintPage)pages.get(pageIndex);
  1357.         Collection elements = page.getElements();
  1358.         if(elements != null && elements.size() > 0)
  1359.         {
  1360.             String toolTip = null;
  1361.             JPanel link = null;
  1362.             JRPrintElement element = null;
  1363.             JRPrintHyperlink hyperlink = null;
  1364.             for(Iterator it = elements.iterator(); it.hasNext();)
  1365.             {
  1366.                 element = (JRPrintElement)it.next();
  1367.                 if (
  1368.                     element instanceof JRPrintHyperlink && 
  1369.                     ((JRPrintHyperlink)element).getHyperlinkType() != JRHyperlink.HYPERLINK_TYPE_NONE
  1370.                     )
  1371.                 {
  1372.                     hyperlink = (JRPrintHyperlink)element;
  1373.                     
  1374.                     link = new JPanel();
  1375.                     link.setCursor(new Cursor(Cursor.HAND_CURSOR));
  1376.                     link.setLocation(
  1377.                         (int)(element.getX() * zoom), 
  1378.                         (int)(element.getY() * zoom)
  1379.                         );
  1380.                     link.setSize(
  1381.                         (int)(element.getWidth() * zoom),
  1382.                         (int)(element.getHeight() * zoom)
  1383.                         );
  1384.                     link.setOpaque(false);
  1385.                     
  1386.                     toolTip = null;
  1387.                     switch(hyperlink.getHyperlinkType())
  1388.                     {
  1389.                         case JRHyperlink.HYPERLINK_TYPE_REFERENCE :
  1390.                         {
  1391.                             toolTip = hyperlink.getHyperlinkReference();
  1392.                             break;
  1393.                         }
  1394.                         case JRHyperlink.HYPERLINK_TYPE_LOCAL_ANCHOR :
  1395.                         {
  1396.                             if (hyperlink.getHyperlinkAnchor() != null)
  1397.                             {
  1398.                                 toolTip = "#" + hyperlink.getHyperlinkAnchor();
  1399.                             }
  1400.                             break;
  1401.                         }
  1402.                         case JRHyperlink.HYPERLINK_TYPE_LOCAL_PAGE :
  1403.                         {
  1404.                             if (hyperlink.getHyperlinkPage() != null)
  1405.                             {
  1406.                                 toolTip = "#page " + hyperlink.getHyperlinkPage();
  1407.                             }
  1408.                             break;
  1409.                         }
  1410.                         case JRHyperlink.HYPERLINK_TYPE_REMOTE_ANCHOR :
  1411.                         {
  1412.                             toolTip = "";
  1413.                             if (hyperlink.getHyperlinkReference() != null)
  1414.                             {
  1415.                                 toolTip = toolTip + hyperlink.getHyperlinkReference();
  1416.                             }
  1417.                             if (hyperlink.getHyperlinkAnchor() != null)
  1418.                             {
  1419.                                 toolTip = toolTip + "#" + hyperlink.getHyperlinkAnchor();
  1420.                             }
  1421.                             break;
  1422.                         }
  1423.                         case JRHyperlink.HYPERLINK_TYPE_REMOTE_PAGE :
  1424.                         {
  1425.                             toolTip = "";
  1426.                             if (hyperlink.getHyperlinkReference() != null)
  1427.                             {
  1428.                                 toolTip = toolTip + hyperlink.getHyperlinkReference();
  1429.                             }
  1430.                             if (hyperlink.getHyperlinkPage() != null)
  1431.                             {
  1432.                                 toolTip = toolTip + "#page " + hyperlink.getHyperlinkPage();
  1433.                             }
  1434.                             break;
  1435.                         }
  1436.                         default :
  1437.                         {
  1438.                             break;
  1439.                         }
  1440.                     }
  1441.                     
  1442.                     link.setToolTipText(toolTip);
  1443.                     link.addMouseListener(mouseListener);
  1444.                     pnlLinks.add(link);
  1445.                     linksMap.put(link, element);
  1446.                 }
  1447.             }
  1448.         }
  1449.         
  1450.         lblPage.setIcon(imageIcon);
  1451.     }
  1452.  
  1453.  
  1454.     /**
  1455.     */
  1456.     private void emptyContainer(Container container)
  1457.     {
  1458.         Component[] components = container.getComponents();
  1459.  
  1460.         if (components != null)
  1461.         {
  1462.             for(int i = 0; i < components.length; i++)
  1463.             {
  1464.                 if (components[i] instanceof Container)
  1465.                 {
  1466.                     emptyContainer((Container)components[i]);
  1467.                 }
  1468.             }
  1469.         }
  1470.  
  1471.         components = null; 
  1472.         container.removeAll(); 
  1473.         container = null; 
  1474.     } 
  1475.  
  1476.  
  1477.     /**
  1478.     */
  1479.     private float getZoomRatio()
  1480.     {
  1481.         float newZoom = zoom;
  1482.         
  1483.         try
  1484.         {
  1485.             newZoom = 
  1486.                 zoomDecimalFormat.parse(
  1487.                     String.valueOf(cmbZoom.getEditor().getItem())
  1488.                     ).floatValue() / 100f;
  1489.         }
  1490.         catch(ParseException e)
  1491.         {
  1492.         }
  1493.  
  1494.         return newZoom;
  1495.     } 
  1496.  
  1497.  
  1498.     /**
  1499.     */
  1500.     private void setZoomRatio(float newZoom)
  1501.     {
  1502.         if (newZoom > 0)
  1503.         {
  1504.             cmbZoom.getEditor().setItem(
  1505.                 zoomDecimalFormat.format(newZoom * 100) + "%"
  1506.                 );
  1507.  
  1508.             if (zoom != newZoom)
  1509.             {
  1510.                 zoom = newZoom;
  1511.  
  1512.                 refreshPage();
  1513.             }
  1514.         }
  1515.     } 
  1516.  
  1517.  
  1518.     // Variables declaration - do not modify//GEN-BEGIN:variables
  1519.     protected javax.swing.JPanel tlbToolBar;
  1520.     private javax.swing.JPanel pnlInScroll;
  1521.     private javax.swing.JPanel jPanel4;
  1522.     private javax.swing.JPanel pnlPage;
  1523.     private javax.swing.JLabel jLabel1;
  1524.     protected javax.swing.JPanel pnlStatus;
  1525.     private javax.swing.JScrollPane scrollPane;
  1526.     private javax.swing.JPanel pnlLinks;
  1527.     private javax.swing.JPanel pnlMain;
  1528.     protected javax.swing.JButton btnSave;
  1529.     protected javax.swing.JToggleButton btnActualSize;
  1530.     protected javax.swing.JPanel pnlSep02;
  1531.     protected javax.swing.JLabel lblStatus;
  1532.     protected javax.swing.JButton btnLast;
  1533.     protected javax.swing.JButton btnReload;
  1534.     private javax.swing.JPanel jPanel5;
  1535.     protected javax.swing.JButton btnPrevious;
  1536.     protected javax.swing.JButton btnZoomOut;
  1537.     protected javax.swing.JPanel pnlSep03;
  1538.     private javax.swing.JLabel lblPage;
  1539.     private javax.swing.JPanel jPanel8;
  1540.     protected javax.swing.JButton btnZoomIn;
  1541.     protected javax.swing.JToggleButton btnFitPage;
  1542.     private javax.swing.JPanel jPanel7;
  1543.     protected javax.swing.JButton btnNext;
  1544.     protected javax.swing.JPanel pnlSep01;
  1545.     protected javax.swing.JButton btnFirst;
  1546.     private javax.swing.JPanel jPanel6;
  1547.     protected javax.swing.JComboBox cmbZoom;
  1548.     private javax.swing.JPanel jPanel9;
  1549.     protected javax.swing.JToggleButton btnFitWidth;
  1550.     protected javax.swing.JButton btnPrint;
  1551.     // End of variables declaration//GEN-END:variables
  1552.  
  1553. }
  1554.