/*
* Copyright (c) 2013, 2014 Chris Newland.
* Licensed under https://github.com/AdoptOpenJDK/jitwatch/blob/master/LICENSE-BSD
* Instructions: https://github.com/AdoptOpenJDK/jitwatch/wiki
*/
package org.adoptopenjdk.jitwatch.ui;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.*;
public final class Dialogs
{
/*
* Hide Utility Class Constructor Utility classes should not have a public
* or default constructor.
*/
private Dialogs()
{
}
public enum Response
{
NO, YES
};
private static Response response = Response.NO;
private static String textInput;
public static String getTextInput()
{
return textInput;
}
static class Dialog extends Stage
{
public Dialog(String title, Stage owner, Scene scene)
{
setTitle(title);
initStyle(StageStyle.UTILITY);
initModality(Modality.APPLICATION_MODAL);
initOwner(owner);
setResizable(false);
setScene(scene);
}
public void showDialog()
{
sizeToScene();
centerOnScreen();
showAndWait();
}
}
public static Response showYesNoDialog(Stage owner, String title, String message)
{
VBox vBox = new VBox();
vBox.setAlignment(Pos.CENTER);
vBox.setSpacing(10);
vBox.setPadding(new Insets(10));
int width = Math.max(320, message == null ? 0 : message.length() * 10);
Scene scene = new Scene(vBox, width, 80);
final Dialog dialog = new Dialog(title, owner, scene);
Button btnYes = new Button("Yes");
btnYes.setOnAction(new EventHandler<ActionEvent>()
{
@Override
public void handle(ActionEvent e)
{
dialog.close();
response = Response.YES;
}
});
Button btnNo = new Button("No");
btnNo.setOnAction(new EventHandler<ActionEvent>()
{
@Override
public void handle(ActionEvent e)
{
dialog.close();
response = Response.NO;
}
});
BorderPane bp = new BorderPane();
HBox hBox = new HBox();
hBox.setAlignment(Pos.CENTER);
hBox.setSpacing(10);
hBox.setPadding(new Insets(10));
hBox.getChildren().addAll(btnYes, btnNo);
bp.setCenter(hBox);
vBox.getChildren().addAll(new Label(message), bp);
dialog.showDialog();
return response;
}
public static Response showTextInputDialog(Stage owner, String title, String message)
{
VBox vBox = new VBox();
vBox.setAlignment(Pos.CENTER);
vBox.setSpacing(10);
vBox.setPadding(new Insets(10));
Scene scene = new Scene(vBox, 320, 100);
final Dialog dialog = new Dialog(title, owner, scene);
final TextField textInput = new TextField();
textInput.setOnKeyPressed(new EventHandler<KeyEvent>()
{
@Override
public void handle(javafx.scene.input.KeyEvent event)
{
if (KeyCode.ENTER.equals(event.getCode()))
{
Dialogs.textInput = textInput.getText();
dialog.close();
response = Response.YES;
}
}
});
Button btnOK = new Button("OK");
btnOK.setOnAction(new EventHandler<ActionEvent>()
{
@Override
public void handle(ActionEvent e)
{
Dialogs.textInput = textInput.getText();
dialog.close();
response = Response.YES;
}
});
Button btnCancel = new Button("Cancel");
btnCancel.setOnAction(new EventHandler<ActionEvent>()
{
@Override
public void handle(ActionEvent e)
{
dialog.close();
response = Response.NO;
}
});
HBox hBox = new HBox();
hBox.setAlignment(Pos.CENTER);
hBox.setSpacing(10);
hBox.setPadding(new Insets(10));
hBox.getChildren().addAll(btnOK, btnCancel);
if (message != null && message.length() > 0)
{
vBox.getChildren().add(new Label(message));
}
vBox.getChildren().add(textInput);
vBox.getChildren().add(hBox);
dialog.showDialog();
textInput.requestFocus();
return response;
}
public static void showOKDialog(Stage owner, String title, String message)
{
VBox vBox = new VBox();
vBox.setSpacing(10);
vBox.setAlignment(Pos.CENTER);
vBox.setPadding(new Insets(10));
String[] lines = message.split(S_NEWLINE);
for (String line : lines)
{
Label label = new Label(line);
vBox.getChildren().add(label);
}
int width = 640;
if (lines.length == 1)
{
width = Math.max(320, message == null ? 0 : message.length() * 10);
}
Scene scene = new Scene(vBox, width, 60 + 20 * lines.length);
final Dialog dialog = new Dialog(title, owner, scene);
Button btnOK = new Button("OK");
btnOK.setOnAction(new EventHandler<ActionEvent>()
{
@Override
public void handle(ActionEvent e)
{
dialog.close();
}
});
vBox.getChildren().add(btnOK);
dialog.showDialog();
}
}