diff --git a/src/main/java/edu/ntnu/stud/chaosgame/controller/utility/Formatter.java b/src/main/java/edu/ntnu/stud/chaosgame/controller/utility/Formatter.java new file mode 100644 index 0000000000000000000000000000000000000000..258e2032a925e61455fc3fff584fcb8b274b5f3a --- /dev/null +++ b/src/main/java/edu/ntnu/stud/chaosgame/controller/utility/Formatter.java @@ -0,0 +1,32 @@ +package edu.ntnu.stud.chaosgame.controller.utility; + +import java.util.function.UnaryOperator; +import javafx.scene.control.TextFormatter; +import javafx.scene.control.TextFormatter.Change; + +/** + * This class sets formatting constraints for certain UI components. + */ +public class Formatter { + + + /** + * A formatter for text fields that only allows for floating point numbers. + */ + public static UnaryOperator<Change> floatFormatter = change -> { + String newText = change.getControlNewText(); + if (newText.matches("([0-9]*[.])?[0-9]*")) { + return change; + } + return null; + }; + + /** + * Get the float formatter as a TextFormatter. + * + * @return the float formatter. + */ + public static TextFormatter<Change> getFloatFormatter() { + return new TextFormatter<>(floatFormatter); + } +} diff --git a/src/main/java/edu/ntnu/stud/chaosgame/view/ChaosGameGui.java b/src/main/java/edu/ntnu/stud/chaosgame/view/ChaosGameGui.java index a10f7de7d8b75e402673a633cf8126fbfa7edb96..325894f79b87898ac7b7ca79f8c4e80028c958da 100644 --- a/src/main/java/edu/ntnu/stud/chaosgame/view/ChaosGameGui.java +++ b/src/main/java/edu/ntnu/stud/chaosgame/view/ChaosGameGui.java @@ -282,44 +282,56 @@ public class ChaosGameGui implements ChaosGameObserver { this.sideMenu = new VBox(); // Parameters VBox parameterBox = new VBox(); + // Step Count GUI VBox stepCountBox = new VBox(); Label stepCountLabel = new Label("Step Count"); - TextArea stepCountTextArea = new TextArea(); - stepCountTextArea.setPrefHeight(5); - stepCountTextArea.setPrefWidth(50); + TextField stepCountTextField = new TextField(); + stepCountTextField.setPrefHeight(5); + stepCountTextField.setPrefWidth(50); Button changeStepCountButton = new Button("Change Step Count"); - stepCountBox.getChildren().addAll(stepCountLabel,stepCountTextArea, changeStepCountButton); + stepCountBox.getChildren().addAll(stepCountLabel,stepCountTextField, changeStepCountButton); + // Minimum Coordinates GUI VBox minCoordinatesBox = new VBox(); Label minCoordinatesLabel = new Label("Min. Coordinates"); - TextArea minimumCoordinatesTextArea = new TextArea(); - minimumCoordinatesTextArea.setPrefHeight(5); - minimumCoordinatesTextArea.setPrefWidth(50); + TextField minimumCoordinatesTextField = new TextField(); + minimumCoordinatesTextField.setPrefHeight(5); + minimumCoordinatesTextField.setPrefWidth(50); Button changeMinimumCoordinatesButton = new Button("Change Min. Coordinates"); - minCoordinatesBox.getChildren().addAll(minCoordinatesLabel,minimumCoordinatesTextArea,changeMinimumCoordinatesButton); + minCoordinatesBox.getChildren().addAll(minCoordinatesLabel, + minimumCoordinatesTextField,changeMinimumCoordinatesButton); + // Maximum Coordinates GUI VBox maxCoordinatesBox = new VBox(); Label maxCoordinatesLabel = new Label("Max Coordinates"); - TextArea maximumCoordinatesTextArea = new TextArea(); - maximumCoordinatesTextArea.setPrefHeight(5); - maximumCoordinatesTextArea.setPrefWidth(50); + TextField maximumCoordinatesTextField = new TextField(); + maximumCoordinatesTextField.setPrefHeight(5); + maximumCoordinatesTextField.setPrefWidth(50); Button changeMaximumCoordinatesButton = new Button("Change Max Coordinates"); - maxCoordinatesBox.getChildren().addAll(maxCoordinatesLabel,maximumCoordinatesTextArea,changeMaximumCoordinatesButton); + maxCoordinatesBox.getChildren().addAll(maxCoordinatesLabel, + maximumCoordinatesTextField,changeMaximumCoordinatesButton); + // Fill parameter box parameterBox.getChildren().addAll(stepCountBox, minCoordinatesBox, maxCoordinatesBox); parameterBox.setPadding(new Insets(10)); // Add basic control buttons sideMenu.getChildren().addAll(startButton,stopButton,newButton,clearButton); + // Add fractal radio buttons - sideMenu.getChildren().addAll(sierpinskiRadioButton, barnsleyRadioButton, juliaRadioButton, improvedBarnsleyButton); + sideMenu.getChildren().addAll(sierpinskiRadioButton, barnsleyRadioButton, juliaRadioButton, + improvedBarnsleyButton); + // Add parameter VBox sideMenu.getChildren().add(parameterBox); + // Add file buttons sideMenu.getChildren().addAll(loadFractalFromFileButton,writeFractalToFileButton); + // Add quit button sideMenu.getChildren().add(quitButton); + // Add padding sideMenu.setPadding(new Insets(10)); @@ -335,6 +347,7 @@ public class ChaosGameGui implements ChaosGameObserver { VBox rightVBox = new VBox(); rightVBox.getChildren().addAll(sideMenuButtonBox, sideMenu); + this.sideMenu.setStyle("-fx-background-color: lightgrey; -fx-background-radius: 3;"); this.borderPane = new BorderPane(); this.borderPane.setCenter(imageView); @@ -345,6 +358,10 @@ public class ChaosGameGui implements ChaosGameObserver { } + /** + * Initialise the side bar button handler, allowing the user + * to show or hide the right sidebar. + */ private void initializeSideButtonHandler() { TranslateTransition openNav = new TranslateTransition(new Duration(350), sideMenu); openNav.setToX(0);