diff --git a/app/src/main/java/com/oracle/javafx/scenebuilder/app/DocumentWindowController.java b/app/src/main/java/com/oracle/javafx/scenebuilder/app/DocumentWindowController.java index 89e1c2ef0..43338b171 100644 --- a/app/src/main/java/com/oracle/javafx/scenebuilder/app/DocumentWindowController.java +++ b/app/src/main/java/com/oracle/javafx/scenebuilder/app/DocumentWindowController.java @@ -67,6 +67,7 @@ import com.oracle.javafx.scenebuilder.kit.editor.selection.AbstractSelectionGroup; import com.oracle.javafx.scenebuilder.kit.editor.selection.ObjectSelectionGroup; import com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument; +import com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument.FXOMDocumentSwitch; import com.oracle.javafx.scenebuilder.kit.fxom.FXOMNodes; import com.oracle.javafx.scenebuilder.kit.fxom.FXOMObject; import com.oracle.javafx.scenebuilder.kit.library.Library; @@ -396,7 +397,13 @@ public SplitController getDocumentSplitController() { public void loadFromFile(File fxmlFile) throws IOException { final URL fxmlURL = fxmlFile.toURI().toURL(); final String fxmlText = FXOMDocument.readContentFromURL(fxmlURL); - editorController.setFxmlTextAndLocation(fxmlText, fxmlURL, false); + + FXOMDocumentSwitch[] options = PreferencesController.getSingleton().getRecordGlobal() + .isPreserveUnresolvedImports() + ? new FXOMDocumentSwitch[] {FXOMDocumentSwitch.PRESERVE_UNRESOLVED_IMPORTS} + : new FXOMDocumentSwitch[0]; + + editorController.setFxmlTextAndLocation(fxmlText, fxmlURL, false, options); updateLoadFileTime(); updateStageTitle(); // No-op if fxml has not been loaded yet updateFromDocumentPreferences(true); diff --git a/app/src/main/java/com/oracle/javafx/scenebuilder/app/preferences/PreferencesRecordGlobal.java b/app/src/main/java/com/oracle/javafx/scenebuilder/app/preferences/PreferencesRecordGlobal.java index 70986c61f..f3068e9e6 100644 --- a/app/src/main/java/com/oracle/javafx/scenebuilder/app/preferences/PreferencesRecordGlobal.java +++ b/app/src/main/java/com/oracle/javafx/scenebuilder/app/preferences/PreferencesRecordGlobal.java @@ -99,8 +99,10 @@ public String toString() { static final int DEFAULT_RECENT_ITEMS_SIZE = 15; static final boolean DEFAULT_ACCORDION_ANIMATION = true; static final boolean DEFAULT_WILDCARD_IMPORTS = false; + static final boolean DEFAULT_PRESERVE_UNRESOLVED_IMPORTS = true; + static final boolean DEFAULT_ALTERNATE_TEXT_INPUT_PASTE = EditorPlatform.IS_MAC; - + /*************************************************************************** * * * Instance fields * @@ -115,6 +117,7 @@ public String toString() { private int recentItemsSize = DEFAULT_RECENT_ITEMS_SIZE; private boolean accordionAnimation = DEFAULT_ACCORDION_ANIMATION; private boolean wildcardImports = DEFAULT_WILDCARD_IMPORTS; + private boolean preserveUnresolvedImports = DEFAULT_PRESERVE_UNRESOLVED_IMPORTS; private final List recentItems = new ArrayList<>(); private LocalDate showUpdateDialogDate = null; @@ -386,10 +389,18 @@ public void setWildcardImports(boolean wildcardImports) { this.wildcardImports = wildcardImports; } + public boolean isPreserveUnresolvedImports() { + return this.preserveUnresolvedImports; + } + + public void setPreserveUnresolvedImports(boolean preserveUnresolvedImports) { + this.preserveUnresolvedImports = preserveUnresolvedImports; + } + public boolean isAlternateTextInputControlPaste() { return alternatePasteBehavior; } - + public void setAlternateTextInputControlPaste(boolean alternatePasteBehavior) { this.alternatePasteBehavior = alternatePasteBehavior; } @@ -480,6 +491,7 @@ public void readFromJavaPreferences() { // Wildcard imports setWildcardImports(applicationRootPreferences.getBoolean(WILDCARD_IMPORT, DEFAULT_WILDCARD_IMPORTS)); + setPreserveUnresolvedImports(applicationRootPreferences.getBoolean(PRESERVE_UNRESOLVED_IMPORTS, DEFAULT_PRESERVE_UNRESOLVED_IMPORTS)); // Alternate paste behavior for Text Input Controls setAlternateTextInputControlPaste(applicationRootPreferences.getBoolean(ALTERNATE_TEXT_INPUT_PASTE, DEFAULT_ALTERNATE_TEXT_INPUT_PASTE)); @@ -549,6 +561,8 @@ public void writeToJavaPreferences(String key) { case WILDCARD_IMPORT: applicationRootPreferences.putBoolean(WILDCARD_IMPORT, isWildcardImports()); break; + case PRESERVE_UNRESOLVED_IMPORTS: + applicationRootPreferences.putBoolean(PRESERVE_UNRESOLVED_IMPORTS, isPreserveUnresolvedImports()); case ALTERNATE_TEXT_INPUT_PASTE: applicationRootPreferences.putBoolean(ALTERNATE_TEXT_INPUT_PASTE,isAlternateTextInputControlPaste()); break; diff --git a/app/src/main/java/com/oracle/javafx/scenebuilder/app/preferences/PreferencesWindowController.java b/app/src/main/java/com/oracle/javafx/scenebuilder/app/preferences/PreferencesWindowController.java index 57a3774ed..1e9ffbdb6 100644 --- a/app/src/main/java/com/oracle/javafx/scenebuilder/app/preferences/PreferencesWindowController.java +++ b/app/src/main/java/com/oracle/javafx/scenebuilder/app/preferences/PreferencesWindowController.java @@ -53,6 +53,7 @@ import static com.oracle.javafx.scenebuilder.app.preferences.PreferencesController.RECENT_ITEMS_SIZE; import static com.oracle.javafx.scenebuilder.app.preferences.PreferencesController.TOOL_THEME; import static com.oracle.javafx.scenebuilder.app.preferences.PreferencesController.WILDCARD_IMPORT; +import static com.oracle.javafx.scenebuilder.app.preferences.PreferencesController.PRESERVE_UNRESOLVED_IMPORTS; import static com.oracle.javafx.scenebuilder.app.preferences.PreferencesController.ALTERNATE_TEXT_INPUT_PASTE; import static com.oracle.javafx.scenebuilder.kit.preferences.PreferencesRecordGlobalBase.DEFAULT_ALIGNMENT_GUIDES_COLOR; @@ -143,6 +144,8 @@ public class PreferencesWindowController extends AbstractFxmlWindowController { @FXML private CheckBox wildcardImports; @FXML + private CheckBox preserveUnresolvedImports; + @FXML private CheckBox alternatePasteBehavior; @FXML private Label alternatePasteBehaviorLabel; @@ -268,6 +271,8 @@ protected void controllerDidLoadFxml() { // Wildcard Imports wildcardImports.setSelected(recordGlobal.isWildcardImports()); wildcardImports.selectedProperty().addListener(new WildcardImportListener()); + preserveUnresolvedImports.setSelected(recordGlobal.isPreserveUnresolvedImports()); + preserveUnresolvedImports.selectedProperty().addListener(new PreserveUnresolvedImportListener()); if (EditorPlatform.IS_MAC) { // Alternate paste behavior for Text Input Controls @@ -597,6 +602,17 @@ public void changed(ObservableValue observable, Boolean oldVa } } + private static class PreserveUnresolvedImportListener implements ChangeListener { + + @Override + public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { + final PreferencesController preferencesController = PreferencesController.getSingleton(); + final PreferencesRecordGlobal recordGlobal = preferencesController.getRecordGlobal(); + recordGlobal.setPreserveUnresolvedImports(newValue); + recordGlobal.writeToJavaPreferences(PRESERVE_UNRESOLVED_IMPORTS); + } + } + private static class AlternatePasteListener implements ChangeListener { @Override diff --git a/app/src/main/resources/com/oracle/javafx/scenebuilder/app/i18n/SceneBuilderApp.properties b/app/src/main/resources/com/oracle/javafx/scenebuilder/app/i18n/SceneBuilderApp.properties index 98c136064..0bba93df4 100644 --- a/app/src/main/resources/com/oracle/javafx/scenebuilder/app/i18n/SceneBuilderApp.properties +++ b/app/src/main/resources/com/oracle/javafx/scenebuilder/app/i18n/SceneBuilderApp.properties @@ -250,6 +250,7 @@ prefs.cssanalyzer.columns.defaults.last = "Defaults" Column Last prefs.recent.items = Recent items : prefs.animate.accordion = Animate Accordion : prefs.wildcard.import = Use Wildcard Imports : +prefs.preserve.unresolved.import = Load FXML with unresolved imports : prefs.tic.paste.alternate.behavior = Alternative paste behavior for text input : prefs.tic.paste.alternate.behavior.tooltip = MacOS only: Enables workaround for pasting into text input controls.\nDisable when pasting text is not working as expected. prefs.reset.default = Reset to Builtin Default Values diff --git a/app/src/main/resources/com/oracle/javafx/scenebuilder/app/preferences/Preferences.fxml b/app/src/main/resources/com/oracle/javafx/scenebuilder/app/preferences/Preferences.fxml index 23af4ca44..c7ca80475 100644 --- a/app/src/main/resources/com/oracle/javafx/scenebuilder/app/preferences/Preferences.fxml +++ b/app/src/main/resources/com/oracle/javafx/scenebuilder/app/preferences/Preferences.fxml @@ -1,7 +1,7 @@