in kit/src/main/java/com/oracle/javafx/scenebuilder/kit/editor/panel/inspector/editors/AnchorPaneConstraintsEditor.java [214:303]
private void initialize() {
//
// Text field
//
// For SQE tests
textField.setId(EditorUtils.toDisplayName(propMeta.getName().getName()) + " Value"); //NOI18N
EventHandler<ActionEvent> valueListener = event -> {
if (isHandlingError()) {
// Event received because of focus lost due to error dialog
return;
}
String valStr = textField.getText();
if (valStr == null || valStr.isEmpty()) {
if (toggleButton.isSelected()) {
updateFromTextField = true;
toggleButton.setSelected(false);
updateFromTextField = false;
}
userUpdateValueProperty(null);
return;
}
textField.selectAll();
double valDouble;
try {
valDouble = Double.parseDouble(valStr);
} catch (NumberFormatException e) {
handleInvalidValue(valStr, textField);
return;
}
if (!((DoublePropertyMetadata) getPropertyMeta()).isValidValue(valDouble)) {
handleInvalidValue(valDouble, textField);
return;
}
if (!toggleButton.isSelected()) {
updateFromTextField = true;
toggleButton.setSelected(true);
updateFromTextField = false;
}
userUpdateValueProperty(valDouble);
};
setNumericEditorBehavior(this, textField, valueListener, false);
// Override default promptText
textField.setPromptText(""); //NOI18N
textField.setOnMouseClicked(t -> ConstraintEditor.this.toggleButton.setSelected(true));
//
// Toggle button
//
assert propMeta instanceof DoublePropertyMetadata;
toggleButton.selectedProperty().addListener((ChangeListener<Boolean>) (ov, prevSel, newSel) -> {
// System.out.println("toggleButton : selectedProperty changed!");
if (isUpdateFromModel() || updateFromTextField) {
// nothing to do
return;
}
// Update comes from toggleButton.
if (newSel) {
// Anchor selected : compute its value from the selected node
double anchor = 0;
String propName = ConstraintEditor.this.propMeta.getName().toString();
switch (propName) {
// For the moment, we don't support multi-selection with different anchors:
// the first instance anchor only is used.
case topAnchorPropName:
anchor = EditorUtils.computeTopAnchor(getFirstInstance());
break;
case rightAnchorPropName:
anchor = EditorUtils.computeRightAnchor(getFirstInstance());
break;
case bottomAnchorPropName:
anchor = EditorUtils.computeBottomAnchor(getFirstInstance());
break;
case leftAnchorPropName:
anchor = EditorUtils.computeLeftAnchor(getFirstInstance());
break;
default:
assert false;
}
textField.setText(EditorUtils.valAsStr(anchor));
userUpdateValueProperty(getValue());
} else {
// Anchor unselected
textField.setText(null);
userUpdateValueProperty(null);
}
});
}