diff --git a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/editor/panel/content/mode/EditModeController.java b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/editor/panel/content/mode/EditModeController.java index 291347a44..a3a48127f 100644 --- a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/editor/panel/content/mode/EditModeController.java +++ b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/editor/panel/content/mode/EditModeController.java @@ -724,11 +724,16 @@ private void mouseDoubleClickedOnGlassLayer(MouseEvent e) { final DesignHierarchyMask m = new DesignHierarchyMask(hitObject); // Do not allow inline editing of the I18N value - if (m.isResourceKey() == false) { + if (m.isResourceKey() == false && m.isBindingExpression() == false) { handleInlineEditing((FXOMInstance) selectAndMoveGesture.getHitObject()); } else { final MessageLog ml = contentPanelController.getEditorController().getMessageLog(); - ml.logWarningMessage("log.warning.inline.edit.internationalized.strings"); + if (m.isResourceKey()) { + ml.logWarningMessage("log.warning.inline.edit.internationalized.strings"); + } + if (m.isBindingExpression()) { + ml.logWarningMessage("log.warning.inline.edit.bindingexpression.strings"); + } } } } diff --git a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/editor/panel/hierarchy/HierarchyItem.java b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/editor/panel/hierarchy/HierarchyItem.java index fa33fda7a..4721dbf5a 100644 --- a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/editor/panel/hierarchy/HierarchyItem.java +++ b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/editor/panel/hierarchy/HierarchyItem.java @@ -207,6 +207,14 @@ public boolean isResourceKey(final DisplayOption option) { } return option == INFO && mask.isResourceKey(); } + + public boolean isBindingExpression(final DisplayOption option) { + // Place holder items do not have display info + if (mask == null) { + return false; + } + return option == INFO && mask.isBindingExpression(); + } public boolean isPlaceHolder() { return false; diff --git a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/editor/panel/hierarchy/treeview/HierarchyTreeCell.java b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/editor/panel/hierarchy/treeview/HierarchyTreeCell.java index c66e3ecb8..03b99fd83 100644 --- a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/editor/panel/hierarchy/treeview/HierarchyTreeCell.java +++ b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/editor/panel/hierarchy/treeview/HierarchyTreeCell.java @@ -506,6 +506,7 @@ private void filterMouseEvent(final MouseEvent me) { final DisplayOption option = panelController.getDisplayOption(); if (item.hasDisplayInfo(option) && item.isResourceKey(option) == false // Do not allow inline editing of the I18N value + && item.isBindingExpression(option) == false // Do not allow inline editing of the binding expression value && displayInfoLabel.isHover()) { startEditingDisplayInfo(); // Consume the event so the native expand/collapse behavior is not performed @@ -759,8 +760,8 @@ private void updateLayout(HierarchyItem item) { final DisplayOption option = panelController.getDisplayOption(); final String displayInfo = item.getDisplayInfo(option); - // Do not allow inline editing of the I18N value - if (item.isResourceKey(option)) { + // Do not allow inline editing of the I18N value or binding expression + if (item.isResourceKey(option) || item.isBindingExpression(option)) { displayInfoLabel.getStyleClass().removeAll(HIERARCHY_READWRITE_LABEL); } else { if (displayInfoLabel.getStyleClass().contains(HIERARCHY_READWRITE_LABEL) == false) { diff --git a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/editor/panel/inspector/editors/I18nStringEditor.java b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/editor/panel/inspector/editors/I18nStringEditor.java index 88f4d3a0b..85cf94027 100644 --- a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/editor/panel/inspector/editors/I18nStringEditor.java +++ b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/editor/panel/inspector/editors/I18nStringEditor.java @@ -58,18 +58,25 @@ public class I18nStringEditor extends PropertyEditor { private static final String PERCENT_STR = "%"; //NOI18N + private static final String EXPR_STR = "${"; //NOI18N + private static final String EXPR_STR_END = "}"; //NOI18N private TextInputControl textNode = new TextField(); private HBox i18nHBox = null; + private HBox exprHBox = null; private EventHandler valueListener; private final MenuItem i18nMenuItem = new MenuItem(); private final String I18N_ON = I18N.getString("inspector.i18n.on"); private final String I18N_OFF = I18N.getString("inspector.i18n.off"); + private final MenuItem exprMenuItem = new MenuItem(); + private final String EXPR_ON = I18N.getString("inspector.bindingexpression.on"); + private final String EXPR_OFF = I18N.getString("inspector.bindingexpression.off"); private final MenuItem multilineMenuItem = new MenuItem(); private final String MULTI_LINE = I18N.getString("inspector.i18n.multiline"); private final String SINGLE_LINE = I18N.getString("inspector.i18n.singleline"); private boolean multiLineSupported = false; // Specific states private boolean i18nMode = false; + private boolean exprMode = false; private boolean multiLineMode = false; public I18nStringEditor(ValuePropertyMetadata propMeta, Set> selectedClasses, boolean multiLineSupported) { @@ -86,6 +93,7 @@ private void initialize(boolean multiLineSupported) { setTextEditorBehavior(this, textNode, valueListener); getMenu().getItems().add(i18nMenuItem); + getMenu().getItems().add(exprMenuItem); getMenu().getItems().add(multilineMenuItem); i18nMenuItem.setOnAction(e -> { @@ -97,6 +105,15 @@ private void initialize(boolean multiLineSupported) { I18nStringEditor.this.getCommitListener().handle(null); updateMenuItems(); }); + exprMenuItem.setOnAction(e -> { + if (!exprMode) { + setValue(new PrefixedValue(PrefixedValue.Type.BINDING_EXPRESSION, I18N.getString("inspector.bindingexpression.dummyvalue")).toString()); + } else { + setValue(""); //NOEXPR + } + I18nStringEditor.this.getCommitListener().handle(null); + updateMenuItems(); + }); multilineMenuItem.setOnAction(e -> { if (!multiLineMode) { switchToTextArea(); @@ -121,6 +138,8 @@ public Object getValue() { String val = textNode.getText(); if (i18nMode) { val = new PrefixedValue(PrefixedValue.Type.RESOURCE_KEY, val).toString(); + } else if (exprMode) { + val = new PrefixedValue(PrefixedValue.Type.BINDING_EXPRESSION, val).toString(); } else { val = EditorUtils.getPlainString(val); } @@ -143,39 +162,42 @@ public void setValue(Object value) { PrefixedValue prefixedValue = new PrefixedValue(val); String suffix = prefixedValue.getSuffix(); - // Handle i18n - if (prefixedValue.isResourceKey()) { - if (!i18nMode) { - wrapInHBox(); - i18nMode = true; - } - } else if (i18nMode) { + if (i18nMode) { // no percent + i18nMode - unwrapHBox(); + unwrapI18nFromHBox(); i18nMode = false; } + + if (exprMode) { + // no percent + i18nMode + unwrapExprFromHBox(); + exprMode = false; + } + + if (multiLineMode) { + multiLineMode = false; + switchToTextField(); + } + + // Handle i18n + if (prefixedValue.isResourceKey()) { + wrapI18nInHBox(); + i18nMode = true; + } + + // Handle expression + if (prefixedValue.isBindingExpression()) { + wrapExprInHBox(); + exprMode = true; + } // Handle multi-line if (containsLineFeed(prefixedValue.toString())) { - if (i18nMode) { - // multi-line + i18n ==> set as i18n only - multiLineMode = false; - switchToTextField(); - } else { - if (!multiLineMode) { - multiLineMode = true; - switchToTextArea(); - } - } - } else { - // no line feed - if (multiLineMode) { - multiLineMode = false; - switchToTextField(); - } + multiLineMode = true; + switchToTextArea(); } - if (i18nMode) { + if (i18nMode || exprMode) { textNode.setText(suffix); } else { // We may have other special characters (@, $, ...) to display in the text field @@ -195,6 +217,8 @@ public Node getValueEditor() { Node valueEditor; if (i18nMode) { valueEditor = i18nHBox; + } else if (exprMode) { + valueEditor = exprHBox; } else { valueEditor = textNode; } @@ -240,7 +264,7 @@ protected void switchToTextField() { textNode = textField; } - private void wrapInHBox() { + private void wrapI18nInHBox() { i18nHBox = new HBox(); i18nHBox.setAlignment(Pos.CENTER); EditorUtils.replaceNode(textNode, i18nHBox, null); @@ -253,12 +277,33 @@ private void wrapInHBox() { textNode.setPrefWidth(30.0); HBox.setHgrow(textNode, Priority.ALWAYS); } + + private void wrapExprInHBox() { + exprHBox = new HBox(); + exprHBox.setAlignment(Pos.CENTER); + EditorUtils.replaceNode(textNode, exprHBox, null); + Label expreLabel = new Label(EXPR_STR); + Label expreSuffixLabel = new Label(EXPR_STR_END); + expreLabel.getStyleClass().add("symbol-prefix"); //NOI18N + exprHBox.getChildren().addAll(expreLabel, textNode, expreSuffixLabel); + HBox.setHgrow(expreLabel, Priority.NEVER); + HBox.setHgrow(expreSuffixLabel, Priority.NEVER); + // we have to set a small pref width for the text node else it will + // revert to it's API set pref width which is too wide + textNode.setPrefWidth(30.0); + HBox.setHgrow(textNode, Priority.ALWAYS); + } - private void unwrapHBox() { + private void unwrapI18nFromHBox() { i18nHBox.getChildren().remove(textNode); EditorUtils.replaceNode(i18nHBox, textNode, null); } - + + private void unwrapExprFromHBox() { + exprHBox.getChildren().remove(textNode); + EditorUtils.replaceNode(exprHBox, textNode, null); + } + private static boolean containsLineFeed(String str) { return str.contains("\n"); //NOI18N } @@ -271,20 +316,32 @@ public void requestFocus() { private void updateMenuItems() { if (i18nMode) { i18nMenuItem.setText(I18N_OFF); + exprMenuItem.setDisable(true); multilineMenuItem.setDisable(true); } else { i18nMenuItem.setText(I18N_ON); - multilineMenuItem.setDisable(false); + } + + if (exprMode) { + exprMenuItem.setText(EXPR_OFF); + i18nMenuItem.setDisable(true); + multilineMenuItem.setDisable(true); + } else { + exprMenuItem.setText(EXPR_ON); } if (multiLineMode) { multilineMenuItem.setText(SINGLE_LINE); i18nMenuItem.setDisable(true); + exprMenuItem.setDisable(true); } else { multilineMenuItem.setText(MULTI_LINE); - i18nMenuItem.setDisable(false); } + i18nMenuItem.setDisable(exprMode || multiLineMode); + exprMenuItem.setDisable(i18nMode || multiLineMode); + multilineMenuItem.setDisable(exprMode || i18nMode); + if (!multiLineSupported) { multilineMenuItem.setDisable(true); } diff --git a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/editor/panel/inspector/editors/PropertyEditor.java b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/editor/panel/inspector/editors/PropertyEditor.java index 0189e609a..3b9c1a117 100644 --- a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/editor/panel/inspector/editors/PropertyEditor.java +++ b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/editor/panel/inspector/editors/PropertyEditor.java @@ -364,7 +364,7 @@ private void cssMenuUpdate() { } protected boolean isSetValueDone() { - boolean done = !isHandlingError() && (isBinding() || isEditing()); + boolean done = !isHandlingError() && isEditing(); return done; } diff --git a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/fxom/BindingExpressionDisabler.java b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/fxom/BindingExpressionDisabler.java new file mode 100644 index 000000000..80be16192 --- /dev/null +++ b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/fxom/BindingExpressionDisabler.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2020, 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 java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import com.oracle.javafx.scenebuilder.kit.metadata.util.PropertyName; + +import javafx.fxml.FXMLLoader; + +/** + * + */ +public class BindingExpressionDisabler { + + public static void disable(FXOMDocument fxomDocument) { + assert fxomDocument != null; + + final List candidates = new ArrayList<>(); + if (fxomDocument.getFxomRoot() != null) { + candidates.add(fxomDocument.getFxomRoot()); + } + + while (candidates.isEmpty() == false) { + final FXOMObject candidate = candidates.get(0); + candidates.remove(0); + + if (candidate instanceof FXOMInstance) { + final FXOMInstance inst = (FXOMInstance)candidate; + final Object sceneGraphObject = inst.getSceneGraphObject(); + + for (Map.Entry e:inst.getProperties().entrySet()) { + FXOMProperty property = e.getValue(); + PropertyName propertyName = e.getKey(); + + if (property instanceof FXOMPropertyT) { + FXOMPropertyT propertyT = (FXOMPropertyT)property; + if (propertyT.getValue().startsWith(FXMLLoader.BINDING_EXPRESSION_PREFIX)) { + try { + propertyName.setValue(sceneGraphObject, propertyT.getValue()); + } catch (Exception ex) { + // Let the exception be, the binding expression can't be escaped + // due to the property type not accepting string value + // catching the exception allow the process to go on + } + } + } + } + } + + candidates.addAll(candidate.getChildObjects()); + } + } +} 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..a5b20d84c 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 @@ -74,6 +74,9 @@ public void refresh(FXOMDocument document) { refreshDocument(document, newDocument); } backup.restore(); + + BindingExpressionDisabler.disable(document); + synchronizeDividerPositions(document); } catch (RuntimeException | IOException x) { final StringBuilder sb = new StringBuilder(); diff --git a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/metadata/property/value/SingleValuePropertyMetadata.java b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/metadata/property/value/SingleValuePropertyMetadata.java index 316e34891..c10d2d334 100644 --- a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/metadata/property/value/SingleValuePropertyMetadata.java +++ b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/metadata/property/value/SingleValuePropertyMetadata.java @@ -77,11 +77,7 @@ public T getValue(FXOMInstance fxomInstance) { } else if (fxomProperty instanceof FXOMPropertyT) { final FXOMPropertyT fxomPropertyT = (FXOMPropertyT) fxomProperty; final PrefixedValue pv = new PrefixedValue(fxomPropertyT.getValue()); - if (pv.isBindingExpression()) { - result = getDefaultValue(); - } else { - result = makeValueFromProperty(fxomPropertyT); - } + result = makeValueFromProperty(fxomPropertyT); } else if (fxomProperty instanceof FXOMPropertyC) { final FXOMPropertyC fxomPropertyC = (FXOMPropertyC) fxomProperty; assert fxomPropertyC.getValues().isEmpty() == false; diff --git a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/metadata/util/DesignHierarchyMask.java b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/metadata/util/DesignHierarchyMask.java index 49db5c8f5..2fdb107d2 100644 --- a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/metadata/util/DesignHierarchyMask.java +++ b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/metadata/util/DesignHierarchyMask.java @@ -304,7 +304,8 @@ public String getClassNameInfo() { /** * Returns the string value for this FXOM object description property. * If the value is internationalized, the returned value is the resolved one. - * + * If the value is a binding expression, the returned value is the expression + * instead of the empty resolved one * @return */ public String getDescription() { @@ -315,7 +316,9 @@ public String getDescription() { final FXOMInstance fxomInstance = (FXOMInstance) fxomObject; final ValuePropertyMetadata vpm = Metadata.getMetadata().queryValueProperty(fxomInstance, propertyName); - final Object description = vpm.getValueInSceneGraphObject(fxomInstance); // resolved value + final Object description = isBindingExpression() ? + vpm.getValueObject(fxomInstance): //original binding expression + vpm.getValueInSceneGraphObject(fxomInstance); // resolved value return description == null ? null : description.toString(); } return null; @@ -410,6 +413,22 @@ public boolean isResourceKey() { } return false; } + + public boolean isBindingExpression() { + if (hasDescription()) { // (1) + // Retrieve the unresolved description + final PropertyName propertyName = getPropertyNameForDescription(); + assert propertyName != null; // Because of (1) + assert fxomObject instanceof FXOMInstance; // Because of (1) + final FXOMInstance fxomInstance = (FXOMInstance) fxomObject; + final ValuePropertyMetadata vpm + = Metadata.getMetadata().queryValueProperty(fxomInstance, propertyName); + final Object description = vpm.getValueObject(fxomInstance); // unresolved value + final PrefixedValue pv = new PrefixedValue(description.toString()); + return pv.isBindingExpression(); + } + return false; + } public boolean isFreeChildPositioning() { boolean result = false; diff --git a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/metadata/util/PrefixedValue.java b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/metadata/util/PrefixedValue.java index 4ba4cd2a9..b393e0a2f 100644 --- a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/metadata/util/PrefixedValue.java +++ b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/metadata/util/PrefixedValue.java @@ -177,7 +177,7 @@ public String getSuffix() { case BINDING_EXPRESSION: { assert value.startsWith(FXMLLoader.BINDING_EXPRESSION_PREFIX); assert value.endsWith(FXMLLoader.BINDING_EXPRESSION_SUFFIX); - result = value.substring(FXMLLoader.BINDING_EXPRESSION_PREFIX.length() - FXMLLoader.BINDING_EXPRESSION_SUFFIX.length()); + result = value.substring(FXMLLoader.BINDING_EXPRESSION_PREFIX.length(), value.length() - FXMLLoader.BINDING_EXPRESSION_SUFFIX.length()); break; } case PLAIN_STRING: { 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..3389628fc 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 @@ -37,6 +37,7 @@ import com.oracle.javafx.scenebuilder.kit.editor.EditorPlatform; 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.BindingExpressionDisabler; import com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument; import com.oracle.javafx.scenebuilder.kit.i18n.I18N; import com.oracle.javafx.scenebuilder.kit.util.MathUtils; @@ -282,6 +283,7 @@ public void run() { fxomDocument.getClassLoader(), fxomDocument.getResources()); clone.setSampleDataEnabled(fxomDocument.isSampleDataEnabled()); + BindingExpressionDisabler.disable(clone); } catch (IOException ex) { throw new RuntimeException("Bug in PreviewWindowController::requestUpdate", ex); //NOI18N } diff --git a/kit/src/main/resources/com/oracle/javafx/scenebuilder/kit/i18n/SceneBuilderKit.properties b/kit/src/main/resources/com/oracle/javafx/scenebuilder/kit/i18n/SceneBuilderKit.properties index 7790145ab..929f763fb 100644 --- a/kit/src/main/resources/com/oracle/javafx/scenebuilder/kit/i18n/SceneBuilderKit.properties +++ b/kit/src/main/resources/com/oracle/javafx/scenebuilder/kit/i18n/SceneBuilderKit.properties @@ -72,6 +72,7 @@ log.info.explore.end = End exploring {0} log.info.explore.folder = Start exploring FOLDER {0} log.info.explore.jar = Start exploring JAR {0} log.warning.inline.edit.internationalized.strings = Can''t inline edit internationalized strings +log.warning.inline.edit.bindingexpression.strings = Can''t inline edit binding expression strings log.warning.color.creation.error.hexadecimal = Can''t create color for hexadecimal value ''{0}'' log.warning.image.location.does.not.exist = Image ''{0}'' does not exist log.warning.invalid.fxid = Id ''{0}'' is not a valid java identifier @@ -127,6 +128,9 @@ content.log.cannot.display.selected.n = {0} of {1} selected objects cannot be di # ----------------------------------------------------------------------------- # Inspector Panel # ----------------------------------------------------------------------------- +inspector.bindingexpression.dummyvalue = controller.dummyprop +inspector.bindingexpression.off = Delete Binding expression String +inspector.bindingexpression.on = Replace with Binding expression String inspector.cursor.chooseimage = Choose Image... inspector.cursor.inherited = Inherited (Default) inspector.cursor.inheritedparent = Inherited from Parent (Default) diff --git a/kit/src/main/resources/com/oracle/javafx/scenebuilder/kit/i18n/SceneBuilderKit_ja.properties b/kit/src/main/resources/com/oracle/javafx/scenebuilder/kit/i18n/SceneBuilderKit_ja.properties index 1c3278cb4..f7b9ddc22 100644 --- a/kit/src/main/resources/com/oracle/javafx/scenebuilder/kit/i18n/SceneBuilderKit_ja.properties +++ b/kit/src/main/resources/com/oracle/javafx/scenebuilder/kit/i18n/SceneBuilderKit_ja.properties @@ -70,6 +70,7 @@ label.qualifier.vertical = (垂直) # ----------------------------------------------------------------------------- log.info.explore.jar = JAR {0}の探索を開始 log.warning.inline.edit.internationalized.strings = 国際化された文字列をインライン編集できません +log.warning.inline.edit.bindingexpression.strings = Can''t inline edit binding expression strings log.warning.color.creation.error.hexadecimal = 16進値''{0}''の色を作成できません log.warning.image.location.does.not.exist = 画像''{0}''は存在しません log.warning.invalid.fxid = ID ''{0}''は有効なJava識別子ではありません @@ -112,6 +113,8 @@ content.log.cannot.display.selected.n = 選択されたオブジェクト{1}個 # ----------------------------------------------------------------------------- # Inspector Panel # ----------------------------------------------------------------------------- +inspector.bindingexpression.off = Delete Binding expression String +inspector.bindingexpression.on = Replace with Binding expression String inspector.cursor.chooseimage = 画像の選択... inspector.cursor.inherited = 継承 (デフォルト) inspector.cursor.inheritedparent = 親を継承 (デフォルト)