ComplexUnionPropertyDescriptor complexProperty) {
Class<?> basePropertyType = complexProperty.getPropertyType();
//final CTabFolder bar = new CTabFolder(parent, SWT.TITLE | SWT.BORDER);
final CTabFolder bar = new CTabFolder(parent, SWT.BORDER);
// section.setTitle(labelText);
bar.setToolTipText(tooltip);
final UnionTypeValue[] valueTypes = complexProperty.getValueTypes();
final Object[] values = new Object[valueTypes.length];
bar.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
int idx = bar.getSelectionIndex();
if (idx >= 0 && idx < valueTypes.length) {
// lets update the model with the value for this tab
node.setPropertyValue(id, values[idx]);
}
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
});
Object value = node.getPropertyValue(id);
int selectIdx = -1;
int idx = 0;
for (UnionTypeValue valueType : valueTypes) {
Composite composite = new Composite(bar, SWT.NONE);
composite.setLayout(new GridLayout(2, false));
CTabItem item = new CTabItem(bar, SWT.BORDER);
item.setText(valueType.getId());
item.setControl(composite);
Class<?> complexType = valueType.getValueType();
Object tabValue;
if (complexType.isInstance(value)) {
selectIdx = idx;
tabValue = value;
}
else {
tabValue = ObjectHelper.newInstance(complexType);
}
values[idx++] = tabValue;
bindNestedComplexProperties(toolkit, mmng, complexProperty, complexType, composite, tabValue);
composite.layout(true, true);
}
if (selectIdx >= 0) {
bar.setSelection(selectIdx);
}
bar.layout(true, true);
return bar;
}