From 3b2e3434f995530e6751dadc400cad8096c59856 Mon Sep 17 00:00:00 2001 From: Oliver-Loeffler Date: Tue, 7 Sep 2021 14:51:13 +0200 Subject: [PATCH] Fix for issue #404 --- .../kit/fxom/FXMLPropertiesDisabler.java | 61 ++++++++ .../scenebuilder/kit/fxom/FXOMDocument.java | 29 ++-- .../scenebuilder/kit/fxom/FXOMLoader.java | 2 +- .../scenebuilder/kit/fxom/FXOMRefresher.java | 5 +- .../kit/preview/PreviewWindowController.java | 9 +- .../kit/fxom/FXMLPropertiesDisablerTest.java | 59 +++++++ .../kit/fxom/FXOMDocumentTest.java | 146 ++++++++++++++++++ ...ontainerWithMenu_SystemMenuBarEnabled.fxml | 33 ++++ .../kit/fxom/NonNormalized_Accordion.fxml | 27 ++++ .../kit/fxom/Normalized_Accordion.fxml | 24 +++ 10 files changed, 378 insertions(+), 17 deletions(-) create mode 100644 kit/src/main/java/com/oracle/javafx/scenebuilder/kit/fxom/FXMLPropertiesDisabler.java create mode 100644 kit/src/test/java/com/oracle/javafx/scenebuilder/kit/fxom/FXMLPropertiesDisablerTest.java create mode 100644 kit/src/test/java/com/oracle/javafx/scenebuilder/kit/fxom/FXOMDocumentTest.java create mode 100644 kit/src/test/resources/com/oracle/javafx/scenebuilder/kit/fxom/ContainerWithMenu_SystemMenuBarEnabled.fxml create mode 100644 kit/src/test/resources/com/oracle/javafx/scenebuilder/kit/fxom/NonNormalized_Accordion.fxml create mode 100644 kit/src/test/resources/com/oracle/javafx/scenebuilder/kit/fxom/Normalized_Accordion.fxml diff --git a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/fxom/FXMLPropertiesDisabler.java b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/fxom/FXMLPropertiesDisabler.java new file mode 100644 index 000000000..538042575 --- /dev/null +++ b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/fxom/FXMLPropertiesDisabler.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021, Gluon and/or its affiliates. + * All rights reserved. Use is subject to license terms. + * + * This file is available and licensed under the following license: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the distribution. + * - Neither the name of Oracle Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.oracle.javafx.scenebuilder.kit.fxom; + +class FXMLPropertiesDisabler { + + /** + * + * On MacOS, when loading a FXML with a menu bar where useSystemMenuBarProperty() + * is enabled, the menu in the FXML will hide the menu of SceneBuilder. + * In this case, SceneBuilder becomes unusable. + * + * Setting the property here to false has the advantage, that the FXML to be saved + * will still contain the defined property BUT the SceneBuilder menu bar will remain + * visible. + * + * The modification of properties which are not desired to be active while + * editing must happen before loading the FXML using the FXMLLoader. + * + * Here a disconnect between the FXOM and FXML is created as the state of the + * useSystemMenuBarProperty is now different in both models. + * + * @param fxmlText FXML source to be modified + * @return FXML source with all properties disabled (=false) where WYSIWYG editing is not suitable. + * + */ + public String disableUseSystemMenuBarProperty(String fxmlText) { + return fxmlText.replace("useSystemMenuBar=\"true\"", + "useSystemMenuBar=\"false\""); + } + +} diff --git a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/fxom/FXOMDocument.java b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/fxom/FXOMDocument.java index b888e4b61..8a3653088 100644 --- a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/fxom/FXOMDocument.java +++ b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/fxom/FXOMDocument.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2019 Gluon and/or its affiliates. + * Copyright (c) 2017, 2019, 2021, Gluon and/or its affiliates. * Copyright (c) 2012, 2014, Oracle and/or its affiliates. * All rights reserved. Use is subject to license terms. * @@ -44,6 +44,7 @@ import java.util.List; import java.util.Map; import java.util.ResourceBundle; +import java.util.Set; import com.oracle.javafx.scenebuilder.kit.editor.EditorPlatform; import javafx.beans.property.ReadOnlyIntegerProperty; @@ -80,16 +81,23 @@ public class FXOMDocument { private List> initialDeclaredClasses; - public FXOMDocument(String fxmlText, URL location, ClassLoader classLoader, ResourceBundle resources, boolean normalize) throws IOException { + public FXOMDocument(String fxmlText, URL location, ClassLoader classLoader, ResourceBundle resources, FXOMDocumentSwitch... switches) throws IOException { this.glue = new GlueDocument(fxmlText); this.location = location; this.classLoader = classLoader; this.resources = resources; initialDeclaredClasses = new ArrayList<>(); if (this.glue.getRootElement() != null) { + + String fxmlTextToLoad = fxmlText; + if (!Set.of(switches).contains(FXOMDocumentSwitch.FOR_PREVIEW)) { + final FXMLPropertiesDisabler FXMLPropertiesDisabler = new FXMLPropertiesDisabler(); + fxmlTextToLoad = FXMLPropertiesDisabler.disableUseSystemMenuBarProperty(fxmlText); + } final FXOMLoader loader = new FXOMLoader(this); - loader.load(fxmlText); - if (normalize) { + loader.load(fxmlTextToLoad); + + if (!Set.of(switches).contains(FXOMDocumentSwitch.NON_NORMALIZED)) { final FXOMNormalizer normalizer = new FXOMNormalizer(this); normalizer.normalize(); } @@ -102,13 +110,7 @@ public FXOMDocument(String fxmlText, URL location, ClassLoader classLoader, Reso hasGluonControls = fxmlText.contains(EditorPlatform.GLUON_PACKAGE); } - - - public FXOMDocument(String fxmlText, URL location, ClassLoader classLoader, ResourceBundle resources) throws IOException { - this(fxmlText, location, classLoader, resources, true /* normalize */); - } - - + public FXOMDocument() { this.glue = new GlueDocument(); } @@ -443,4 +445,9 @@ public static interface SceneGraphHolder { public void fxomDocumentWillRefreshSceneGraph(FXOMDocument fxomDocument); public void fxomDocumentDidRefreshSceneGraph(FXOMDocument fxomDocument); } + + public enum FXOMDocumentSwitch { + NON_NORMALIZED, + FOR_PREVIEW; + } } diff --git a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/fxom/FXOMLoader.java b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/fxom/FXOMLoader.java index eeae82a97..470d95446 100644 --- a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/fxom/FXOMLoader.java +++ b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/fxom/FXOMLoader.java @@ -287,7 +287,7 @@ public void readPropertyAttribute(String name, Class staticClass, String fxml } else if (currentTransientNode instanceof TransientProperty) { final TransientProperty transientProperty = (TransientProperty) currentTransientNode; transientProperty.getCollectedProperties().add(fxomProperty); - } else if(currentTransientNode instanceof TransientIntrinsic) { + } else if(currentTransientNode instanceof TransientIntrinsic) { final TransientIntrinsic transientIntrinsic = (TransientIntrinsic) currentTransientNode; transientIntrinsic.getProperties().add(fxomProperty); } diff --git a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/fxom/FXOMRefresher.java b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/fxom/FXOMRefresher.java index 8d736cfbd..53a039c86 100644 --- a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/fxom/FXOMRefresher.java +++ b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/fxom/FXOMRefresher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, Gluon and/or its affiliates. + * Copyright (c) 2019, 2021, Gluon and/or its affiliates. * Copyright (c) 2012, 2014, Oracle and/or its affiliates. * All rights reserved. Use is subject to license terms. * @@ -32,6 +32,7 @@ */ package com.oracle.javafx.scenebuilder.kit.fxom; +import com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument.FXOMDocumentSwitch; import com.oracle.javafx.scenebuilder.kit.metadata.Metadata; import com.oracle.javafx.scenebuilder.kit.metadata.property.ValuePropertyMetadata; import com.oracle.javafx.scenebuilder.kit.metadata.property.value.DoubleArrayPropertyMetadata; @@ -65,7 +66,7 @@ public void refresh(FXOMDocument document) { document.getLocation(), document.getClassLoader(), document.getResources(), - false /* normalized */); + FXOMDocumentSwitch.NON_NORMALIZED); final TransientStateBackup backup = new TransientStateBackup(document); // if the refresh should not take place (e.g. due to an error), remove a property from intrinsic if (newDocument.getSceneGraphRoot() == null && newDocument.getFxomRoot() == null) { diff --git a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/preview/PreviewWindowController.java b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/preview/PreviewWindowController.java index 409d6e885..1de97cb4c 100644 --- a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/preview/PreviewWindowController.java +++ b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/preview/PreviewWindowController.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2019, Gluon and/or its affiliates. + * Copyright (c) 2016, 2019, 2021, Gluon and/or its affiliates. * Copyright (c) 2012, 2014, Oracle and/or its affiliates. * All rights reserved. Use is subject to license terms. * @@ -38,6 +38,7 @@ import com.oracle.javafx.scenebuilder.kit.editor.EditorPlatform.Theme; import com.oracle.javafx.scenebuilder.kit.editor.panel.util.AbstractWindowController; import com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument; +import com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument.FXOMDocumentSwitch; import com.oracle.javafx.scenebuilder.kit.i18n.I18N; import com.oracle.javafx.scenebuilder.kit.util.MathUtils; @@ -214,7 +215,8 @@ public void openDialog() { clone = new FXOMDocument(fxomDocument.getFxmlText(false), fxomDocument.getLocation(), fxomDocument.getClassLoader(), - fxomDocument.getResources()); + fxomDocument.getResources(), + FXOMDocumentSwitch.FOR_PREVIEW); clone.setSampleDataEnabled(fxomDocument.isSampleDataEnabled()); } catch (IOException ex) { throw new RuntimeException("Bug in PreviewWindowController::openDialog", ex); //NOI18N @@ -280,7 +282,8 @@ public void run() { clone = new FXOMDocument(fxomDocument.getFxmlText(false), fxomDocument.getLocation(), fxomDocument.getClassLoader(), - fxomDocument.getResources()); + fxomDocument.getResources(), + FXOMDocumentSwitch.FOR_PREVIEW); clone.setSampleDataEnabled(fxomDocument.isSampleDataEnabled()); } catch (IOException ex) { throw new RuntimeException("Bug in PreviewWindowController::requestUpdate", ex); //NOI18N diff --git a/kit/src/test/java/com/oracle/javafx/scenebuilder/kit/fxom/FXMLPropertiesDisablerTest.java b/kit/src/test/java/com/oracle/javafx/scenebuilder/kit/fxom/FXMLPropertiesDisablerTest.java new file mode 100644 index 000000000..8a6cc4017 --- /dev/null +++ b/kit/src/test/java/com/oracle/javafx/scenebuilder/kit/fxom/FXMLPropertiesDisablerTest.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2021, Gluon and/or its affiliates. + * All rights reserved. Use is subject to license terms. + * + * This file is available and licensed under the following license: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the distribution. + * - Neither the name of Oracle Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.oracle.javafx.scenebuilder.kit.fxom; + +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.nio.file.Files; + +import org.junit.Test; + +public class FXMLPropertiesDisablerTest { + + private FXMLPropertiesDisabler classUnderTest = new FXMLPropertiesDisabler(); + + @Test + public void that_property_value_is_set_to_false() throws Exception { + String fxmlText = readResourceText("ContainerWithMenu_SystemMenuBarEnabled.fxml"); + assertTrue("ensures that test resource is correct", + fxmlText.contains("")); + String modfiedFxmlText = classUnderTest.disableUseSystemMenuBarProperty(fxmlText); + assertTrue(modfiedFxmlText.contains("")); + } + + private String readResourceText(String resourceName) throws Exception { + File fxmlFileName = new File(getClass().getResource(resourceName).toURI()); + return Files.readString(fxmlFileName.toPath()); + } + +} diff --git a/kit/src/test/java/com/oracle/javafx/scenebuilder/kit/fxom/FXOMDocumentTest.java b/kit/src/test/java/com/oracle/javafx/scenebuilder/kit/fxom/FXOMDocumentTest.java new file mode 100644 index 000000000..e88f7a3cd --- /dev/null +++ b/kit/src/test/java/com/oracle/javafx/scenebuilder/kit/fxom/FXOMDocumentTest.java @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2021, Gluon and/or its affiliates. + * All rights reserved. Use is subject to license terms. + * + * This file is available and licensed under the following license: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the distribution. + * - Neither the name of Oracle Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.oracle.javafx.scenebuilder.kit.fxom; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.net.URL; +import java.nio.file.Files; +import java.util.ResourceBundle; + +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import com.oracle.javafx.scenebuilder.kit.JfxInitializer; +import com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument.FXOMDocumentSwitch; + +import javafx.scene.control.MenuBar; + +public class FXOMDocumentTest { + + private FXOMDocument classUnderTest; + + private String fxmlName; + private URL fxmlUrl; + private String fxmlText; + private ClassLoader loader; + private ResourceBundle resourceBundle; + + @BeforeClass + public static void init() { + JfxInitializer.initialize(); + } + + @Before + public void prepareTest() throws Exception { + fxmlName = "ContainerWithMenu_SystemMenuBarEnabled.fxml"; + fxmlUrl = getResourceUrl(fxmlName); + fxmlText = readResourceText(fxmlName); + loader = this.getClass().getClassLoader(); + resourceBundle = null; + } + + @Test + public void that_FOR_PREVIEW_useSystemMenuBarProperty_is_enabled() throws Exception { + classUnderTest = new FXOMDocument(fxmlText, fxmlUrl, loader, resourceBundle, FXOMDocumentSwitch.FOR_PREVIEW); + + FXOMObject fxomObject = classUnderTest.searchWithFxId("theMenuBar"); + + assertTrue(fxomObject.getSceneGraphObject() instanceof MenuBar); + assertTrue("for preview, useSystemMenu is expected to be enabled", + ((MenuBar) fxomObject.getSceneGraphObject()).useSystemMenuBarProperty().get()); + + String generatedFxml = classUnderTest.getFxmlText(false); + assertTrue(generatedFxml.contains("useSystemMenuBar=\"true\"")); + } + + @Test + public void that_by_default_useSystemMenuBarProperty_is_disabled() throws Exception { + classUnderTest = new FXOMDocument(fxmlText, fxmlUrl, loader, resourceBundle); + + FXOMObject fxomObject = classUnderTest.searchWithFxId("theMenuBar"); + + assertTrue(fxomObject.getSceneGraphObject() instanceof MenuBar); + assertFalse("for preview, useSystemMenu is expected to be enabled", + ((MenuBar) fxomObject.getSceneGraphObject()).useSystemMenuBarProperty().get()); + + String generatedFxml = classUnderTest.getFxmlText(false); + assertTrue(generatedFxml.contains("useSystemMenuBar=\"true\"")); + } + + @Test + public void that_normalization_is_applied_by_default() throws Exception { + fxmlText = readResourceText("NonNormalized_Accordion.fxml"); + fxmlUrl = getResourceUrl("NonNormalized_Accordion.fxml"); + classUnderTest = new FXOMDocument(fxmlText, fxmlUrl, loader, resourceBundle); + + String generatedFxml = extractContentsOfFirstChildrenTag(classUnderTest.getFxmlText(false)); + String expectedFxml = extractContentsOfFirstChildrenTag(readResourceText("Normalized_Accordion.fxml")); + assertEquals(expectedFxml, generatedFxml); + } + + @Test + public void that_normalization_is_disabled_when_created_with_NON_NORMALIZED() throws Exception { + fxmlText = readResourceText("NonNormalized_Accordion.fxml"); + fxmlUrl = getResourceUrl("NonNormalized_Accordion.fxml"); + classUnderTest = new FXOMDocument(fxmlText, fxmlUrl, loader, resourceBundle, FXOMDocumentSwitch.NON_NORMALIZED); + + String generatedFxml = extractContentsOfFirstChildrenTag(classUnderTest.getFxmlText(false)); + String expectedFxml = extractContentsOfFirstChildrenTag(readResourceText("NonNormalized_Accordion.fxml")); + assertEquals(expectedFxml, generatedFxml); + } + + private String readResourceText(String resourceName) throws Exception { + File fxmlFileName = new File(getResourceUrl(resourceName).toURI()); + return useOnlyNewLine(Files.readString(fxmlFileName.toPath())); + } + + private URL getResourceUrl(String resourceName) { + return getClass().getResource(resourceName); + } + + private String useOnlyNewLine(String source) { + return source.replace("\r\n", "\n"); + } + + private String extractContentsOfFirstChildrenTag(String source) { + String openingTag = ""; + String closingTag = ""; + int open = source.indexOf(openingTag); + int close = source.lastIndexOf(closingTag) + closingTag.length(); + return source.substring(open, close); + } +} diff --git a/kit/src/test/resources/com/oracle/javafx/scenebuilder/kit/fxom/ContainerWithMenu_SystemMenuBarEnabled.fxml b/kit/src/test/resources/com/oracle/javafx/scenebuilder/kit/fxom/ContainerWithMenu_SystemMenuBarEnabled.fxml new file mode 100644 index 000000000..18d50646c --- /dev/null +++ b/kit/src/test/resources/com/oracle/javafx/scenebuilder/kit/fxom/ContainerWithMenu_SystemMenuBarEnabled.fxml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kit/src/test/resources/com/oracle/javafx/scenebuilder/kit/fxom/NonNormalized_Accordion.fxml b/kit/src/test/resources/com/oracle/javafx/scenebuilder/kit/fxom/NonNormalized_Accordion.fxml new file mode 100644 index 000000000..a62bb711c --- /dev/null +++ b/kit/src/test/resources/com/oracle/javafx/scenebuilder/kit/fxom/NonNormalized_Accordion.fxml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kit/src/test/resources/com/oracle/javafx/scenebuilder/kit/fxom/Normalized_Accordion.fxml b/kit/src/test/resources/com/oracle/javafx/scenebuilder/kit/fxom/Normalized_Accordion.fxml new file mode 100644 index 000000000..2650d2f95 --- /dev/null +++ b/kit/src/test/resources/com/oracle/javafx/scenebuilder/kit/fxom/Normalized_Accordion.fxml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + +