// Decompiled by DJ v3.9.9.91 Copyright 2005 Atanas Neshkov  Date: 1/25/2006 12:18:37 PM
// Home Page : http://members.fortunecity.com/neshkov/dj.html  - Check often for new version!
// Decompiler options: packimports(3)

package usda.weru.util;

import com.klg.jclass.page.JCDocument;
import com.klg.jclass.page.JCPrinter;
import com.klg.jclass.page.awt.JCAWTPrinter;
import com.klg.jclass.page.awt.JCAWTScreenPrinter;
import com.klg.jclass.page.awt.JCPrintPage;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.print.PrinterException;

import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

// Referenced classes of package com.klg.jclass.page.awt:
import org.apache.log4j.Logger;
//            JCAWTScreenPrinter, JCPrintPage, JCAWTPrinter

public class WEPSPrintPreviewer extends JDialog implements WindowListener, ActionListener {
    
    private static final Logger LOGGER = Logger.getLogger(WEPSPrintPreviewer.class);
    
    public WEPSPrintPreviewer(String s, JFrame jframe, JCDocument jcdocument) {
        this(s, jframe, jcdocument, ((JCPrinter) (new JCAWTScreenPrinter())));
    }
    
    public WEPSPrintPreviewer(String s, JFrame jframe, JCDocument jcdocument, JCPrinter jcprinter) {
        super(jframe, s);
        status = new JLabel("", 2);
        JPanel jpanel = new JPanel();
        jpanel.setLayout(new FlowLayout(0, 1, 1));
        currentPage = 0;
        if(!(jcprinter instanceof JCAWTScreenPrinter))
            throw new RuntimeException("Printer must be instance of JCAWTScreenPrinter");
        printer = (JCAWTScreenPrinter)jcprinter;
        document = jcdocument;
        printPage = (JCPrintPage)printer.getComponent();
        int i = getPageHeight() + 81;
        int j = getPageWidth() + 12;
        Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
        if(i > dimension.height)
            i = dimension.height;
        if(j > dimension.width)
            j = dimension.width;
        setSize(j, i);
        setModal(true);
        getContentPane().setLayout(new BorderLayout());
        setBackground(Color.lightGray);
        Dimension dimension1 = new Dimension(getPageWidth(), getPageHeight());
        pane = new JScrollPane();
        //pane.setSize(dimension1);
        createPage(dimension1);
        pane.getViewport().setBackground(Color.lightGray);
        jpanel.add(firstButton = new JButton("First"));
        firstButton.addActionListener(this);
        jpanel.add(prevButton = new JButton("Previous"));
        prevButton.addActionListener(this);
        jpanel.add(nextButton = new JButton("Next"));
        nextButton.addActionListener(this);
        jpanel.add(lastButton = new JButton("Last"));
        lastButton.addActionListener(this);
        jpanel.add(printButton = new JButton("Print"));
        printButton.addActionListener(this);
        jpanel.add(closeButton = new JButton("Close"));
        closeButton.addActionListener(this);
        getContentPane().add(jpanel, "North");
        getContentPane().add(pane, "Center");
        getContentPane().add(status, "South");
        addWindowListener(this);
        toBack();
        toFront();
    }
    
    public void createPage(Dimension dimension) {
        pane.setViewportView(printPage);
        printPage.setPreferredSize(dimension);
        printPage.setSize(dimension);
        printPage.setDocument(document);
        showPage(0);
    }
    
    public void showPage(int i) {
        if(i < getNumPages() && i > -1) {
            currentPage = i;
            printPage.setPage(i);
            status.setText((currentPage + 1) + " of " + getNumPages() + ".");
        } else {
            throw new RuntimeException("Page index out of range " + i);
        }
    }
    
    void close() {
        setVisible(false);
        dispose();
    }
    
    public void dispose() {
        document = null;
        printer = null;
        printPage.dispose();
        printPage = null;
        pane.setViewportView(null);
        super.dispose();
    }
    
    protected int getNumPages() {
        return document.getPages().size();
    }
    
    public void actionPerformed(ActionEvent actionevent) {
        if(actionevent.getSource() instanceof JButton) {
            JButton jbutton = (JButton)actionevent.getSource();
            if(jbutton.equals(firstButton))
                showPage(0);
            else
                if(jbutton.equals(prevButton)) {
                if(currentPage > 0)
                    showPage(currentPage - 1);
                } else
                    if(jbutton.equals(nextButton)) {
                if(currentPage < getNumPages() - 1)
                    showPage(currentPage + 1);
                    } else
                        if(jbutton.equals(lastButton))
                            showPage(getNumPages() - 1);
                        else
                            if(jbutton.equals(printButton)) {
                if(document != null)
                    if(document.getPrinter() instanceof JCAWTScreenPrinter) {                    
                    JCAWTPrinter jcawtprinter;
                    try {
                        jcawtprinter = new JCAWTPrinter(document.getTemplates());
                    } catch(PrinterException printerexception) {
                        LOGGER.error("Unexpected printer error", printerexception);
                        return;
                    } catch(JCAWTPrinter.PrinterJobCancelledException printerjobcancelledexception) {
                        LOGGER.error("Unexpected printer error", printerjobcancelledexception);
                        return;
                    }
                    jcawtprinter.getGraphics();
                    jcawtprinter.print(document);
                    } else {                        
                        document.print();
                        try {
                            document.getPrinter().getOutputStream().close();
                        } catch(IOException e) {
                            e.printStackTrace();
                        }
                        
                    }
                            } else
                                if(jbutton.equals(closeButton))
                                    close();
        }
    }
    
    public int getPageWidth() {
        return (int)document.getFlow().getCurrentPage().getPageSize().getWidth();
    }
    
    public int getPageHeight() {
        return (int)document.getFlow().getCurrentPage().getPageSize().getHeight();
    }
    
    public JCPrinter getPrinter() {
        return printer;
    }
    
    public void windowActivated(WindowEvent windowevent) {
    }
    
    public void windowClosed(WindowEvent windowevent) {
    }
    
    public void windowClosing(WindowEvent windowevent) {
        close();
    }
    
    public void windowDeactivated(WindowEvent windowevent) {
    }
    
    public void windowDeiconified(WindowEvent windowevent) {
    }
    
    public void windowIconified(WindowEvent windowevent) {
    }
    
    public void windowOpened(WindowEvent windowevent) {
    }
    
    protected JButton firstButton;
    protected JButton prevButton;
    protected JButton nextButton;
    protected JButton lastButton;
    protected JButton printButton;
    protected JButton closeButton;
    protected JScrollPane pane;
    protected JLabel status;
    int currentPage;
    protected JCAWTScreenPrinter printer;
    protected JCDocument document;
    protected JCPrintPage printPage;
}