diff options
author | sowgro <tpoke.ferrari@gmail.com> | 2024-08-30 12:23:26 -0400 |
---|---|---|
committer | sowgro <tpoke.ferrari@gmail.com> | 2024-08-30 12:23:26 -0400 |
commit | 69f69143f5604626ded3c26ee754b94eaf3c4f15 (patch) | |
tree | a64a1ce20ff21cd6d73b1d36c3e3f9ca930c9b4d /src/main/java/net/sowgro/npehero/main/ErrorDisplay.java | |
parent | aa916b0f06be0d42bec1e035d0efeec954e09243 (diff) | |
download | NPEhero-69f69143f5604626ded3c26ee754b94eaf3c4f15.tar.gz NPEhero-69f69143f5604626ded3c26ee754b94eaf3c4f15.tar.bz2 NPEhero-69f69143f5604626ded3c26ee754b94eaf3c4f15.zip |
Clean up error handling pt.1
Diffstat (limited to 'src/main/java/net/sowgro/npehero/main/ErrorDisplay.java')
-rw-r--r-- | src/main/java/net/sowgro/npehero/main/ErrorDisplay.java | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/src/main/java/net/sowgro/npehero/main/ErrorDisplay.java b/src/main/java/net/sowgro/npehero/main/ErrorDisplay.java new file mode 100644 index 0000000..cd43937 --- /dev/null +++ b/src/main/java/net/sowgro/npehero/main/ErrorDisplay.java @@ -0,0 +1,147 @@ +package net.sowgro.npehero.main; + +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.layout.HBox; +import javafx.scene.layout.Pane; +import javafx.scene.layout.VBox; +import net.sowgro.npehero.Driver; + +import java.io.PrintWriter; +import java.io.StringWriter; + +public class ErrorDisplay extends Page { + + private HBox content = new HBox(); + + /** + * Error display with a message and Back button + * @param message The message to display + * @param prev The destination of the close button + */ + public ErrorDisplay(String message, Page prev) { + Label main = new Label(message); + main.getStyleClass().add("box"); + main.setPadding(new Insets(10)); + main.setWrapText(true); + + Button exit = new Button(); + exit.setText("Ok"); + exit.setOnAction(e -> { + Sound.playSfx(Sound.BACKWARD); + Driver.setMenu(prev); + }); + + VBox centerBox = new VBox(); + centerBox.getChildren().addAll(main, exit); + centerBox.setSpacing(10); + centerBox.setAlignment(Pos.CENTER); + + content.getChildren().add(centerBox); + content.setAlignment(Pos.CENTER); + } + + /** + * Error display with a message, exception and Back button + * @param message The message to display + * @param e The exception that occurred + * @param prev The destination of the close button + */ + public ErrorDisplay(String message, Exception e, Page prev) { + Label title = new Label(message); + title.setPadding(new Insets(10)); + title.setWrapText(true); + + Label exView = new Label(e.toString()); + exView.getStyleClass().add("red"); + + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + e.printStackTrace(pw); + String sStackTrace = sw.toString(); // stack trace as a string + + Label stackTrace = new Label(sStackTrace); + stackTrace.getStyleClass().add("red"); + stackTrace.setVisible(false); + stackTrace.setManaged(false); + + Button exit = new Button(); + exit.setText("Ok"); + exit.setOnAction(_ -> { + Sound.playSfx(Sound.BACKWARD); + Driver.setMenu(prev); + }); + + Button printStack = new Button("Print to console"); + printStack.setOnAction(_ -> { + Sound.playSfx(Sound.FORWARD); + e.printStackTrace(); + }); + + Button showStack = new Button("Show Stack Trace"); + showStack.setOnAction(_ -> { + stackTrace.setVisible(true); + stackTrace.setManaged(true); + }); + + HBox buttonBox = new HBox(exit, showStack); + buttonBox.setSpacing(10); + + VBox main = new VBox(title, exView); + main.getStyleClass().add("box"); + + VBox centerBox = new VBox(); + centerBox.getChildren().addAll(main, buttonBox, stackTrace); + centerBox.setSpacing(10); + centerBox.setAlignment(Pos.CENTER); + + content.getChildren().add(centerBox); + content.setAlignment(Pos.CENTER); + } + + /** + * Error display with a message and Cancel and Proceed buttons + * @param message The message to display + * @param prev The destination of the Cancel button + * @param next The destination of the Proceed button + */ + public ErrorDisplay(String message, Page prev, Page next) { + Label main = new Label(message); + main.getStyleClass().add("box"); + main.setPadding(new Insets(10)); + main.setWrapText(true); + + Button exit = new Button(); + exit.setText("Cancel"); + exit.setOnAction(_ -> { + Sound.playSfx(Sound.BACKWARD); + Driver.setMenu(prev); + }); + + Button nextButton = new Button(); + nextButton.setText("Proceed"); + nextButton.setOnAction(_ -> { + Sound.playSfx(Sound.FORWARD); + Driver.setMenu(next); + }); + + HBox bottom = new HBox(exit, nextButton); + bottom.setAlignment(Pos.CENTER); + bottom.setSpacing(10); + + VBox centerBox = new VBox(); + centerBox.getChildren().addAll(main, bottom); + centerBox.setSpacing(10); + centerBox.setAlignment(Pos.CENTER); + + content.getChildren().add(centerBox); + content.setAlignment(Pos.CENTER); + } + + @Override + public Pane getContent() { + return content; + } +} |