1 package net.sourceforge.phpdt.internal.ui.dialog;
 
   3 import org.eclipse.core.runtime.IStatus;
 
   4 import org.eclipse.jface.dialogs.Dialog;
 
   5 import org.eclipse.jface.dialogs.IDialogConstants;
 
   6 import org.eclipse.swt.SWT;
 
   7 import org.eclipse.swt.graphics.Image;
 
   8 import org.eclipse.swt.layout.GridData;
 
   9 import org.eclipse.swt.layout.GridLayout;
 
  10 import org.eclipse.swt.widgets.Button;
 
  11 import org.eclipse.swt.widgets.Composite;
 
  12 import org.eclipse.swt.widgets.Control;
 
  13 import org.eclipse.swt.widgets.Shell;
 
  16  * An abstract base class for dialogs with a status bar and ok/cancel buttons.
 
  17  * The status message must be passed over as StatusInfo object and can be
 
  18  * an error, warning or ok. The OK button is enabled or disabled depending
 
  21 public abstract class StatusDialog extends Dialog  {
 
  23         private Button fOkButton;
 
  24         private MessageLine fStatusLine;
 
  25         private IStatus fLastStatus;
 
  26         private String fTitle;
 
  29         private boolean fStatusLineAboveButtons;
 
  32          * Creates an instane of a status dialog.
 
  34         public StatusDialog(Shell parent) {
 
  36                 fStatusLineAboveButtons= false;
 
  40          * Specifies whether status line appears to the left of the buttons (default)
 
  43          * @param aboveButtons if <code>true</code> status line is placed above buttons; if
 
  44          *      <code>false</code> to the right
 
  46         public void setStatusLineAboveButtons(boolean aboveButtons) {
 
  47                 fStatusLineAboveButtons= aboveButtons;
 
  51          * Update the dialog's status line to reflect the given status.
 
  52          * It is save to call this method before the dialog has been opened.
 
  54         protected void updateStatus(IStatus status) {
 
  56                 if (fStatusLine != null && !fStatusLine.isDisposed()) {
 
  57                         updateButtonsEnableState(status);
 
  58                         fStatusLine.setErrorStatus(status);
 
  63          * Returns the last status.
 
  65         public IStatus getStatus() {
 
  70          * Updates the status of the ok button to reflect the given status.
 
  71          * Subclasses may override this method to update additional buttons.
 
  72          * @param status the status.
 
  74         protected void updateButtonsEnableState(IStatus status) {
 
  75                 if (fOkButton != null && !fOkButton.isDisposed())
 
  76                         fOkButton.setEnabled(!status.matches(IStatus.ERROR));
 
  80          * @see Window#create(Shell)
 
  82         protected void configureShell(Shell shell) {
 
  83                 super.configureShell(shell);
 
  85                         shell.setText(fTitle);
 
  89          * @see Window#create()
 
  91         public void create() {
 
  93                 if (fLastStatus != null) {
 
  94                         // policy: dialogs are not allowed to come up with an error message
 
  95                         if (fLastStatus.matches(IStatus.ERROR)) {
 
  96                                 StatusInfo status= new StatusInfo();
 
  97                                 status.setError(""); //$NON-NLS-1$
 
 100                         updateStatus(fLastStatus);
 
 105          * @see Dialog#createButtonsForButtonBar(Composite)
 
 107         protected void createButtonsForButtonBar(Composite parent) {
 
 108                 fOkButton= createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
 
 109                 createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
 
 113          * @see Dialog#createButtonBar(Composite)
 
 115         protected Control createButtonBar(Composite parent) {
 
 116                 Composite composite= new Composite(parent, SWT.NULL);
 
 117                 GridLayout layout= new GridLayout();
 
 118                 layout.numColumns= 1;
 
 119                 layout.marginHeight= 0;
 
 120                 layout.marginWidth= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
 
 121                 composite.setLayout(layout);
 
 122                 composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 
 124                 fStatusLine= new MessageLine(composite);
 
 125                 fStatusLine.setAlignment(SWT.LEFT);
 
 126                 fStatusLine.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 
 127                 fStatusLine.setErrorStatus(null); //$NON-NLS-1$
 
 129                 super.createButtonBar(composite);
 
 134          * Sets the title for this dialog.
 
 135          * @param title the title.
 
 137         public void setTitle(String title) {
 
 138                 fTitle= title != null ? title : ""; //$NON-NLS-1$
 
 139                 Shell shell= getShell();
 
 140                 if ((shell != null) && !shell.isDisposed())
 
 141                         shell.setText(fTitle);
 
 145          * Sets the image for this dialog.
 
 146          * @param image the image.
 
 148         public void setImage(Image image) {
 
 150                 Shell shell= getShell();
 
 151                 if ((shell != null) && !shell.isDisposed())
 
 152                         shell.setImage(fImage);