mirror of
https://github.com/2OOP/pism.git
synced 2026-02-04 19:04:49 +00:00
Escape popup
This commit is contained in:
@@ -1,13 +1,15 @@
|
|||||||
package org.toop.app;
|
package org.toop.app;
|
||||||
|
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.scene.paint.Color;
|
import javafx.scene.input.KeyCode;
|
||||||
import org.toop.Main;
|
import javafx.scene.input.KeyEvent;
|
||||||
|
|
||||||
import org.toop.app.widget.Primitive;
|
import org.toop.app.widget.Primitive;
|
||||||
import org.toop.app.widget.Widget;
|
import org.toop.app.widget.Widget;
|
||||||
import org.toop.app.widget.WidgetContainer;
|
import org.toop.app.widget.WidgetContainer;
|
||||||
import org.toop.app.widget.complex.LoadingWidget;
|
import org.toop.app.widget.complex.LoadingWidget;
|
||||||
import org.toop.app.widget.display.SongDisplay;
|
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.popup.QuitPopup;
|
||||||
import org.toop.app.widget.view.MainView;
|
import org.toop.app.widget.view.MainView;
|
||||||
import org.toop.framework.audio.*;
|
import org.toop.framework.audio.*;
|
||||||
@@ -37,7 +39,8 @@ public final class App extends Application {
|
|||||||
private static int height;
|
private static int height;
|
||||||
private static int width;
|
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) {
|
public static void run(String[] args) {
|
||||||
launch(args);
|
launch(args);
|
||||||
@@ -78,10 +81,10 @@ public final class App extends Application {
|
|||||||
App.width = (int)stage.getWidth();
|
App.width = (int)stage.getWidth();
|
||||||
App.height = (int)stage.getHeight();
|
App.height = (int)stage.getHeight();
|
||||||
|
|
||||||
App.isQuitting = false;
|
|
||||||
|
|
||||||
AppSettings.applySettings();
|
AppSettings.applySettings();
|
||||||
|
|
||||||
|
setKeybinds(root);
|
||||||
|
|
||||||
LoadingWidget loading = new LoadingWidget(Primitive.text(
|
LoadingWidget loading = new LoadingWidget(Primitive.text(
|
||||||
"Loading...", false), 0, 0, Integer.MAX_VALUE, false, false // Just set a high default
|
"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) {
|
private void setOnLoadingSuccess(LoadingWidget loading) {
|
||||||
loading.setOnSuccess(() -> {
|
loading.setOnSuccess(() -> {
|
||||||
initSystems();
|
initSystems();
|
||||||
@@ -140,7 +162,17 @@ public final class App extends Application {
|
|||||||
WidgetContainer.add(Pos.BOTTOM_RIGHT, new SongDisplay());
|
WidgetContainer.add(Pos.BOTTOM_RIGHT, new SongDisplay());
|
||||||
stage.setOnCloseRequest(event -> {
|
stage.setOnCloseRequest(event -> {
|
||||||
event.consume();
|
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() {
|
public static void quit() {
|
||||||
stage.close();
|
stage.close();
|
||||||
System.exit(0); // TODO: This is like dropping a nuke
|
System.exit(0); // TODO: This is like dropping a nuke
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import javafx.geometry.Pos;
|
|||||||
import javafx.scene.Node;
|
import javafx.scene.Node;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.toop.framework.resource.ResourceLoader;
|
|
||||||
|
|
||||||
public interface Widget {
|
public interface Widget {
|
||||||
Logger logger = LogManager.getLogger(Widget.class);
|
Logger logger = LogManager.getLogger(Widget.class);
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public final class WidgetContainer {
|
|||||||
root.getChildren().addFirst(view.getNode());
|
root.getChildren().addFirst(view.getNode());
|
||||||
currentView = view;
|
currentView = view;
|
||||||
} else if (widget instanceof PopupWidget popup) {
|
} else if (widget instanceof PopupWidget popup) {
|
||||||
currentView.add(Pos.CENTER, popup);
|
currentView.add(Pos.CENTER, (Widget) popup);
|
||||||
} else {
|
} else {
|
||||||
root.getChildren().add(widget.getNode());
|
root.getChildren().add(widget.getNode());
|
||||||
}
|
}
|
||||||
@@ -55,7 +55,7 @@ public final class WidgetContainer {
|
|||||||
|
|
||||||
Platform.runLater(() -> {
|
Platform.runLater(() -> {
|
||||||
if (widget instanceof PopupWidget popup) {
|
if (widget instanceof PopupWidget popup) {
|
||||||
currentView.remove(popup);
|
currentView.remove((Widget) popup);
|
||||||
} else {
|
} else {
|
||||||
root.getChildren().remove(widget.getNode());
|
root.getChildren().remove(widget.getNode());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package org.toop.app.widget.complex;
|
|||||||
|
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.geometry.Pos;
|
import javafx.geometry.Pos;
|
||||||
|
import javafx.scene.Node;
|
||||||
import javafx.scene.control.Control;
|
import javafx.scene.control.Control;
|
||||||
import javafx.scene.control.ProgressBar;
|
import javafx.scene.control.ProgressBar;
|
||||||
import javafx.scene.control.ProgressIndicator;
|
import javafx.scene.control.ProgressIndicator;
|
||||||
@@ -144,11 +145,11 @@ public class LoadingWidget extends ViewWidget implements Update { // TODO make o
|
|||||||
|
|
||||||
if (successTrigger.call()) {
|
if (successTrigger.call()) {
|
||||||
triggerSuccess();
|
triggerSuccess();
|
||||||
this.remove(this);
|
this.remove((Node) this);
|
||||||
return;
|
return;
|
||||||
} else if (failureTrigger.call()) {
|
} else if (failureTrigger.call()) {
|
||||||
triggerFailure();
|
triggerFailure();
|
||||||
this.remove(this);
|
this.remove((Node) this);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import javafx.geometry.Pos;
|
|||||||
import javafx.scene.Node;
|
import javafx.scene.Node;
|
||||||
import javafx.scene.layout.StackPane;
|
import javafx.scene.layout.StackPane;
|
||||||
|
|
||||||
public abstract class StackWidget implements Widget {
|
public abstract class StackWidget extends StackPane implements Widget {
|
||||||
private final StackPane container;
|
private final StackPane container;
|
||||||
|
|
||||||
public StackWidget(String cssClass) {
|
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", () -> {
|
confirmWidget.addButton("no", () -> {
|
||||||
App.stopQuit();
|
|
||||||
hide();
|
hide();
|
||||||
});
|
});
|
||||||
|
|
||||||
add(Pos.CENTER, confirmWidget);
|
add(Pos.CENTER, confirmWidget);
|
||||||
|
|
||||||
setOnPop(() -> {
|
setOnPop(() -> {
|
||||||
App.stopQuit();
|
|
||||||
hide();
|
hide();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import org.toop.app.App;
|
|||||||
import org.toop.app.widget.Primitive;
|
import org.toop.app.widget.Primitive;
|
||||||
import org.toop.app.widget.complex.ViewWidget;
|
import org.toop.app.widget.complex.ViewWidget;
|
||||||
import javafx.geometry.Pos;
|
import javafx.geometry.Pos;
|
||||||
|
import org.toop.app.widget.popup.QuitPopup;
|
||||||
|
|
||||||
public class MainView extends ViewWidget {
|
public class MainView extends ViewWidget {
|
||||||
public MainView() {
|
public MainView() {
|
||||||
@@ -24,7 +25,8 @@ public class MainView extends ViewWidget {
|
|||||||
});
|
});
|
||||||
|
|
||||||
var quitButton = Primitive.button("quit", () -> {
|
var quitButton = Primitive.button("quit", () -> {
|
||||||
App.startQuit();
|
var a = new QuitPopup();
|
||||||
|
a.show(Pos.CENTER);
|
||||||
});
|
});
|
||||||
|
|
||||||
add(Pos.CENTER, Primitive.vbox(
|
add(Pos.CENTER, Primitive.vbox(
|
||||||
|
|||||||
Reference in New Issue
Block a user