protected Control createDialogArea(Composite parent) {
    Composite composite = (Composite) super.createDialogArea(parent);

    Composite inner = new Composite(composite, SWT.NONE);
    GridLayout layout = new GridLayout();
    layout.marginHeight = 0;
    layout.marginWidth = 0;
    layout.numColumns = 1;
    inner.setLayout(layout);

    int widthHint = convertWidthInCharsToPixels(50);

    GridData data = new GridData(GridData.FILL_HORIZONTAL);
    data.widthHint = widthHint;

    if (fExistingFolders.contains(fCurrProject)) {
      fContainerDialogField.doFillIntoGrid(inner, 2);
    } else {
      fUseProjectButton.doFillIntoGrid(inner, 1);
      fUseFolderButton.doFillIntoGrid(inner, 1);
      fContainerDialogField.getTextControl(inner);

      int horizontalIndent = convertWidthInCharsToPixels(3);
      data.horizontalIndent = horizontalIndent;
    }
    Text text = fContainerDialogField.getTextControl(null);
    text.setLayoutData(data);
    TextFieldNavigationHandler.install(text);

    fContainerDialogField.postSetFocusOnDialogField(parent.getDisplay());
    applyDialogFont(composite);
    return composite;
  }
  protected void checkIfPathValid() {
    fFolder = null;
    IContainer folder = null;
    if (fUseFolderButton.isSelected()) {
      String pathStr = fContainerDialogField.getText();
      if (pathStr.length() == 0) {
        fContainerFieldStatus.setError(NewWizardMessages.NewSourceFolderDialog_error_enterpath);
        return;
      }
      IPath path = fCurrProject.getFullPath().append(pathStr);
      IWorkspace workspace = fCurrProject.getWorkspace();

      IStatus pathValidation = workspace.validatePath(path.toString(), IResource.FOLDER);
      if (!pathValidation.isOK()) {
        fContainerFieldStatus.setError(
            Messages.format(
                NewWizardMessages.NewSourceFolderDialog_error_invalidpath,
                pathValidation.getMessage()));
        return;
      }
      folder = fCurrProject.getFolder(pathStr);
    } else {
      folder = fCurrProject;
    }
    if (isExisting(folder)) {
      fContainerFieldStatus.setError(NewWizardMessages.NewSourceFolderDialog_error_pathexists);
      return;
    }
    fContainerFieldStatus.setOK();
    fFolder = folder;
  }
  public NewSourceFolderDialog(
      Shell parent,
      String title,
      IProject project,
      List existingFolders,
      BPListElement entryToEdit) {
    super(parent);
    setTitle(title);

    fContainerFieldStatus = new StatusInfo();

    SourceContainerAdapter adapter = new SourceContainerAdapter();

    fUseProjectButton = new SelectionButtonDialogField(SWT.RADIO);
    fUseProjectButton.setLabelText(NewWizardMessages.NewSourceFolderDialog_useproject_button);
    fUseProjectButton.setDialogFieldListener(adapter);

    fUseFolderButton = new SelectionButtonDialogField(SWT.RADIO);
    fUseFolderButton.setLabelText(NewWizardMessages.NewSourceFolderDialog_usefolder_button);
    fUseFolderButton.setDialogFieldListener(adapter);

    fContainerDialogField = new StringDialogField();
    fContainerDialogField.setDialogFieldListener(adapter);
    fContainerDialogField.setLabelText(NewWizardMessages.NewSourceFolderDialog_sourcefolder_label);

    fUseFolderButton.attachDialogField(fContainerDialogField);

    fFolder = null;
    fExistingFolders = existingFolders;
    fCurrProject = project;

    boolean useFolders = true;
    if (entryToEdit == null) {
      fContainerDialogField.setText(""); // $NON-NLS-1$
    } else {
      IPath editPath = entryToEdit.getPath().removeFirstSegments(1);
      fContainerDialogField.setText(editPath.toString());
      useFolders = !editPath.isEmpty();
    }
    fUseFolderButton.setSelection(useFolders);
    fUseProjectButton.setSelection(!useFolders);
  }