in kit/src/main/java/com/oracle/javafx/scenebuilder/kit/editor/panel/css/CssPanelController.java [1962:2086]
private static Node createValueUI(CssProperty item, PropertyState ps, Object value, CssStyle style, ParsedValue<?, ?>[] parsedValues) {
Node ret = null;
if (value instanceof ParsedValue) {
ParsedValue<?, ?> pv = (ParsedValue<?, ?>) value;
value = CssValueConverter.convert(pv);
}
if (value != null) {
if (value.getClass().isArray()) {
HBox hbox = new HBox(5);
int size = Array.getLength(value);
int lookupIndex = 0;
for (int i = 0; i < size; i++) {
Object v = Array.get(value, i);
Node n = getLeaf(v);
if (n == null) {
break;
}
boolean lookup = false;
if (parsedValues != null) {
ParsedValue<?, ?> pv = parsedValues[i];
lookup = pv.isContainsLookups();
}
if (lookup) {
assert style != null;
CssStyle lookupRoot = null;
if (style.getLookupChain().size() - 1 < lookupIndex) {
// We are in NOT APPLIED case, no lookup in matching Styles.
// This is an RT bug logged.
// XXX jfdenise, we can reconstruct the lookup chain based on the ParsedValue
// We need to access private field ParsedValue.resolved
// That is a null if this is the leaf of the Lookup
// That is a ParsedValue with a getvalue that is a ParsedValue
// to introspect.
// ParsedValue<?, ?> pv = parsedValues[i];
// if(pv.getValue() instanceof String){
// // OK, this is a lookup name.
// Object obj = pv.convert(null);
// } else {
//
// }
} else {
lookupRoot = style.getLookupChain().get(lookupIndex);
}
lookupIndex += 1;
Node lookupUI = createLookupUI(item, ps, style, lookupRoot, n);
hbox.getChildren().add(lookupUI);
} else {
hbox.getChildren().add(n);
}
if (i < size - 1) {
hbox.getChildren().add(new Label(","));//NOI18N
}
}
if (!hbox.getChildren().isEmpty()) {
ret = hbox;
}
} else {
if (value instanceof Collection) {
HBox hbox = new HBox(5);
int lookupIndex = 0;
Collection<?> collection = (Collection<?>) value;
Iterator<?> it = collection.iterator();
int index = 0;
while (it.hasNext()) {
Object v = it.next();
Node n = getLeaf(v);
if (n == null) {
break;
}
boolean lookup = false;
if (parsedValues != null) {
ParsedValue<?, ?> pv = parsedValues[index];
lookup = pv.isContainsLookups();
}
if (lookup) {
CssStyle lookupRoot = null;
assert style != null;
if (style.getLookupChain().size() - 1 < lookupIndex) {
// We are in NOT APPLIED case, no lookup in matching Styles.
// This is an RT bug logged.
// XXX jfdenise, we can reconstruct the lookup chain based on the ParsedValue
// We need to access private field ParsedValue.resolved
// That is a null if this is the leaf of the Lookup
// That is a ParsedValue with a getvalue that is a ParsedValue
// to introspect.
// ParsedValue<?, ?> pv = parsedValues[i];
// if(pv.getValue() instanceof String){
// // OK, this is a lookup name.
// Object obj = pv.convert(null);
// } else {
//
// }
} else {
lookupRoot = style.getLookupChain().get(lookupIndex);
}
Node lookupUI = createLookupUI(item, ps, style, lookupRoot, n);
hbox.getChildren().add(lookupUI);
lookupIndex += 1;
} else {
hbox.getChildren().add(n);
}
if (it.hasNext()) {
hbox.getChildren().add(new Label(","));//NOI18N
}
index++;
}
if (!hbox.getChildren().isEmpty()) {
ret = hbox;
}
} else {// Leaf value
Node n = getLeaf(value);
if (n == null && style != null) {
n = getLabel(style);
}
if (style != null && !style.getLookupChain().isEmpty()) {
ret = createLookupUI(item, ps, style, style, n);
} else {
ret = n;
}
}
}
}
return ret;
}