public void setVisible(boolean visible) {
   super.setVisible(visible);
   if (defaultButton != null && !defaultButton.isDisposed()) {
     defaultButton.setVisible(visible);
   }
   if (addButton != null && !addButton.isDisposed()) {
     addButton.setVisible(visible);
   }
   if (removeButton != null && !removeButton.isDisposed()) {
     removeButton.setVisible(visible);
   }
   text.getParent().pack();
   text.getParent().layout();
 }
  /* (non-Javadoc)
   * @see org.eclipse.bpmn2.modeler.ui.property.editors.ObjectEditor#createControl(org.eclipse.swt.widgets.Composite, java.lang.String, int)
   */
  @Override
  protected Control createControl(Composite composite, String label, int style) {
    super.createControl(composite, label, style);

    // we assume that the "Edit" button will handle editing of this read-only text field
    text.setEditable(false);
    GridData textLayoutData = (GridData) text.getLayoutData();
    textLayoutData.horizontalSpan = 1;
    boolean multiLine = ((style & SWT.MULTI) != 0);

    Composite buttons = new Composite(composite, SWT.NONE);
    buttons.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
    buttons.setLayout(new FillLayout((style & SWT.MULTI) != 0 ? SWT.VERTICAL : SWT.HORIZONTAL));

    if (canAdd()) {
      addButton = getToolkit().createButton(buttons, null, SWT.PUSH);
      addButton.setImage(Activator.getDefault().getImage(IConstants.ICON_ADD_20));
      if (multiLine) textLayoutData.heightHint += 25;
    }

    if (canRemove()) {
      removeButton = getToolkit().createButton(buttons, null, SWT.PUSH);
      removeButton.setImage(Activator.getDefault().getImage(IConstants.ICON_REMOVE_20));
      if (multiLine) textLayoutData.heightHint += 25;
    }

    defaultButton = getToolkit().createButton(buttons, null, SWT.PUSH);
    defaultButton.setImage(Activator.getDefault().getImage(IConstants.ICON_EDIT_20));

    updateText();

    SelectionAdapter editListener =
        new SelectionAdapter() {

          @SuppressWarnings("unchecked")
          @Override
          public void widgetSelected(SelectionEvent e) {
            int id = ID_DEFAULT_BUTTON;
            if (e.widget == addButton) id = ID_ADD_BUTTON;
            else if (e.widget == removeButton) id = ID_REMOVE_BUTTON;
            buttonClicked(id);
          }
        };
    defaultButton.addSelectionListener(editListener);
    if (canAdd()) addButton.addSelectionListener(editListener);
    if (canRemove()) removeButton.addSelectionListener(editListener);

    return text;
  }
 public void dispose() {
   super.dispose();
   if (defaultButton != null && !defaultButton.isDisposed()) {
     defaultButton.dispose();
     defaultButton = null;
   }
   if (addButton != null && !addButton.isDisposed()) {
     addButton.dispose();
     addButton = null;
   }
   if (removeButton != null && !removeButton.isDisposed()) {
     removeButton.dispose();
     removeButton = null;
   }
 }