/*
* Copyright (c) 2013-2017 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.sandbox;
import java.io.File;
import org.adoptopenjdk.jitwatch.core.JITWatchConfig;
import org.adoptopenjdk.jitwatch.ui.stage.IStageClosedListener;
import org.adoptopenjdk.jitwatch.util.UserInterfaceUtil;
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.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.DirectoryChooser;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
public class VMLanguageConfigStage extends Stage
{
private File lastFolder = null;
private TextField tfLanguagePath;
private IStageClosedListener parent;
private JITWatchConfig config;
public VMLanguageConfigStage(final IStageClosedListener parent, final JITWatchConfig config, final String language)
{
this.parent = parent;
this.config = config;
initStyle(StageStyle.UTILITY);
VBox vbox = new VBox();
vbox.setPadding(new Insets(15));
vbox.setSpacing(10);
vbox.getChildren().add(getVBoxLanguagePath(language));
if (language != null)
{
tfLanguagePath.setText(config.getVMLanguagePath(language));
}
vbox.getChildren().add(getHBoxButtons(language));
setTitle("VM Language Configuration");
Scene scene = UserInterfaceUtil.getScene(vbox, 480, 120);
setScene(scene);
}
private VBox getVBoxLanguagePath(final String language)
{
VBox vbox = new VBox();
tfLanguagePath = new TextField();
Button btnChoosePath = new Button("Choose");
btnChoosePath.setOnAction(new EventHandler<ActionEvent>()
{
@Override
public void handle(ActionEvent e)
{
File languagePath = chooseFile(language + " Home Directory");
if (languagePath != null)
{
tfLanguagePath.setText(languagePath.getAbsolutePath());
}
}
});
HBox hboxCompiler = new HBox();
hboxCompiler.setSpacing(10);
hboxCompiler.getChildren().add(tfLanguagePath);
hboxCompiler.getChildren().add(btnChoosePath);
tfLanguagePath.prefWidthProperty().bind(hboxCompiler.widthProperty().multiply(0.8));
btnChoosePath.prefWidthProperty().bind(hboxCompiler.widthProperty().multiply(0.2));
vbox.getChildren().add(new Label(language + " Home Directory"));
vbox.getChildren().add(hboxCompiler);
return vbox;
}
private HBox getHBoxButtons(String language)
{
HBox hbox = new HBox();
hbox.setSpacing(20);
hbox.setAlignment(Pos.CENTER);
Button btnSave = new Button("Save");
Button btnCancel = new Button("Cancel");
btnSave.setOnAction(getEventHandlerForSaveButton(language, parent, config));
btnCancel.setOnAction(getEventHandlerForCancelButton(parent));
hbox.getChildren().add(btnCancel);
hbox.getChildren().add(btnSave);
return hbox;
}
private File chooseFile(String name)
{
DirectoryChooser dc = new DirectoryChooser();
dc.setTitle("Choose " + name + " folder");
File dirFile = null;
if (lastFolder == null)
{
dirFile = new File(System.getProperty("user.dir"));
}
else
{
dirFile = lastFolder;
}
dc.setInitialDirectory(dirFile);
File result = dc.showDialog(null);
if (result != null)
{
lastFolder = result;
}
return result;
}
private EventHandler<ActionEvent> getEventHandlerForCancelButton(final IStageClosedListener parent)
{
return new EventHandler<ActionEvent>()
{
@Override
public void handle(ActionEvent e)
{
parent.handleStageClosed(VMLanguageConfigStage.this);
close();
}
};
}
private EventHandler<ActionEvent> getEventHandlerForSaveButton(final String language, final IStageClosedListener parent, final JITWatchConfig config)
{
return new EventHandler<ActionEvent>()
{
@Override
public void handle(ActionEvent e)
{
String languagePath = tfLanguagePath.getText();
if (languagePath != null && languagePath.length() > 0)
{
config.addOrUpdateVMLanguage(language, languagePath);
config.saveConfig();
}
parent.handleStageClosed(VMLanguageConfigStage.this);
close();
}
};
}
}