--- /dev/null 2016-11-01 09:38:44.965684815 -0700 +++ new/tests/manual/printing/PrintDialogModalityTest.java 2017-03-10 11:56:43.793425436 -0800 @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javafx.application.Application; +import javafx.event.ActionEvent; +import javafx.geometry.Pos; +import javafx.print.PrinterJob; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.layout.HBox; +import javafx.scene.layout.VBox; +import javafx.scene.paint.Color; +import javafx.stage.Stage; +import javafx.stage.Window; +import javafx.scene.text.Text; + +public class PrintDialogModalityTest extends Application { + + static final String infoText = + "NOTE: if there are no printers installed this test is not valid " + + "since depending on O/S no dialog may be displayed.\n" + + "This tests that a print dialog can be made modal w.r.t " + + "a parent window. Cycle through in any order the different " + + "dialog options via pressing the buttons. For the modal cases " + + "when the dialog is displayed, the original window should be " + + "unresponsive to input, for example preventing you launching " + + "another dialog, and also should stay below the dialog. " + + "Depending on platform the dialog may stay above just the "+ + "parent, or all application or even all desktop windows.\n" + + "Non-modal dialogs will generally allow you to click on the "+ + "main window and raise it above the dialog. However " + + "depending on platform, even the non-modal cases may behave " + + "as if they are modal. Notably this is the case on MacOS as " + + "that is the behaviour enforced by the O/S"; + + @Override + public void start(Stage primaryStage) { + + VBox vbox; + + Text info = new Text(infoText); + info.setWrappingWidth(450); + final PrinterJob job = PrinterJob.createPrinterJob(); + if (job != null) { + + Button b1 = new Button("Modal Print"); + Button b2 = new Button("Modal Page Setup"); + Button b3 = new Button("Non-modal Print"); + Button b4 = new Button("Non-modal Page Setup"); + + b1.setOnAction((ActionEvent event) -> { + Window w = b1.getScene().getWindow(); + job.showPrintDialog(w); + }); + b2.setOnAction((ActionEvent event) -> { + Window w = b2.getScene().getWindow(); + job.showPageSetupDialog(w); + }); + b3.setOnAction((ActionEvent event) -> { + job.showPrintDialog(null); + }); + b4.setOnAction((ActionEvent event) -> { + job.showPageSetupDialog(null); + }); + HBox hbox1 = new HBox(2, b1, b2); + HBox hbox2 = new HBox(2, b3, b4); + hbox1.setAlignment(Pos.CENTER); + hbox2.setAlignment(Pos.CENTER); + vbox = new VBox(3, info, hbox1, hbox2); + } else { + Text noprinters = new Text("No printers found!"); + noprinters.setFill(Color.RED); + vbox = new VBox(2, info, noprinters); + } + vbox.setAlignment(Pos.TOP_CENTER); + Scene scene = new Scene(vbox, 500, 400); + primaryStage.setScene(scene); + primaryStage.show(); + } + + public static void main(String[] args) { + launch(args); + } +}