Escape popup

This commit is contained in:
lieght
2025-12-04 21:47:51 +01:00
parent c8e2c3747e
commit f24ca88246
8 changed files with 73 additions and 28 deletions

View File

@@ -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

View File

@@ -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);

View File

@@ -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());
}

View File

@@ -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;
}

View File

@@ -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) {

View File

@@ -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();
});
}
}

View File

@@ -15,14 +15,12 @@ public class QuitPopup extends PopupWidget {
});
confirmWidget.addButton("no", () -> {
App.stopQuit();
hide();
});
add(Pos.CENTER, confirmWidget);
setOnPop(() -> {
App.stopQuit();
hide();
});
}

View File

@@ -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(