From 149c2c86934fcf7be7c3603357d577257ab194c4 Mon Sep 17 00:00:00 2001 From: Brendan Robert Date: Wed, 27 Dec 2023 20:56:14 -0600 Subject: [PATCH] Fix multiple window issue. --- OutlawEditor/pom.xml | 2 +- .../badvision/outlaweditor/SheetEditor.java | 10 ++++++++++ .../outlaweditor/ui/ModalEditor.java | 18 ++++++++++++++---- .../ui/SheetEditorController.java | 6 ++++-- .../badvision/outlaweditor/ui/UIAction.java | 18 ++++++++++++++++++ .../impl/GlobalEditorTabControllerImpl.java | 19 +++++++++++-------- .../ui/impl/SheetEditorControllerImpl.java | 5 +++-- 7 files changed, 61 insertions(+), 17 deletions(-) diff --git a/OutlawEditor/pom.xml b/OutlawEditor/pom.xml index 918426d5..794cde50 100644 --- a/OutlawEditor/pom.xml +++ b/OutlawEditor/pom.xml @@ -119,7 +119,7 @@ org.controlsfx controlsfx - 11.1.2 + 11.2.0 org.openjfx diff --git a/OutlawEditor/src/main/java/org/badvision/outlaweditor/SheetEditor.java b/OutlawEditor/src/main/java/org/badvision/outlaweditor/SheetEditor.java index 78f8325f..9786ad41 100644 --- a/OutlawEditor/src/main/java/org/badvision/outlaweditor/SheetEditor.java +++ b/OutlawEditor/src/main/java/org/badvision/outlaweditor/SheetEditor.java @@ -39,6 +39,16 @@ public class SheetEditor { return sheet; } + public boolean isShowing() { + return primaryStage != null && primaryStage.isShowing(); + } + + public void toFront() { + if (isShowing()) { + primaryStage.toFront(); + } + } + public void show() { primaryStage = new Stage(); FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/SheetEditor.fxml")); diff --git a/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/ModalEditor.java b/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/ModalEditor.java index e46fa200..da7bf76e 100644 --- a/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/ModalEditor.java +++ b/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/ModalEditor.java @@ -10,6 +10,8 @@ package org.badvision.outlaweditor.ui; +import static org.badvision.outlaweditor.data.DataUtilities.uppercaseFirst; + import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector; @@ -23,8 +25,6 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; -import static org.badvision.outlaweditor.data.DataUtilities.uppercaseFirst; - import javafx.application.Platform; import javafx.beans.property.adapter.JavaBeanStringPropertyBuilder; import javafx.beans.value.ObservableValue; @@ -51,6 +51,7 @@ import javafx.util.Callback; * @author blurry */ public class ModalEditor { + Dialog dialog; public static interface EditControl { @@ -62,7 +63,6 @@ public class ModalEditor { } public static class TextControl implements EditControl { - TextField control = new TextField(); @Override @@ -173,7 +173,7 @@ public class ModalEditor { public Optional editObject(T sourceObject, Map obj, Class clazz, String title, String header) throws IntrospectionException { BeanInfo info = Introspector.getBeanInfo(clazz); - Dialog dialog = new Dialog(); + dialog = new Dialog(); dialog.setTitle(title); dialog.setHeaderText(header); @@ -227,4 +227,14 @@ public class ModalEditor { return dialog.showAndWait(); } + + public boolean isOpen() { + return dialog != null && dialog.isShowing(); + } + + public void close() { + if (isOpen()) { + dialog.close(); + } + } } diff --git a/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/SheetEditorController.java b/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/SheetEditorController.java index 58f57da3..d0b716ca 100644 --- a/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/SheetEditorController.java +++ b/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/SheetEditorController.java @@ -15,12 +15,14 @@ package org.badvision.outlaweditor.ui; import java.net.URL; import java.util.ResourceBundle; + +import org.controlsfx.control.spreadsheet.SpreadsheetColumn; +import org.controlsfx.control.spreadsheet.SpreadsheetView; + import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.TextField; -import org.controlsfx.control.spreadsheet.SpreadsheetColumn; -import org.controlsfx.control.spreadsheet.SpreadsheetView; /** * diff --git a/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/UIAction.java b/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/UIAction.java index e8490b87..f3848a41 100644 --- a/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/UIAction.java +++ b/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/UIAction.java @@ -295,8 +295,19 @@ public class UIAction { } } + // Track open editors + static Map editors = new LinkedHashMap<>(); + public static Optional editAndGetVariable(Variable v) throws IntrospectionException { + // Check if editor is already open + if (editors.containsKey(v)) { + editors.get(v); + if (editors.get(v).isOpen()) { + return Optional.empty(); + } + } ModalEditor editor = new ModalEditor(); + editors.put(v, editor); Map controls = new LinkedHashMap<>(); controls.put("name", new ModalEditor.TextControl()); @@ -362,12 +373,19 @@ public class UIAction { return editSheet(sheet); } + static Map sheetEditors = new LinkedHashMap<>(); public static Sheet editSheet(Sheet item) { if (item == null) { System.err.println("Requested to edit a null sheet object, ignoring!"); return null; } + // Check if we don't already have an open editor first + if (sheetEditors.containsKey(item) && sheetEditors.get(item).isShowing()) { + sheetEditors.get(item).toFront(); + return item; + } SheetEditor editor = new SheetEditor(item); + sheetEditors.put(item, editor); editor.show(); return item; } diff --git a/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/impl/GlobalEditorTabControllerImpl.java b/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/impl/GlobalEditorTabControllerImpl.java index f5563d5d..29bc37df 100644 --- a/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/impl/GlobalEditorTabControllerImpl.java +++ b/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/impl/GlobalEditorTabControllerImpl.java @@ -9,18 +9,13 @@ */ package org.badvision.outlaweditor.ui.impl; +import static org.badvision.outlaweditor.ui.UIAction.editScript; + import java.beans.IntrospectionException; import java.util.Optional; import java.util.logging.Level; import java.util.logging.Logger; -import javafx.application.Platform; -import javafx.event.ActionEvent; -import javafx.scene.control.ListCell; -import javafx.scene.control.Tooltip; -import javafx.scene.text.Font; -import javafx.scene.text.FontWeight; - import org.badvision.outlaweditor.TransferHelper; import org.badvision.outlaweditor.api.ApplicationState; import org.badvision.outlaweditor.data.DataUtilities; @@ -30,9 +25,14 @@ import org.badvision.outlaweditor.data.xml.UserType; import org.badvision.outlaweditor.data.xml.Variable; import org.badvision.outlaweditor.ui.GlobalEditorTabController; import org.badvision.outlaweditor.ui.UIAction; -import static org.badvision.outlaweditor.ui.UIAction.editScript; import jakarta.xml.bind.JAXBException; +import javafx.application.Platform; +import javafx.event.ActionEvent; +import javafx.scene.control.ListCell; +import javafx.scene.control.Tooltip; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; public class GlobalEditorTabControllerImpl extends GlobalEditorTabController { @@ -56,6 +56,7 @@ public class GlobalEditorTabControllerImpl extends GlobalEditorTabController { @Override public void startEdit() { + Platform.runLater(()->variableList.getSelectionModel().clearSelection()); UIAction.editVariable(getItem(), ApplicationState.getInstance().getGameData().getGlobal()); cancelEdit(); updateItem(getItem(), false); @@ -75,6 +76,7 @@ public class GlobalEditorTabControllerImpl extends GlobalEditorTabController { @Override public void startEdit() { + Platform.runLater(()->globalScriptList.getSelectionModel().clearSelection()); UIAction.editScript(getItem(), ApplicationState.getInstance().getGameData().getGlobal()); cancelEdit(); updateItem(getItem(), false); @@ -97,6 +99,7 @@ public class GlobalEditorTabControllerImpl extends GlobalEditorTabController { @Override public void startEdit() { + Platform.runLater(()->dataTypeList.getSelectionModel().clearSelection()); UIAction.editUserType(getItem()); cancelEdit(); updateItem(getItem(), false); diff --git a/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/impl/SheetEditorControllerImpl.java b/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/impl/SheetEditorControllerImpl.java index 6129a9ad..2995ade1 100644 --- a/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/impl/SheetEditorControllerImpl.java +++ b/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/impl/SheetEditorControllerImpl.java @@ -15,6 +15,9 @@ */ package org.badvision.outlaweditor.ui.impl; +import static org.badvision.outlaweditor.data.DataUtilities.getValue; +import static org.badvision.outlaweditor.data.DataUtilities.setValue; + import java.io.File; import java.net.URL; import java.util.ArrayList; @@ -27,8 +30,6 @@ import java.util.stream.Collectors; import org.badvision.outlaweditor.SheetEditor; import org.badvision.outlaweditor.TransferHelper; import org.badvision.outlaweditor.data.DataUtilities; -import static org.badvision.outlaweditor.data.DataUtilities.getValue; -import static org.badvision.outlaweditor.data.DataUtilities.setValue; import org.badvision.outlaweditor.data.xml.Columns; import org.badvision.outlaweditor.data.xml.Rows; import org.badvision.outlaweditor.data.xml.Rows.Row;