From 61f03fab267167f325e3cb3ba3fa4ab6675f0746 Mon Sep 17 00:00:00 2001 From: lieght <49651652+BAFGdeJong@users.noreply.github.com> Date: Thu, 4 Dec 2025 22:42:39 +0100 Subject: [PATCH] Working escape menu --- app/src/main/java/org/toop/app/App.java | 4 +-- .../org/toop/app/widget/WidgetContainer.java | 14 +++++++++++ .../toop/app/widget/popup/EscapePopup.java | 25 +++++++++++-------- 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/toop/app/App.java b/app/src/main/java/org/toop/app/App.java index 30d8e16..e1fcfa2 100644 --- a/app/src/main/java/org/toop/app/App.java +++ b/app/src/main/java/org/toop/app/App.java @@ -141,8 +141,8 @@ public final class App extends Application { if (WidgetContainer.getAllWidgets().stream().anyMatch( e -> e instanceof QuitPopup || e instanceof EscapePopup )) { - WidgetContainer.findRemove(QuitPopup.class); - WidgetContainer.findRemove(EscapePopup.class); + WidgetContainer.findRemoveFirst(QuitPopup.class); + WidgetContainer.findRemoveFirst(EscapePopup.class); return; } 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 33b4ae8..4e4beed 100644 --- a/app/src/main/java/org/toop/app/widget/WidgetContainer.java +++ b/app/src/main/java/org/toop/app/widget/WidgetContainer.java @@ -1,5 +1,6 @@ package org.toop.app.widget; +import javafx.scene.Node; import org.toop.app.widget.complex.PopupWidget; import org.toop.app.widget.complex.ViewWidget; @@ -70,6 +71,19 @@ public final class WidgetContainer { ); } + public static void findRemoveFirst(Class widgetClass) { + if (root == null || currentView == null) return; + + Platform.runLater(() -> { + for (Node widget : currentView.getChildren()) { + if (widgetClass.isAssignableFrom(widget.getClass())) { + currentView.getChildren().remove(widget); + break; + } + } + }); + } + public static ViewWidget getCurrentView() { return currentView; } 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 index 6382da9..b179082 100644 --- a/app/src/main/java/org/toop/app/widget/popup/EscapePopup.java +++ b/app/src/main/java/org/toop/app/widget/popup/EscapePopup.java @@ -2,25 +2,30 @@ package org.toop.app.widget.popup; import javafx.geometry.Pos; import org.toop.app.App; +import org.toop.app.widget.Primitive; +import org.toop.app.widget.WidgetContainer; import org.toop.app.widget.complex.ConfirmWidget; import org.toop.app.widget.complex.PopupWidget; +import org.toop.app.widget.view.OptionsView; public class EscapePopup extends PopupWidget { public EscapePopup() { - var confirmWidget = new ConfirmWidget("are-you-sure"); + var con = Primitive.button("Continue", () -> { hide(); }, false); // TODO, localize - confirmWidget.addButton("yes", () -> { - App.quit(); - }); - - confirmWidget.addButton("no", () -> { + var qui = Primitive.button("quit", () -> { hide(); + WidgetContainer.add(Pos.CENTER, new QuitPopup()); }); - add(Pos.CENTER, confirmWidget); + if (!(WidgetContainer.getCurrentView().getClass().isAssignableFrom(OptionsView.class))) { + var opt = Primitive.button("options", () -> { + hide(); + WidgetContainer.getCurrentView().transitionNext(new OptionsView()); + }); + add(Pos.CENTER, Primitive.vbox(con, opt, qui)); + } else { + add(Pos.CENTER, Primitive.vbox(con, qui)); + } - setOnPop(() -> { - hide(); - }); } }