Mercurial > projects > dwt-addons
view dwtx/jface/dialogs/StatusDialog.d @ 192:c3583c6ec027
Added missing default cases for switch statements
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Mon, 03 Nov 2008 22:52:26 +0100 |
parents | ea8ff534f622 |
children |
line wrap: on
line source
/******************************************************************************* * Copyright (c) 2000, 2006 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation * Port to the D programming language: * Frank Benoit <benoit@tionex.de> *******************************************************************************/ module dwtx.jface.dialogs.StatusDialog; import dwtx.jface.dialogs.Dialog; import dwtx.jface.dialogs.TrayDialog; import dwtx.jface.dialogs.IDialogConstants; import dwt.DWT; import dwt.custom.CLabel; import dwt.graphics.Color; import dwt.graphics.Image; import dwt.layout.GridData; import dwt.layout.GridLayout; import dwt.widgets.Button; import dwt.widgets.Composite; import dwt.widgets.Control; import dwt.widgets.Shell; import dwtx.core.runtime.IStatus; import dwtx.core.runtime.Status; import dwtx.jface.resource.JFaceColors; import dwtx.jface.resource.JFaceResources; import dwtx.jface.util.Policy; import dwtx.jface.util.Util; import dwt.dwthelper.utils; /** * An abstract base class for dialogs with a status bar and OK/CANCEL buttons. * The status message is specified in an IStatus which can be of severity ERROR, * WARNING, INFO or OK. The OK button is enabled or disabled depending on the * status. * * @since 3.1 */ public abstract class StatusDialog : TrayDialog { private Button fOkButton; private MessageLine fStatusLine; private IStatus fLastStatus; private String fTitle; private Image fImage; private bool fStatusLineAboveButtons = true; /** * A message line displaying a status. */ private class MessageLine : CLabel { private Color fNormalMsgAreaBackground; /** * Creates a new message line as a child of the given parent. * * @param parent */ public this(Composite parent) { this(parent, DWT.LEFT); } /** * Creates a new message line as a child of the parent and with the * given DWT stylebits. * * @param parent * @param style */ public this(Composite parent, int style) { super(parent, style); fNormalMsgAreaBackground = getBackground(); } /** * Find an image assocated with the status. * * @param status * @return Image */ private Image findImage(IStatus status) { if (status.isOK()) { return null; } else if (status.matches(IStatus.ERROR)) { return JFaceResources.getImage(Dialog.DLG_IMG_MESSAGE_ERROR); } else if (status.matches(IStatus.WARNING)) { return JFaceResources.getImage(Dialog.DLG_IMG_MESSAGE_WARNING); } else if (status.matches(IStatus.INFO)) { return JFaceResources.getImage(Dialog.DLG_IMG_MESSAGE_INFO); } return null; } /** * Sets the message and image to the given status. * * @param status * IStatus or <code>null</code>. <code>null</code> will * set the empty text and no image. */ public void setErrorStatus(IStatus status) { if (status !is null && !status.isOK()) { String message = status.getMessage(); if (message !is null && message.length > 0) { setText(message); // unqualified call of setImage is too ambiguous for // Foundation 1.0 compiler // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=140576 this.outer.setImage(findImage(status)); setBackground(JFaceColors.getErrorBackground(getDisplay())); return; } } setText(""); //$NON-NLS-1$ // unqualified call of setImage is too ambiguous for Foundation 1.0 // compiler // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=140576 this.outer.setImage(null); setBackground(fNormalMsgAreaBackground); } } /** * Creates an instance of a status dialog. * * @param parent * the parent Shell of the dialog */ public this(Shell parent) { super(parent); fLastStatus = new Status(IStatus.OK, Policy.JFACE, IStatus.OK, Util.ZERO_LENGTH_STRING, null); } /** * Specifies whether status line appears to the left of the buttons * (default) or above them. * * @param aboveButtons * if <code>true</code> status line is placed above buttons; if * <code>false</code> to the right */ public void setStatusLineAboveButtons(bool aboveButtons) { fStatusLineAboveButtons = aboveButtons; } /** * Update the dialog's status line to reflect the given status. It is safe * to call this method before the dialog has been opened. * * @param status * the status to set */ protected void updateStatus(IStatus status) { fLastStatus = status; if (fStatusLine !is null && !fStatusLine.isDisposed()) { updateButtonsEnableState(status); fStatusLine.setErrorStatus(status); } } /** * Returns the last status. * * @return IStatus */ public IStatus getStatus() { return fLastStatus; } /** * Updates the status of the ok button to reflect the given status. * Subclasses may override this method to update additional buttons. * * @param status * the status. */ protected void updateButtonsEnableState(IStatus status) { if (fOkButton !is null && !fOkButton.isDisposed()) { fOkButton.setEnabled(!status.matches(IStatus.ERROR)); } } /* * @see Window#create(Shell) */ protected override void configureShell(Shell shell) { super.configureShell(shell); if (fTitle !is null) { shell.setText(fTitle); } } /* * @see Window#create() */ public override void create() { super.create(); if (fLastStatus !is null) { // policy: dialogs are not allowed to come up with an error message if (fLastStatus.matches(IStatus.ERROR)) { // remove the message fLastStatus = new Status(IStatus.ERROR, fLastStatus.getPlugin(), fLastStatus.getCode(), "", fLastStatus.getException()); //$NON-NLS-1$ } updateStatus(fLastStatus); } } /* * @see Dialog#createButtonsForButtonBar(Composite) */ protected override void createButtonsForButtonBar(Composite parent) { fOkButton = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); } /* * @see Dialog#createButtonBar(Composite) */ protected override Control createButtonBar(Composite parent) { Composite composite = new Composite(parent, DWT.NULL); GridLayout layout = new GridLayout(); if (fStatusLineAboveButtons) { layout.numColumns = 1; } else { layout.numColumns = 2; } layout.marginHeight = 0; layout.marginLeft = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); layout.marginWidth = 0; composite.setLayout(layout); composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); if (!fStatusLineAboveButtons && isHelpAvailable()) { createHelpControl(composite); } fStatusLine = new MessageLine(composite); fStatusLine.setAlignment(DWT.LEFT); GridData statusData = new GridData(GridData.FILL_HORIZONTAL); fStatusLine.setErrorStatus(null); if (fStatusLineAboveButtons && isHelpAvailable()) { statusData.horizontalSpan = 2; createHelpControl(composite); } fStatusLine.setLayoutData(statusData); applyDialogFont(composite); /* * Create the rest of the button bar, but tell it not to create a help * button (we've already created it). */ bool helpAvailable = isHelpAvailable(); setHelpAvailable(false); super.createButtonBar(composite); setHelpAvailable(helpAvailable); return composite; } /** * Sets the title for this dialog. * * @param title * the title. */ public void setTitle(String title) { fTitle = title !is null ? title : ""; //$NON-NLS-1$ Shell shell = getShell(); if ((shell !is null) && !shell.isDisposed()) { shell.setText(fTitle); } } /** * Sets the image for this dialog. * * @param image * the image. */ public void setImage(Image image) { fImage = image; Shell shell = getShell(); if ((shell !is null) && !shell.isDisposed()) { shell.setImage(fImage); } } }