/*
   * Creates a button with a help image. This is only used if there
   * is an image available.
   */
  private ToolBar createLocalizationImageButton(Composite parent, Image image) {
    ToolBar toolBar = new ToolBar(parent, SWT.FLAT | SWT.NO_FOCUS);
    ((GridLayout) parent.getLayout()).numColumns++;
    toolBar.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, false, false));
    final Cursor cursor = new Cursor(parent.getDisplay(), SWT.CURSOR_HAND);
    toolBar.setCursor(cursor);
    toolBar.addDisposeListener(
        new DisposeListener() {
          public void widgetDisposed(DisposeEvent e) {
            cursor.dispose();
          }
        });

    final ToolItem item = new ToolItem(toolBar, SWT.NONE);
    item.setImage(image);

    languageSet.associate(
        "localizationToolTip", //$NON-NLS-1$
        new TranslatableTextInput(
            Activator.getLocalizableText(
                "LocalizableTrayDialog.localizationToolTip")) { //$NON-NLS-1$
          @Override
          public void updateControl(String text) {
            item.setToolTipText(text);
          }
        });

    item.addSelectionListener(
        new SelectionAdapter() {
          public void widgetSelected(SelectionEvent e) {
            localizationPressed();
          }
        });
    return toolBar;
  }
 /*
  * Called when the user selects the action to localize this dialog.
  * This will bring up a dialog that can be used to localize this dialog.
  */
 protected void localizationPressed() {
   Dialog dialog =
       new LocalizeDialog(
           getShell(),
           TranslatableNLS.bind(Messages.LocalizeDialog_Title_DialogPart, getShell().getText()),
           languageSet,
           Activator.getDefault().getMenuTextSet());
   dialog.open();
 }
public class LocalizableTrayDialog extends TrayDialog {

  private static ImageDescriptor localizationImageDescriptor =
      Activator.createImageDescriptor("icons/babel.gif"); // $NON-NLS-1$
  protected TranslatableSet languageSet = new TranslatableSet();

  /**
   * Creates a tray dialog instance. Note that the window will have no visual representation (no
   * widgets) until it is told to open.
   *
   * @param shell the parent shell, or <code>null</code> to create a top-level shell
   */
  protected LocalizableTrayDialog(Shell shell) {
    super(shell);
  }

  /**
   * Creates a tray dialog with the given parent.
   *
   * @param parentShell the object that returns the current parent shell
   */
  protected LocalizableTrayDialog(IShellProvider parentShell) {
    super(parentShell);
  }

  /* (non-Javadoc)
   * @see org.eclipse.jface.dialogs.Dialog#createButtonBar(org.eclipse.swt.widgets.Composite)
   */
  @Override
  protected Control createButtonBar(Composite parent) {
    Composite composite = new Composite(parent, SWT.NONE);
    GridLayout layout = new GridLayout();
    layout.marginWidth = 0;
    layout.marginHeight = 0;
    layout.horizontalSpacing = 0;
    composite.setLayout(layout);
    composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
    composite.setFont(parent.getFont());

    // create the localization button
    Control localizationControl = createLocalizationControl(composite);
    ((GridData) localizationControl.getLayoutData()).horizontalIndent =
        convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);

    Control buttonSection = super.createButtonBar(composite);
    ((GridData) buttonSection.getLayoutData()).grabExcessHorizontalSpace = true;
    return composite;
  }

  /**
   * Creates a new help control that provides access to context help.
   *
   * <p>The <code>TrayDialog</code> implementation of this method creates the control, registers it
   * for selection events including selection, Note that the parent's layout is assumed to be a
   * <code>GridLayout</code> and the number of columns in this layout is incremented. Subclasses may
   * override.
   *
   * @param parent the parent composite
   * @return the help control
   */
  protected Control createLocalizationControl(Composite parent) {
    Image image = localizationImageDescriptor.createImage();
    if (image != null) {
      return createLocalizationImageButton(parent, image);
    }
    return createLocalizationLink(parent);
  }

  /*
   * Creates a button with a help image. This is only used if there
   * is an image available.
   */
  private ToolBar createLocalizationImageButton(Composite parent, Image image) {
    ToolBar toolBar = new ToolBar(parent, SWT.FLAT | SWT.NO_FOCUS);
    ((GridLayout) parent.getLayout()).numColumns++;
    toolBar.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, false, false));
    final Cursor cursor = new Cursor(parent.getDisplay(), SWT.CURSOR_HAND);
    toolBar.setCursor(cursor);
    toolBar.addDisposeListener(
        new DisposeListener() {
          public void widgetDisposed(DisposeEvent e) {
            cursor.dispose();
          }
        });

    final ToolItem item = new ToolItem(toolBar, SWT.NONE);
    item.setImage(image);

    languageSet.associate(
        "localizationToolTip", //$NON-NLS-1$
        new TranslatableTextInput(
            Activator.getLocalizableText(
                "LocalizableTrayDialog.localizationToolTip")) { //$NON-NLS-1$
          @Override
          public void updateControl(String text) {
            item.setToolTipText(text);
          }
        });

    item.addSelectionListener(
        new SelectionAdapter() {
          public void widgetSelected(SelectionEvent e) {
            localizationPressed();
          }
        });
    return toolBar;
  }

  /*
   * Creates a help link. This is used when there is no help image
   * available.
   */
  private Link createLocalizationLink(Composite parent) {
    Link link = new Link(parent, SWT.WRAP | SWT.NO_FOCUS);
    ((GridLayout) parent.getLayout()).numColumns++;
    link.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, false, false));
    link.setText("<a>" + IDialogConstants.HELP_LABEL + "</a>"); // $NON-NLS-1$ //$NON-NLS-2$
    link.setToolTipText(IDialogConstants.HELP_LABEL);
    link.addSelectionListener(
        new SelectionAdapter() {
          public void widgetSelected(SelectionEvent e) {
            localizationPressed();
          }
        });
    return link;
  }

  /*
   * Called when the user selects the action to localize this dialog.
   * This will bring up a dialog that can be used to localize this dialog.
   */
  protected void localizationPressed() {
    Dialog dialog =
        new LocalizeDialog(
            getShell(),
            TranslatableNLS.bind(Messages.LocalizeDialog_Title_DialogPart, getShell().getText()),
            languageSet,
            Activator.getDefault().getMenuTextSet());
    dialog.open();
  }
}