package usda.weru.weps.reports;

import java.awt.Component;
import java.awt.Container;
import java.util.ResourceBundle;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JToggleButton;
import net.sf.jasperreports.engine.JRConstants;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.swing.JRViewer;
import net.sf.jasperreports.view.save.JRPdfSaveContributor;
import net.sf.jasperreports.swing.JRViewerController;
import net.sf.jasperreports.view.JRSaveContributor;

/**
 *
 * @author maxerdwien
 */
public class JRViewerBean extends JRViewer {

    private static final long serialVersionUID = 1L;

    private final boolean c_first = true;
    
    private final JRViewerToolbarBean myTool;

    /**
     *
     */
    public JRViewerBean() {
        super((JasperPrint) null);
        myTool = new JRViewerToolbarBean(this.viewerContext);
    }
    
    public JRViewerBean(JasperPrint jrPrint) {
        super(jrPrint);
        myTool = new JRViewerToolbarBean(this.viewerContext);
    }
    
    public JRViewerController getContext()
    {
        return viewerContext;
    }

    /**
     *
     * @param visible
     */
    public void setToolbarVisible(boolean visible) {
        tlbToolBar.setVisible(visible);
    }

    /**
     *
     * @return
     */
    public boolean isToolbarVisible() {
        return tlbToolBar.isVisible();
    }

    /**
     *
     * @return
     */
    public JButton getSaveButton() {
        return myTool.getSave();
    }

    /**
     *
     * @return
     */
    public JButton getPrintButton() {
        return myTool.getPrintButton();
    }

    /**
     *
     * @return
     */
    public JButton getReloadButton() {
        return myTool.getReloadButton();
    }

    /**
     *
     * @return
     */
    public JButton getFirstButton() {
        return myTool.getFirstButton();
    }

    /**
     *
     * @return
     */
    public JButton getPreviousButton() {
        return myTool.getPreviousButton();
    }

    /**
     *
     * @return
     */
    public JButton getNextButton() {
        return myTool.getNextButton();
    }

    /**
     *
     * @return
     */
    public JButton getLastButton() {
        return myTool.getLastButton();
    }

    /**
     *
     * @return
     */
    public JTextField getGoToTextField() {
        return myTool.getGoToTextField();
    }

    /**
     *
     * @return
     */
    public JToggleButton getActualSizeButton() {
        return myTool.getActualSizeButton();
    }

    /**
     *
     * @return
     */
    public JToggleButton getFitWidthButton() {
        return myTool.getFitWidthButton();
    }

    /**
     *
     * @return
     */
    public JToggleButton getFitPageButton() {
        return myTool.getFitPageButton();
    }

    /**
     *
     * @return
     */
    public JButton getZoomInButton() {
        return myTool.getZoomInButton();
    }

    /**
     *
     * @return
     */
    public JButton getZoomOutButton() {
        return myTool.getZoomOutButton();
    }

    /**
     *
     * @return
     */
    @SuppressWarnings("rawtypes")
    public JComboBox getZoomRatioComboBox() {
        return myTool.getZoomRatioComboBox();
    }

    /**
     *
     * @param print
     */
    public void setJasperPrint(JasperPrint print) {
        viewerContext.loadReport(print);
        viewerContext.refreshPage();
    }

    private JScrollPane c_scrollPane;

    private synchronized JScrollPane getScrollPane() {
        if (c_scrollPane == null) {
            c_scrollPane = findJScrollPane(this);
        }
        return c_scrollPane;
    }

    /**
     *
     */
//    @Override
//    protected void refreshPage() {
//        super.refreshPage();
//        JScrollPane pane = getScrollPane();
//        if (pane != null && pane.getVerticalScrollBar().isEnabled()) {
//            pane.getVerticalScrollBar().setValue(0);
//        }
//
//    }

    private JScrollPane findJScrollPane(Component comp) {
        if (comp instanceof JScrollPane) {
            return (JScrollPane) comp;
        } else if (comp instanceof Container) {
            Container cont = (Container) comp;
            for (Component c : cont.getComponents()) {
                JScrollPane pane = findJScrollPane(c);
                if (pane != null) {
                    return pane;
                }
            }
        }
        return null;
    }
    
    
    public JRSaveContributor[] getSaveContributors()
    {
        return tlbToolBar.getSaveContributors();
    }

    /**
     *
     */
    protected void initSaveContributors() {
        ResourceBundle resourceBundle = ResourceBundle.getBundle("net/sf/jasperreports/view/viewer", getLocale());
        tlbToolBar.addSaveContributor(new JRPdfSaveContributor(getLocale(), resourceBundle));

    }
    
    private class JRViewerToolbarBean extends net.sf.jasperreports.swing.JRViewerToolbar
    {
        
        private static final long serialVersionUID = JRConstants.SERIAL_VERSION_UID;

        public JRViewerToolbarBean(JRViewerController viewerContext) {
            super(viewerContext);
        }
        
        public javax.swing.JButton getSave()
        {
            return btnSave;
        }

        /**
         *
         * @return
         */
        public JButton getPrintButton() {
            return btnPrint;
        }

        /**
         *
         * @return
         */
        public JButton getReloadButton() {
            return btnReload;
        }

        /**
         *
         * @return
         */
        public JButton getFirstButton() {
            return btnFirst;
        }

    /**
        *
        * @return
        */
       public JButton getPreviousButton() {
           return btnPrevious;
       }

       /**
        *
        * @return
        */
       public JButton getNextButton() {
           return btnNext;
       }

       /**
        *
        * @return
        */
       public JButton getLastButton() {
           return btnLast;
       }

       /**
        *
        * @return
        */
       public JTextField getGoToTextField() {
           return txtGoTo;
       }

       /**
        *
        * @return
        */
       public JToggleButton getActualSizeButton() {
           return btnActualSize;
       }

       /**
        *
        * @return
        */
       public JToggleButton getFitWidthButton() {
           return btnFitWidth;
       }

       /**
        *
        * @return
        */
       public JToggleButton getFitPageButton() {
           return btnFitPage;
       }

       /**
        *
        * @return
        */
       public JButton getZoomInButton() {
           return btnZoomIn;
       }

       /**
        *
        * @return
        */
       public JButton getZoomOutButton() {
           return btnZoomOut;
       }

       /**
        *
        * @return
        */
       @SuppressWarnings("rawtypes")
       public JComboBox getZoomRatioComboBox() {
           return cmbZoom;
       }
        
    }

}
