示例#1
0
  protected CTabFolder bindNestedComplexUnionProperties(
      final FormToolkit toolkit,
      Composite parent,
      final IMessageManager mmng,
      final Object id,
      String labelText,
      String tooltip,
      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;
  }