import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;
import com.wildcrest.j2printerworks.*;
import java.awt.print.PrinterJob;
import java.io.*;

class J2Printer14CrossPlatformTest{
    static J2Printer14 printer;
    static JFrame frame;

    static public void main(String args[]){
        StringBuffer buffer = new StringBuffer();
        try {
           BufferedReader inData = new BufferedReader(new FileReader("J2PrinterWorksFreeTrialLicense.html"));
           String inLine;
           while ( (inLine = inData.readLine()) != null) { buffer.append(inLine); buffer.append('\n'); }
           inData.close();
        } catch (IOException e) {}
        String str = buffer.toString();
        JTextPane pane = new JTextPane();
        pane.setContentType("text/html");
        pane.setText(str);

        printer = new J2Printer14(); // need serial number arg to eliminate header
        printer.setSeparatePrintThread(false);

        //simpler test: pane.setText("<html>Here are two lines of <b>HTML text</b>"
        //                         + "<br>that <i>will</i> be printed</html>");
        J2TextPrinter textPrinter = new J2TextPrinter(pane);
        printer.setPageable(textPrinter);

        //printer.setPrinter("LaserWriter Select 360");     // use to select specific printer
        //printer.setPrinter("Acrobat Distiller");          // use to select specific printer
        //test: printer.setPrintPreviewCloseOnPrint(false);

        setPrinterAttributes();

        frame = new JFrame("J2Printer14 test");
        printer.setParentFrame(frame);
        frame.getContentPane().setLayout(new BorderLayout());
        frame.getContentPane().add(new JScrollPane(pane), "Center");

        JPanel buttonPanel = new JPanel();
        JButton settings = new JButton("Settings");
        JButton printpreview = new JButton("Print Preview");
        JButton pagesetup = new JButton("Page Setup");
        JButton print = new JButton("Print");
        buttonPanel.add(settings); buttonPanel.add(printpreview);
        buttonPanel.add(pagesetup); buttonPanel.add(print); print.grabFocus();
        frame.getContentPane().add(buttonPanel, "South");

        JCheckBox box = new JCheckBox("Use cross-platform dialogs",true);
        JPanel boxPanel = new JPanel();
        boxPanel.add(box);
        frame.getContentPane().add(boxPanel, "North");
        box.setFocusPainted(false);    // turn off "has focus" display

        frame.setBounds(25,25,650,450);
        frame.setVisible(true);

        box.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) { printer.setCrossPlatformDialogs(((JCheckBox)e.getSource()).isSelected()); }});
        settings.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) { new J2PrinterSettingsDialog(frame, printer).setVisible(true); }});
        printpreview.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) { printer.showPrintPreviewDialog(frame); }});
        pagesetup.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) { printer.showPageSetupDialog(); }});
        print.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
               printer.print();
               setPrinterAttributes(); // restore printer attributes after printing
            }});
        frame.addWindowListener(new WindowAdapter() {
           public void windowClosing(WindowEvent e) { System.exit(0); }});

        /* test
         printer.addPropertyChangeListener(new PrintingEventHandler() {
           public void pageSetupDialogOK() { System.out.println("Page setup dialog OK"); }
           public void pageSetupDialogCanceled() { System.out.println("Page setup dialog canceled"); }
        });
        */
    }

    static void setPrinterAttributes() {
       printer.setPrinterJob(null); // clear out PrinterJob attributes from previous print
       printer.setLeftMargin(0.5); printer.setRightMargin(0.5);
       printer.setTopMargin(0.5); printer.setBottomMargin(0.5);

       PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
       aset.add(new Copies(2));
       //other examples:
       //aset.add(MediaSizeName.ISO_A4);  // or MediaSizeName.NA_LETTER, MediaSizeName.NA_LEGAL, etc.
       //aset.add(new JobName("My print job name", null));
       //aset.add(OrientationRequested.LANDSCAPE);
       //aset.add(new PageRanges(1,printer.getPageable().getNumberOfPages())); // overcome Java bugs 4886087, 4885375
       //aset.add(PrintQuality.DRAFT);
       //aset.add(Chromaticity.MONOCHROME);
       printer.setPrintRequestAttributeSet(aset);

       // alternatively, use these to test the pre-JDK 1.4 APIs
       //printer.setNumberOfCopies(2);
       //printer.setPrintJobName("My print job name");
       //printer.setOrientation(printer.LANDSCAPE);
       //printer.setPaperSize(595.2755737304688, 841.8897705078125); // = A4
    }

}



