package net.krazyweb.starmodmanager.dialogue; import java.io.File; import java.nio.file.Paths; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.HPos; import javafx.geometry.Pos; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.GridPane; import javafx.scene.paint.Color; import javafx.stage.DirectoryChooser; import javafx.stage.Stage; import net.krazyweb.helpers.CSSHelper; import net.krazyweb.helpers.FXHelper; import net.krazyweb.starmodmanager.data.LocalizerModelFactory; import net.krazyweb.starmodmanager.data.LocalizerModelInterface; import net.krazyweb.starmodmanager.view.SettingsView; public class InputDialogue extends MessageDialogue { //TODO //An application close request MUST close all other dialogues //Otherwise the program doesn't actually close private Label pathTitle; private TextField pathField; private Button pathButton; public InputDialogue(final String message, final String title, final MessageType messageType, final LocalizerModelInterface localizer) { super(message, title, messageType, localizer); } public InputDialogue(final String message, final String title, final MessageType messageType, final LocalizerModelFactory localizerFactory) { super(message, title, messageType, localizerFactory); } protected void build(final String message, final String title, final MessageType messageType) { super.build(message, title, messageType); root.getChildren().remove(messageText); pathTitle = new Label(); pathTitle.setText(message); pathTitle.setId("settings-view-text-large"); pathTitle.setTranslateX(10); pathTitle.setAlignment(Pos.TOP_LEFT); pathTitle.setPrefHeight(25); pathField = new TextField(); pathField.setPrefHeight(37); pathField.prefWidthProperty().set(450); pathButton = new Button(); pathButton.setId("settings-path-button"); pathButton.setPrefHeight(37); pathButton.setPrefWidth(36); pathButton.setGraphic(new ImageView(new Image(SettingsView.class.getClassLoader().getResourceAsStream("folder-icon.png")))); pathButton.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(final ActionEvent event) { DirectoryChooser chooser = new DirectoryChooser(); chooser.setInitialDirectory(new File("").getParentFile()); File output = chooser.showDialog(new Stage()); if (output != null) { pathField.setText(Paths.get(output.getAbsolutePath()).toAbsolutePath().toString()); } } }); icon = new ImageView(new Image(MessageDialogueConfirm.class.getClassLoader().getResourceAsStream("large-folder-icon.png"))); Color color = CSSHelper.getColor("file-browser-icon-color", settings.getPropertyString("theme")); FXHelper.setColor(pathButton.getGraphic(), color); GridPane pathContainer = new GridPane(); pathContainer.add(pathTitle, 1, 1); pathContainer.add(pathField, 1, 2); pathContainer.add(pathButton, 2, 2); confirmButton.setText(localizer.getMessage("inputdialogue.select")); confirmButton.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { actionPerformed = DialogueAction.OK; stage.close(); } }); root.getChildren().remove(confirmButton); GridPane.setColumnSpan(confirmButton, 2); GridPane.setHalignment(confirmButton, HPos.CENTER); root.setVgap(25); root.add(confirmButton, 1, 2); root.add(pathContainer, 2, 1); } public String getInputData() { return pathField.getText(); } }