From a1bc785b3c3d283f1722187b7004d4966c08eb44 Mon Sep 17 00:00:00 2001 From: Arthur Poiret Date: Mon, 3 Jul 2023 21:33:01 +0200 Subject: [PATCH] fix(#197): stacked dialogs can be closed correctly --- .../owlplug/core/components/DialogManager.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/owlplug-client/src/main/java/com/owlplug/core/components/DialogManager.java b/owlplug-client/src/main/java/com/owlplug/core/components/DialogManager.java index 4828454e..01a713a4 100644 --- a/owlplug-client/src/main/java/com/owlplug/core/components/DialogManager.java +++ b/owlplug-client/src/main/java/com/owlplug/core/components/DialogManager.java @@ -28,13 +28,15 @@ import org.springframework.stereotype.Component; import org.springframework.stereotype.Controller; +import java.util.Stack; + @Component public class DialogManager { @Autowired private MainController mainController; - private JFXDialog dialog; + private Stack dialogStack = new Stack<>(); /** * Creates a new dialog. @@ -42,8 +44,13 @@ public class DialogManager { * @return */ public JFXDialog newDialog() { - dialog = new JFXDialog(); + JFXDialog dialog = new JFXDialog(); dialog.setDialogContainer(mainController.getRootPane()); + dialogStack.push(dialog); + + dialog.setOnDialogClosed(e -> { + dialogStack.pop(); + }); return dialog; } @@ -124,7 +131,7 @@ public JFXDialog newDialog(double width, double height, Node body, Node heading) */ public JFXDialog newDialog(JFXDialogLayout layout) { - newDialog(); + JFXDialog dialog = newDialog(); dialog.setContent(layout); return dialog; } @@ -143,6 +150,7 @@ public JFXDialog newSimpleInfoDialog(String title, String body) { */ public JFXDialog newSimpleInfoDialog(Node title, Node body) { JFXDialogLayout layout = new JFXDialogLayout(); + JFXDialog dialog = newDialog(layout); layout.setHeading(title); layout.setBody(body); @@ -154,12 +162,12 @@ public JFXDialog newSimpleInfoDialog(Node title, Node body) { }); layout.setActions(button); - return newDialog(layout); + return dialog; } public JFXDialog getDialog() { - return dialog; + return dialogStack.peek(); } }