blob: cb5b488369c6f38ee19257b81424031e465c5f68 [file] [log] [blame]
jgodinez5d7c0922010-01-15 09:06:57 -08001/*
lanaf3d11f62013-12-26 12:04:16 -08002 * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
jgodinez5d7c0922010-01-15 09:06:57 -08003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
serb9adafbe2013-11-12 20:24:25 +04007 * published by the Free Software Foundation.
jgodinez5d7c0922010-01-15 09:06:57 -08008 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
ohair2283b9d2010-05-25 15:58:33 -070019 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
jgodinez5d7c0922010-01-15 09:06:57 -080022 */
23
24/**
25 * @test
jgodinezcf160c62013-07-26 15:25:12 -070026 * @bug 4485755 6361370 6448717 5080051 6939417 8016343
jgodinez5d7c0922010-01-15 09:06:57 -080027 * @summary dialog doesn't have way to specify margins
28 * for 6361370, verify exception for offline printer in Windows
29 * for 6448717, faster display of print dialog
30 * for 6500903, verify status of printer if accepting jobs or not
jgodinezcf160c62013-07-26 15:25:12 -070031 * for 8016343, verify printing to non-default printer
jgodinez5d7c0922010-01-15 09:06:57 -080032 * @author prr
33 * @run main/manual DialogMargins
34 */
35
36import java.awt.*;
37import java.awt.event.*;
38import java.awt.print.*;
39import javax.print.*;
40import javax.print.attribute.*;
41import javax.print.attribute.standard.*;
42
43public class DialogMargins extends Frame {
44
45 public DialogMargins() {
46 super("Dialog Margins Test");
47
48 Button printButton = new Button ("Print ...");
49 add("Center", printButton);
50 printButton.addActionListener(new ActionListener() {
51 public void actionPerformed (ActionEvent e) {
52 new MarginsPrinter();
53 }
54 });
55
56 addWindowListener (new WindowAdapter() {
57 public void windowClosing (WindowEvent e) {
58 dispose();
59 }
60
61 });
62
63 pack();
64 setVisible (true);
65 }
66
67class MarginsPrinter implements Printable {
68
69 PrinterJob myPrinterJob;
70 PageFormat myPageFormat;
71
72 public MarginsPrinter() {
73 PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
74 //aset.add(MediaSizeName.ISO_A4);
75 //aset.add(new MediaPrintableArea(0f,0f,210f,297f,MediaPrintableArea.MM));
76 myPrinterJob = PrinterJob.getPrinterJob();
77 myPageFormat = myPrinterJob.pageDialog(aset);
78 myPrinterJob.setPrintable(this, myPageFormat);
79 //myPrinterJob.setPrintable(this);
80 if (myPrinterJob.printDialog(aset)) {
81 try {
82 //PrintRequestAttributeSet newaset =
83 //new HashPrintRequestAttributeSet();
84 myPrinterJob.print(aset);
85
86 } catch (PrinterException pe ) {
87 System.out.println("DialogMargins Exception caught:" + pe);
88 }
89 }
90 }
91
92 public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) {
93
94 if (pageIndex > 0) {
95 return Printable.NO_SUCH_PAGE;
96 }
97
98 Graphics2D g2d = (Graphics2D)graphics;
99 g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
100 g2d.drawString("ORIGIN("+pageFormat.getImageableX()+","+
101 pageFormat.getImageableY()+")", 20, 20);
102 g2d.drawString("X THIS WAY", 200, 50);
103 g2d.drawString("Y THIS WAY", 60 , 200);
104 g2d.drawString("Graphics is " + g2d.getClass().getName(), 100, 100);
105 g2d.drawRect(0,0,(int)pageFormat.getImageableWidth(),
106 (int)pageFormat.getImageableHeight());
107 g2d.setColor(Color.black);
108 g2d.drawRect(1,1,(int)pageFormat.getImageableWidth()-2,
109 (int)pageFormat.getImageableHeight()-2);
110
111 return Printable.PAGE_EXISTS;
112 }
113
114}
115 public static void main( String[] args) {
116
117 String[] instructions =
118 {
119 "You must have a printer available to perform this test",
120 "Specify various pageformats and compare the printed results with the",
121 "request."
122 };
123 Sysout.createDialog( );
124 Sysout.printInstructions( instructions );
125
126 new DialogMargins();
127 }
128}
129
130
131class Sysout {
132 private static TestDialog dialog;
133
134 public static void createDialogWithInstructions( String[] instructions )
135 {
136 dialog = new TestDialog( new Frame(), "Instructions" );
137 dialog.printInstructions( instructions );
138 dialog.show();
139 println( "Any messages for the tester will display here." );
140 }
141
142 public static void createDialog( )
143 {
144 dialog = new TestDialog( new Frame(), "Instructions" );
145 String[] defInstr = { "Instructions will appear here. ", "" } ;
146 dialog.printInstructions( defInstr );
147 dialog.show();
148 println( "Any messages for the tester will display here." );
149 }
150
151
152 public static void printInstructions( String[] instructions )
153 {
154 dialog.printInstructions( instructions );
155 }
156
157
158 public static void println( String messageIn )
159 {
160 dialog.displayMessage( messageIn );
161 }
162
163}// Sysout class
164
165/**
166 This is part of the standard test machinery. It provides a place for the
167 test instructions to be displayed, and a place for interactive messages
168 to the user to be displayed.
169 To have the test instructions displayed, see Sysout.
170 To have a message to the user be displayed, see Sysout.
171 Do not call anything in this dialog directly.
172 */
173class TestDialog extends Dialog {
174
175 TextArea instructionsText;
176 TextArea messageText;
177 int maxStringLength = 80;
178
179 //DO NOT call this directly, go through Sysout
180 public TestDialog( Frame frame, String name )
181 {
182 super( frame, name );
183 int scrollBoth = TextArea.SCROLLBARS_BOTH;
184 instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
185 add( "North", instructionsText );
186
187 messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
188 add("Center", messageText);
189
190 pack();
191
192 show();
193 }// TestDialog()
194
195 //DO NOT call this directly, go through Sysout
196 public void printInstructions( String[] instructions )
197 {
198 //Clear out any current instructions
199 instructionsText.setText( "" );
200
201 //Go down array of instruction strings
202
203 String printStr, remainingStr;
204 for( int i=0; i < instructions.length; i++ )
205 {
206 //chop up each into pieces maxSringLength long
207 remainingStr = instructions[ i ];
208 while( remainingStr.length() > 0 )
209 {
210 //if longer than max then chop off first max chars to print
211 if( remainingStr.length() >= maxStringLength )
212 {
213 //Try to chop on a word boundary
214 int posOfSpace = remainingStr.
215 lastIndexOf( ' ', maxStringLength - 1 );
216
217 if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
218
219 printStr = remainingStr.substring( 0, posOfSpace + 1 );
220 remainingStr = remainingStr.substring( posOfSpace + 1 );
221 }
222 //else just print
223 else
224 {
225 printStr = remainingStr;
226 remainingStr = "";
227 }
228
229 instructionsText.append( printStr + "\n" );
230
231 }// while
232
233 }// for
234
235 }//printInstructions()
236
237 //DO NOT call this directly, go through Sysout
238 public void displayMessage( String messageIn )
239 {
240 messageText.append( messageIn + "\n" );
241 }
242
243 }// TestDialog class