diff --git a/app/src/main/java/org/toop/app/App.java b/app/src/main/java/org/toop/app/App.java index f543a35..ab56b71 100644 --- a/app/src/main/java/org/toop/app/App.java +++ b/app/src/main/java/org/toop/app/App.java @@ -1,13 +1,15 @@ package org.toop.app; import javafx.application.Platform; -import javafx.scene.paint.Color; -import org.toop.Main; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; + import org.toop.app.widget.Primitive; import org.toop.app.widget.Widget; import org.toop.app.widget.WidgetContainer; import org.toop.app.widget.complex.LoadingWidget; import org.toop.app.widget.display.SongDisplay; +import org.toop.app.widget.popup.EscapePopup; import org.toop.app.widget.popup.QuitPopup; import org.toop.app.widget.view.MainView; import org.toop.framework.audio.*; @@ -37,7 +39,8 @@ public final class App extends Application { private static int height; private static int width; - private static boolean isQuitting; + private static boolean isEscActive; // TODO kut variable + private static EscapePopup escPopup; // TODO kut variable public static void run(String[] args) { launch(args); @@ -78,10 +81,10 @@ public final class App extends Application { App.width = (int)stage.getWidth(); App.height = (int)stage.getHeight(); - App.isQuitting = false; - AppSettings.applySettings(); + setKeybinds(root); + LoadingWidget loading = new LoadingWidget(Primitive.text( "Loading...", false), 0, 0, Integer.MAX_VALUE, false, false // Just set a high default ); @@ -130,6 +133,25 @@ public final class App extends Application { } + private void setKeybinds(StackPane root) { + root.addEventHandler(KeyEvent.KEY_PRESSED,event -> { + if (event.getCode() == KeyCode.ESCAPE) { + escapePopup(); + } + }); + } + + public void escapePopup() { + if (App.escPopup == null) App.escPopup = new EscapePopup(); + if (!App.isEscActive) { + App.isEscActive = true; + escPopup.show(Pos.CENTER); + } else { + escPopup.hide(); + App.isEscActive = false; + } + } + private void setOnLoadingSuccess(LoadingWidget loading) { loading.setOnSuccess(() -> { initSystems(); @@ -140,7 +162,17 @@ public final class App extends Application { WidgetContainer.add(Pos.BOTTOM_RIGHT, new SongDisplay()); stage.setOnCloseRequest(event -> { event.consume(); - startQuit(); + + var abc = WidgetContainer.getAllWidgets(); + for (Widget widget : abc) { + IO.println(widget.getClass().getSimpleName()); + } + + if (WidgetContainer.getAllWidgets().stream().anyMatch(e -> e instanceof QuitPopup)) return; + + var a = new QuitPopup(); + a.show(Pos.CENTER); // TODO disable allow having multiple + }); }); } @@ -177,19 +209,6 @@ public final class App extends Application { } } - public static void startQuit() { - if (isQuitting) { - return; - } - - WidgetContainer.add(Pos.CENTER, new QuitPopup()); - isQuitting = true; - } - - public static void stopQuit() { - isQuitting = false; - } - public static void quit() { stage.close(); System.exit(0); // TODO: This is like dropping a nuke diff --git a/app/src/main/java/org/toop/app/widget/Widget.java b/app/src/main/java/org/toop/app/widget/Widget.java index 46a7331..7278a05 100644 --- a/app/src/main/java/org/toop/app/widget/Widget.java +++ b/app/src/main/java/org/toop/app/widget/Widget.java @@ -4,7 +4,6 @@ import javafx.geometry.Pos; import javafx.scene.Node; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.toop.framework.resource.ResourceLoader; public interface Widget { Logger logger = LogManager.getLogger(Widget.class); diff --git a/app/src/main/java/org/toop/app/widget/WidgetContainer.java b/app/src/main/java/org/toop/app/widget/WidgetContainer.java index eb8d4b3..5753039 100644 --- a/app/src/main/java/org/toop/app/widget/WidgetContainer.java +++ b/app/src/main/java/org/toop/app/widget/WidgetContainer.java @@ -41,7 +41,7 @@ public final class WidgetContainer { root.getChildren().addFirst(view.getNode()); currentView = view; } else if (widget instanceof PopupWidget popup) { - currentView.add(Pos.CENTER, popup); + currentView.add(Pos.CENTER, (Widget) popup); } else { root.getChildren().add(widget.getNode()); } @@ -55,7 +55,7 @@ public final class WidgetContainer { Platform.runLater(() -> { if (widget instanceof PopupWidget popup) { - currentView.remove(popup); + currentView.remove((Widget) popup); } else { root.getChildren().remove(widget.getNode()); } diff --git a/app/src/main/java/org/toop/app/widget/complex/LoadingWidget.java b/app/src/main/java/org/toop/app/widget/complex/LoadingWidget.java index 241c4ce..61f4007 100644 --- a/app/src/main/java/org/toop/app/widget/complex/LoadingWidget.java +++ b/app/src/main/java/org/toop/app/widget/complex/LoadingWidget.java @@ -2,6 +2,7 @@ package org.toop.app.widget.complex; import javafx.application.Platform; import javafx.geometry.Pos; +import javafx.scene.Node; import javafx.scene.control.Control; import javafx.scene.control.ProgressBar; import javafx.scene.control.ProgressIndicator; @@ -144,11 +145,11 @@ public class LoadingWidget extends ViewWidget implements Update { // TODO make o if (successTrigger.call()) { triggerSuccess(); - this.remove(this); + this.remove((Node) this); return; } else if (failureTrigger.call()) { triggerFailure(); - this.remove(this); + this.remove((Node) this); return; } diff --git a/app/src/main/java/org/toop/app/widget/complex/StackWidget.java b/app/src/main/java/org/toop/app/widget/complex/StackWidget.java index 1b34235..fd9417c 100644 --- a/app/src/main/java/org/toop/app/widget/complex/StackWidget.java +++ b/app/src/main/java/org/toop/app/widget/complex/StackWidget.java @@ -7,7 +7,7 @@ import javafx.geometry.Pos; import javafx.scene.Node; import javafx.scene.layout.StackPane; -public abstract class StackWidget implements Widget { +public abstract class StackWidget extends StackPane implements Widget { private final StackPane container; public StackWidget(String cssClass) { diff --git a/app/src/main/java/org/toop/app/widget/popup/EscapePopup.java b/app/src/main/java/org/toop/app/widget/popup/EscapePopup.java new file mode 100644 index 0000000..6382da9 --- /dev/null +++ b/app/src/main/java/org/toop/app/widget/popup/EscapePopup.java @@ -0,0 +1,26 @@ +package org.toop.app.widget.popup; + +import javafx.geometry.Pos; +import org.toop.app.App; +import org.toop.app.widget.complex.ConfirmWidget; +import org.toop.app.widget.complex.PopupWidget; + +public class EscapePopup extends PopupWidget { + public EscapePopup() { + var confirmWidget = new ConfirmWidget("are-you-sure"); + + confirmWidget.addButton("yes", () -> { + App.quit(); + }); + + confirmWidget.addButton("no", () -> { + hide(); + }); + + add(Pos.CENTER, confirmWidget); + + setOnPop(() -> { + hide(); + }); + } +} diff --git a/app/src/main/java/org/toop/app/widget/popup/QuitPopup.java b/app/src/main/java/org/toop/app/widget/popup/QuitPopup.java index 264e936..593a7d8 100644 --- a/app/src/main/java/org/toop/app/widget/popup/QuitPopup.java +++ b/app/src/main/java/org/toop/app/widget/popup/QuitPopup.java @@ -15,14 +15,12 @@ public class QuitPopup extends PopupWidget { }); confirmWidget.addButton("no", () -> { - App.stopQuit(); hide(); }); add(Pos.CENTER, confirmWidget); setOnPop(() -> { - App.stopQuit(); hide(); }); } diff --git a/app/src/main/java/org/toop/app/widget/view/MainView.java b/app/src/main/java/org/toop/app/widget/view/MainView.java index 15e5c03..ee93350 100644 --- a/app/src/main/java/org/toop/app/widget/view/MainView.java +++ b/app/src/main/java/org/toop/app/widget/view/MainView.java @@ -4,6 +4,7 @@ import org.toop.app.App; import org.toop.app.widget.Primitive; import org.toop.app.widget.complex.ViewWidget; import javafx.geometry.Pos; +import org.toop.app.widget.popup.QuitPopup; public class MainView extends ViewWidget { public MainView() { @@ -24,7 +25,8 @@ public class MainView extends ViewWidget { }); var quitButton = Primitive.button("quit", () -> { - App.startQuit(); + var a = new QuitPopup(); + a.show(Pos.CENTER); }); add(Pos.CENTER, Primitive.vbox(