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 javax.swing.SwingUtilities;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JRViewer;
import net.sf.jasperreports.view.save.JRPdfSaveContributor;

public class JRViewerBean extends JRViewer {
    
    private boolean c_first = true;

    public JRViewerBean() {
        super((JasperPrint) null);
    }

    public void setToolbarVisible(boolean visible) {
        tlbToolBar.setVisible(visible);
    }

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

    public JButton getSaveButton() {
        return btnSave;
    }

    public JButton getPrintButton() {
        return btnPrint;
    }

    public JButton getReloadButton() {
        return btnReload;
    }

    public JButton getFirstButton() {
        return btnFirst;
    }

    public JButton getPreviousButton() {
        return btnPrevious;
    }

    public JButton getNextButton() {
        return btnNext;
    }

    public JButton getLastButton() {
        return btnLast;
    }

    public JTextField getGoToTextField() {
        return txtGoTo;
    }

    public JToggleButton getActualSizeButton() {
        return btnActualSize;
    }

    public JToggleButton getFitWidthButton() {
        return btnFitWidth;
    }

    public JToggleButton getFitPageButton() {
        return btnFitPage;
    }

    public JButton getZoomInButton() {
        return btnZoomIn;
    }

    public JButton getZoomOutButton() {
        return btnZoomOut;
    }

    public JComboBox getZoomRatioComboBox() {
        return cmbZoom;
    }

    public void setJasperPrint(JasperPrint print) {        
        loadReport(print);
        refreshPage();
        //This applies the fitpage zoom level
//        if (c_first){
//            SwingUtilities.invokeLater(new Runnable(){
//                //by default full page zoom ratio
//                @Override
//                public void run() {
//                    setFitPageZoomRatio();                                        
//                    c_first = true;
//                }
//                
//            });
//            
//            
//        }
    }
    
    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;
    }

    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.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"
//        };

        ResourceBundle resourceBundle = ResourceBundle.getBundle("net/sf/jasperreports/view/viewer", getLocale());
        addSaveContributor(new JRPdfSaveContributor(getLocale(), resourceBundle));
        
    }


    
    
    
    
}
