From ea179eb0e27751fc96634b07cda6633519bd11c9 Mon Sep 17 00:00:00 2001 From: lieght <49651652+BAFGdeJong@users.noreply.github.com> Date: Fri, 5 Dec 2025 12:28:06 +0100 Subject: [PATCH] Added find functionality --- app/src/main/java/org/toop/app/App.java | 12 ++++--- .../org/toop/app/widget/WidgetContainer.java | 33 +++++++++++++++++-- .../toop/app/widget/popup/EscapePopup.java | 2 +- 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/toop/app/App.java b/app/src/main/java/org/toop/app/App.java index e1fcfa2..4389088 100644 --- a/app/src/main/java/org/toop/app/App.java +++ b/app/src/main/java/org/toop/app/App.java @@ -31,6 +31,8 @@ import javafx.scene.Scene; import javafx.scene.layout.StackPane; import javafx.stage.Stage; +import java.util.Objects; + public final class App extends Application { private static Stage stage; private static Scene scene; @@ -138,11 +140,11 @@ public final class App extends Application { } public void escapePopup() { - if (WidgetContainer.getAllWidgets().stream().anyMatch( - e -> e instanceof QuitPopup || e instanceof EscapePopup - )) { - WidgetContainer.findRemoveFirst(QuitPopup.class); - WidgetContainer.findRemoveFirst(EscapePopup.class); + if (!Objects.requireNonNull( + WidgetContainer.find(widget -> widget instanceof QuitPopup || widget instanceof EscapePopup) + ).isEmpty()) { + WidgetContainer.removeFirst(QuitPopup.class); + WidgetContainer.removeFirst(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 4e4beed..44dbc9c 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.collections.ObservableList; import javafx.scene.Node; import org.toop.app.widget.complex.PopupWidget; import org.toop.app.widget.complex.ViewWidget; @@ -10,6 +11,7 @@ import javafx.scene.layout.StackPane; import java.util.ArrayList; import java.util.List; +import java.util.function.Predicate; public final class WidgetContainer { private static StackPane root; @@ -63,7 +65,7 @@ public final class WidgetContainer { }); } - public static void findRemove(Class widgetClass) { + public static void remove(Class widgetClass) { if (root == null || currentView == null) return; Platform.runLater(() -> @@ -71,7 +73,7 @@ public final class WidgetContainer { ); } - public static void findRemoveFirst(Class widgetClass) { + public static void removeFirst(Class widgetClass) { if (root == null || currentView == null) return; Platform.runLater(() -> { @@ -84,6 +86,33 @@ public final class WidgetContainer { }); } + public static List find(Class widgetClass) { + if (root == null || currentView == null) return null; + + return getAllWidgets() + .stream() + .filter(widget -> widget.getClass().isAssignableFrom(widgetClass)) + .toList(); + } + + public static List find(Predicate predicate) { + if (root == null || currentView == null) return null; + + return getAllWidgets() + .stream() + .filter(predicate) + .toList(); + } + + public static Widget findFirst(Class widgetClass) { + if (root == null || currentView == null) return null; + + return getAllWidgets() + .stream() + .filter(widget -> widget.getClass().isAssignableFrom(widgetClass)) + .findFirst().orElse(null); + } + 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 b179082..e36c82a 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 @@ -10,7 +10,7 @@ import org.toop.app.widget.view.OptionsView; public class EscapePopup extends PopupWidget { public EscapePopup() { - var con = Primitive.button("Continue", () -> { hide(); }, false); // TODO, localize + var con = Primitive.button("Continue", this::hide, false); // TODO, localize var qui = Primitive.button("quit", () -> { hide();