mirror of
https://github.com/2OOP/pism.git
synced 2026-02-04 10:54:51 +00:00
Escape popup
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
26
app/src/main/java/org/toop/app/widget/popup/EscapePopup.java
Normal file
26
app/src/main/java/org/toop/app/widget/popup/EscapePopup.java
Normal 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();
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -15,14 +15,12 @@ public class QuitPopup extends PopupWidget {
|
||||
});
|
||||
|
||||
confirmWidget.addButton("no", () -> {
|
||||
App.stopQuit();
|
||||
hide();
|
||||
});
|
||||
|
||||
add(Pos.CENTER, confirmWidget);
|
||||
|
||||
setOnPop(() -> {
|
||||
App.stopQuit();
|
||||
hide();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user