/**
   * Returns the preview control for this field editor.
   *
   * @return the preview control
   */
  public Control getPreviewControl() {
    if (previewer == null) {
      return null;
    }

    return previewer.getControl();
  }
  @Override
  protected void doFillIntoGrid(Composite parent, int numColumns) {
    getLabelControl(parent);

    valueControl = getValueControl(parent);

    GridData gd = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
    gd.horizontalSpan = numColumns - getNumberOfControls() + 1;
    valueControl.setLayoutData(gd);
    if (previewText != null) {
      previewer = new DefaultPreviewer(previewText, parent);
      gd = new GridData(GridData.FILL_HORIZONTAL);
      gd.heightHint = previewer.getPreferredExtent();
      gd.widthHint = previewer.getPreferredExtent();
      previewer.getControl().setLayoutData(gd);
    }

    changeFontButton = getChangeControl(parent);
    gd = new GridData();
    int widthHint = convertHorizontalDLUsToPixels(changeFontButton, IDialogConstants.BUTTON_WIDTH);
    gd.widthHint =
        Math.max(widthHint, changeFontButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
    changeFontButton.setLayoutData(gd);
  }
  /**
   * Updates the change font button and the previewer to reflect the newly selected font.
   *
   * @param font The FontData[] to update with.
   */
  private void updateFont(FontData font[]) {
    FontData[] bestFont =
        JFaceResources.getFontRegistry().filterData(font, valueControl.getDisplay());

    // if we have nothing valid do as best we can
    if (bestFont == null) {
      bestFont = getDefaultFontData();
    }

    // Now cache this value in the receiver
    this.chosenFont = bestFont;

    if (valueControl != null) {
      valueControl.setText(StringConverter.asString(chosenFont[0]));
    }
    if (previewer != null) {
      previewer.setFont(bestFont);
    }
  }
 /**
  * Returns the preferred preview height.
  *
  * @return the height, or <code>-1</code> if no previewer is installed
  */
 public int getPreferredPreviewHeight() {
   if (previewer == null) {
     return -1;
   }
   return previewer.getPreferredExtent();
 }
 @Override
 protected void applyFont() {
   if (chosenFont != null && previewer != null) {
     previewer.setFont(chosenFont);
   }
 }