/*  J2TextPrinterHTMLForm Test Application
    (C) Copyright 2007
    Wildcrest Associates
    http://www.wildcrest.com
This source code may be freely used, modified, incorporated, and
distributed without restriction as part of any software that uses
J2PrinterWorks by Wildcrest Associates.
*/

import java.awt.*;
import java.applet.*;
import javax.swing.*;
import java.awt.print.*;
import javax.swing.tree.*;
import com.wildcrest.j2printerworks.*;

public class J2TextPrinterHTMLFormTest {
    static JTextPane pane;
    static JFrame frame;

	static public void main(String args[]) {

            pane = new JTextPane();
            pane.setContentType("text/html");
            pane.setText("<html>"
                         + "<H2>J2TextPrinter HTML form printing test"
                         + "<p>This window shows a Java JTextPane defined using HTML.  "
                         + "The HTML includes several fields of a typical form that a user "
                         + "might be expected to fill out.  In order for the values entered by the "
                         + "user to be included when the JTextPane is printed, "
                         + "J2TextPrinter provides a \"direct print\" option.  "
                         + "<p>Here is the form.  You can enter values in fields, "
                         + "then hit \"Print Preview\" to view and print the form.<br>"
                         + "<form><b>Name:</b><br><input type=\"text\" name=\"text1\" size=\"15\" value=\"Initial value\"><br><br>"
                         + "<b>Email address:</b><br><input type=\"text\" name=\"text2\" size=\"15\"><br><br>"
                         + "<b>Male:</b> <input type=\"radio\" name=\"radio1\" align=\"top\"> &nbsp;&nbsp;&nbsp;&nbsp;"
                         + "<b>Female:</b> <input type=\"radio\" name=\"radio1\">"
                         + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"
                         + "<b>Interests:</b> &nbsp;&nbsp;"
                         + "<font size=-1>Programming:</font><input type=\"checkbox\" name=\"checkbox1\">"
                         + "&nbsp;&nbsp;&nbsp;"
                         + "<font size=-1>Computers:</font><input type=\"checkbox\" name=\"checkbox2\"><br>"
                         + "<font size=-1>The default radio button & checkbox backgrounds are gray.  "
                         + "If you figure out how to change them, let me know.</font><br><br>"
                         + "<b>Comments:</b><br><textarea name=\"textarea1\" rows=\"4\" cols=\"35\"></textarea>"
                         + "<p>The J2TextPrinter direct print mode prints the JTextPane "
                         + "in WYSIWYG mode (i.e. the text is not reflowed) even if you call setWYSIWYG(false), "
                         + "and it does not clone the JTextPane "
                         + "even if you call setCloningUsed(true).  Direct print provides no thread safety, so "
                         + "if you have setSeparatePrintThread(true), you must leave the JTextPane alone "
                         + "from the time you call print() until printing completes."
                         + "<html>");

            int width = (int)(new J2Printer().getBodyWidth());
            pane.setPreferredSize(new Dimension(width,600));

            frame = new JFrame("Printing test");
            frame.getContentPane().setLayout(new BorderLayout());
            frame.getContentPane().add(new JScrollPane(pane),BorderLayout.CENTER);
            JButton button = new JButton("Print Preview");
            frame.getContentPane().add(button,BorderLayout.SOUTH);
            frame.setSize(width,700);
            frame.setVisible(true);

            button.addActionListener(new java.awt.event.ActionListener() {
               public void actionPerformed(java.awt.event.ActionEvent e) {
                  J2Printer printer = new J2Printer();
                  J2TextPrinter textPrinter = new J2TextPrinter();
                  textPrinter.setDirectPrint(true);
                  textPrinter.setPane(pane);
                  printer.setPageable(textPrinter);
                  textPrinter.setHorizontalAlignment(textPrinter.LEFT);
                  printer.setPrintPreviewScale(1.0);
                  printer.showPrintPreviewDialog(frame);
               }
            });

            frame.addWindowListener(new java.awt.event.WindowAdapter() {
                public void windowClosing(java.awt.event.WindowEvent e)
                    { System.exit(0); }  }  );

	}

   static void print(JTextPane pane) {
      PrinterJob pj = PrinterJob.getPrinterJob();
      PageFormat pf = pj.defaultPage();
      Content content = new Content(pane);
      pj.setPrintable(content, pf);
      try {
         if (pj.printDialog())
            pj.print();
      } catch (Exception e) {}
   }

}

class Content implements Printable {
    JTextPane pane;
    public Content(JTextPane pane)  { this.pane = pane; }
    public int print(Graphics g, PageFormat pf, int pageIndex) {
        if (pageIndex>0) return Printable.NO_SUCH_PAGE;
        Graphics2D g2d = (Graphics2D) g;
        g2d.translate(pf.getImageableX(), pf.getImageableY());
        try { pane.print(g2d); }
        catch (Exception e) { e.printStackTrace(); }
        return Printable.PAGE_EXISTS;
    }
}

