Working escape menu

This commit is contained in:
lieght
2025-12-04 22:42:39 +01:00
parent 2fbda6f14d
commit 61f03fab26
3 changed files with 31 additions and 12 deletions

View File

@@ -141,8 +141,8 @@ public final class App extends Application {
if (WidgetContainer.getAllWidgets().stream().anyMatch( if (WidgetContainer.getAllWidgets().stream().anyMatch(
e -> e instanceof QuitPopup || e instanceof EscapePopup e -> e instanceof QuitPopup || e instanceof EscapePopup
)) { )) {
WidgetContainer.findRemove(QuitPopup.class); WidgetContainer.findRemoveFirst(QuitPopup.class);
WidgetContainer.findRemove(EscapePopup.class); WidgetContainer.findRemoveFirst(EscapePopup.class);
return; return;
} }

View File

@@ -1,5 +1,6 @@
package org.toop.app.widget; package org.toop.app.widget;
import javafx.scene.Node;
import org.toop.app.widget.complex.PopupWidget; import org.toop.app.widget.complex.PopupWidget;
import org.toop.app.widget.complex.ViewWidget; import org.toop.app.widget.complex.ViewWidget;
@@ -70,6 +71,19 @@ public final class WidgetContainer {
); );
} }
public static void findRemoveFirst(Class<? extends Widget> 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() { public static ViewWidget getCurrentView() {
return currentView; return currentView;
} }

View File

@@ -2,25 +2,30 @@ package org.toop.app.widget.popup;
import javafx.geometry.Pos; import javafx.geometry.Pos;
import org.toop.app.App; 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.ConfirmWidget;
import org.toop.app.widget.complex.PopupWidget; import org.toop.app.widget.complex.PopupWidget;
import org.toop.app.widget.view.OptionsView;
public class EscapePopup extends PopupWidget { public class EscapePopup extends PopupWidget {
public EscapePopup() { public EscapePopup() {
var confirmWidget = new ConfirmWidget("are-you-sure"); var con = Primitive.button("Continue", () -> { hide(); }, false); // TODO, localize
confirmWidget.addButton("yes", () -> { var qui = Primitive.button("quit", () -> {
App.quit();
});
confirmWidget.addButton("no", () -> {
hide(); 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();
});
} }
} }