diff --git a/app/src/main/java/org/toop/app/Server.java b/app/src/main/java/org/toop/app/Server.java index 3a09b90..9dbfb8e 100644 --- a/app/src/main/java/org/toop/app/Server.java +++ b/app/src/main/java/org/toop/app/Server.java @@ -120,8 +120,8 @@ public final class Server { new EventFlow().addPostEvent(new NetworkEvents.SendLogin(clientId, user)).postEvent(); - primary = new ServerView(user, this::sendChallenge, this::disconnect); - WidgetContainer.getCurrentView().transitionNextCustom(primary); + primary = new ServerView(user, this::sendChallenge); + WidgetContainer.getCurrentView().transitionNextCustom(primary, "disconnect", this::disconnect); startPopulateScheduler(); populateGameList(); 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 fe54d45..1a6230b 100644 --- a/app/src/main/java/org/toop/app/widget/WidgetContainer.java +++ b/app/src/main/java/org/toop/app/widget/WidgetContainer.java @@ -7,6 +7,9 @@ import javafx.application.Platform; import javafx.geometry.Pos; import javafx.scene.layout.StackPane; +import java.util.ArrayList; +import java.util.List; + public final class WidgetContainer { private static StackPane root; private static ViewWidget currentView; @@ -74,4 +77,16 @@ public final class WidgetContainer { currentView = view; }); } + + public static List getAllWidgets() { + final List children = new ArrayList<>(); + + for (var child : root.getChildren()) { + if (child instanceof Widget widget) { + children.add(widget); + } + } + + return children; + } } \ No newline at end of file diff --git a/app/src/main/java/org/toop/app/widget/complex/ViewWidget.java b/app/src/main/java/org/toop/app/widget/complex/ViewWidget.java index 84205ba..4dc8b04 100644 --- a/app/src/main/java/org/toop/app/widget/complex/ViewWidget.java +++ b/app/src/main/java/org/toop/app/widget/complex/ViewWidget.java @@ -37,9 +37,17 @@ public abstract class ViewWidget extends StackWidget { view.add(Pos.BOTTOM_LEFT, Primitive.vbox(backButton)); } - public void transitionNextCustom(ViewWidget view) { + public void transitionNextCustom(ViewWidget view, String key, Runnable runnable) { view.previous = this; + replace(Pos.CENTER, view); + + var customButton = Primitive.button(key, () -> { + runnable.run(); + view.transitionPrevious(); + }); + + view.add(Pos.BOTTOM_LEFT, Primitive.vbox(customButton)); } public void transitionPrevious() { diff --git a/app/src/main/java/org/toop/app/widget/view/ServerView.java b/app/src/main/java/org/toop/app/widget/view/ServerView.java index 94da1e2..7365e74 100644 --- a/app/src/main/java/org/toop/app/widget/view/ServerView.java +++ b/app/src/main/java/org/toop/app/widget/view/ServerView.java @@ -14,14 +14,12 @@ import javafx.scene.control.ListView; public final class ServerView extends ViewWidget { private final String user; private final Consumer onPlayerClicked; - private final Runnable onDisconnect; private final ListView