// 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.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; 
//            JCAWTScreenPrinter, JCPrintPage, JCAWTPrinter

/**
 *
 * @author maxerdwien
 */
public class WEPSPrintPreviewer extends JDialog implements WindowListener, ActionListener {

    private static final long serialVersionUID = 1L;

    private static final Logger LOGGER = LogManager.getLogger(WEPSPrintPreviewer.class);

    /**
     *
     * @param s
     * @param jframe
     * @param jcdocument
     */
    public WEPSPrintPreviewer(String s, JFrame jframe, JCDocument jcdocument) {
        this(s, jframe, jcdocument, ((JCPrinter) (new JCAWTScreenPrinter())));
    }

    /**
     *
     * @param s
     * @param jframe
     * @param jcdocument
     * @param jcprinter
     */
    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();
    }

    /**
     *
     * @param dimension
     */
    public void createPage(Dimension dimension) {
        pane.setViewportView(printPage);
        printPage.setPreferredSize(dimension);
        printPage.setSize(dimension);
        printPage.setDocument(document);
        showPage(0);
    }

    /**
     *
     * @param i
     */
    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();
    }

    /**
     *
     */
    @Override
    public void dispose() {
        document = null;
        printer = null;
        printPage.dispose();
        printPage = null;
        pane.setViewportView(null);
        super.dispose();
    }

    /**
     *
     * @return
     */
    protected int getNumPages() {
        return document.getPages().size();
    }

    /**
     *
     * @param actionevent
     */
    @Override
    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();
                        document.print();
                    } else {
                        document.print();
                        try {
                            document.getPrinter().getOutputStream().close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }

                    }
                }
            } else if (jbutton.equals(closeButton)) {
                close();
            }
        }
    }

    /**
     *
     * @return
     */
    public int getPageWidth() {
        return (int) document.getFlow().getCurrentPage().getPageSize().getWidth();
    }

    /**
     *
     * @return
     */
    public int getPageHeight() {
        return (int) document.getFlow().getCurrentPage().getPageSize().getHeight();
    }

    /**
     *
     * @return
     */
    public JCPrinter getPrinter() {
        return printer;
    }

    /**
     *
     * @param windowevent
     */
    @Override
    public void windowActivated(WindowEvent windowevent) {
    }

    /**
     *
     * @param windowevent
     */
    @Override
    public void windowClosed(WindowEvent windowevent) {
    }

    /**
     *
     * @param windowevent
     */
    @Override
    public void windowClosing(WindowEvent windowevent) {
        close();
    }

    /**
     *
     * @param windowevent
     */
    @Override
    public void windowDeactivated(WindowEvent windowevent) {
    }

    /**
     *
     * @param windowevent
     */
    @Override
    public void windowDeiconified(WindowEvent windowevent) {
    }

    /**
     *
     * @param windowevent
     */
    @Override
    public void windowIconified(WindowEvent windowevent) {
    }

    /**
     *
     * @param windowevent
     */
    @Override
    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;
}
