Mercurial > projects > dwt-addons
view dwtx/jface/dialogs/IconAndMessageDialog.d @ 43:ea8ff534f622
Fix override and super aliases
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Fri, 11 Apr 2008 01:24:25 +0200 |
parents | 644f1334b451 |
children | 46a6e0e6ccd4 |
line wrap: on
line source
/******************************************************************************* * Copyright (c) 2000, 2007 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 * Stefan Xenos, IBM - bug 156790: Adopt GridLayoutFactory within JFace * Port to the D programming language: * Frank Benoit <benoit@tionex.de> *******************************************************************************/ module dwtx.jface.dialogs.IconAndMessageDialog; import dwtx.jface.dialogs.Dialog; import dwtx.jface.dialogs.IDialogConstants; import dwt.DWT; import dwt.accessibility.AccessibleAdapter; import dwt.accessibility.AccessibleEvent; import dwt.graphics.Image; import dwt.graphics.Point; import dwt.widgets.Composite; import dwt.widgets.Control; import dwt.widgets.Display; import dwt.widgets.Label; import dwt.widgets.Shell; import dwtx.jface.layout.GridDataFactory; import dwtx.jface.layout.GridLayoutFactory; import dwtx.jface.layout.LayoutConstants; import dwtx.jface.resource.JFaceResources; import dwt.dwthelper.utils; import dwt.dwthelper.Runnable; /** * The IconAndMessageDialog is the abstract superclass of dialogs that have an * icon and a message as the first two widgets. In this dialog the icon and * message are direct children of the shell in order that they can be read by * accessibility tools more easily. */ public abstract class IconAndMessageDialog : Dialog { /** * Message (a localized string). */ protected String message; /** * Message label is the label the message is shown on. */ protected Label messageLabel; /** * Return the label for the image. */ protected Label imageLabel; /** * Constructor for IconAndMessageDialog. * * @param parentShell * the parent shell, or <code>null</code> to create a top-level * shell */ public this(Shell parentShell) { super(parentShell); } /** * Create the area the message will be shown in. * <p> * The parent composite is assumed to use GridLayout as its layout manager, * since the parent is typically the composite created in * {@link Dialog#createDialogArea}. * </p> * @param composite * The composite to parent from. * @return Control */ protected Control createMessageArea(Composite composite) { // create composite // create image Image image = getImage(); if (image !is null) { imageLabel = new Label(composite, DWT.NULL); image.setBackground(imageLabel.getBackground()); imageLabel.setImage(image); addAccessibleListeners(imageLabel, image); GridDataFactory.fillDefaults().align_(DWT.CENTER, DWT.BEGINNING) .applyTo(imageLabel); } // create message if (message !is null) { messageLabel = new Label(composite, getMessageLabelStyle()); messageLabel.setText(message); GridDataFactory .fillDefaults() .align_(DWT.FILL, DWT.BEGINNING) .grab(true, false) .hint( convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH), DWT.DEFAULT).applyTo(messageLabel); } return composite; } private String getAccessibleMessageFor(Image image) { if (image.opEquals(getErrorImage())) { return JFaceResources.getString("error");//$NON-NLS-1$ } if (image.opEquals(getWarningImage())) { return JFaceResources.getString("warning");//$NON-NLS-1$ } if (image.opEquals(getInfoImage())) { return JFaceResources.getString("info");//$NON-NLS-1$ } if (image.opEquals(getQuestionImage())) { return JFaceResources.getString("question"); //$NON-NLS-1$ } return null; } /** * Add an accessible listener to the label if it can be inferred from the * image. * * @param label * @param image */ private void addAccessibleListeners(Label label, Image image) { label.getAccessible().addAccessibleListener(new class(image) AccessibleAdapter { Image image_; this(Image i){ image_ = i; } public void getName(AccessibleEvent event) { String accessibleMessage = getAccessibleMessageFor(image_); if (accessibleMessage is null) { return; } event.result = accessibleMessage; } }); } /** * Returns the style for the message label. * * @return the style for the message label * * @since 3.0 */ protected int getMessageLabelStyle() { return DWT.WRAP; } /* * @see Dialog.createButtonBar() */ protected override Control createButtonBar(Composite parent) { Composite composite = new Composite(parent, DWT.NONE); GridLayoutFactory.fillDefaults().numColumns(0) // this is incremented // by createButton .equalWidth(true).applyTo(composite); GridDataFactory.fillDefaults().align_(DWT.END, DWT.CENTER).span( 2, 1).applyTo(composite); composite.setFont(parent.getFont()); // Add the buttons to the button bar. createButtonsForButtonBar(composite); return composite; } /** * Returns the image to display beside the message in this dialog. * <p> * Subclasses may override. * </p> * * @return the image to display beside the message * @since 2.0 */ protected abstract Image getImage(); /* * @see Dialog.createContents(Composite) */ protected override Control createContents(Composite parent) { // initialize the dialog units initializeDialogUnits(parent); Point defaultMargins = LayoutConstants.getMargins(); Point defaultSpacing = LayoutConstants.getSpacing(); GridLayoutFactory.fillDefaults().margins(defaultMargins.x, defaultMargins.y * 3 / 2).spacing(defaultSpacing.x * 2, defaultSpacing.y).numColumns(getColumnCount()).applyTo( parent); GridDataFactory.fillDefaults().grab(true, true).applyTo(parent); createDialogAndButtonArea(parent); return parent; } /** * Get the number of columns in the layout of the Shell of the dialog. * * @return int * @since 3.3 */ int getColumnCount() { return 2; } /** * Create the dialog area and the button bar for the receiver. * * @param parent */ protected void createDialogAndButtonArea(Composite parent) { // create the dialog area and button bar dialogArea = createDialogArea(parent); buttonBar = createButtonBar(parent); // Apply to the parent so that the message gets it too. applyDialogFont(parent); } /** * Return the <code>Image</code> to be used when displaying an error. * * @return image the error image */ public Image getErrorImage() { return getSWTImage(DWT.ICON_ERROR); } /** * Return the <code>Image</code> to be used when displaying a warning. * * @return image the warning image */ public Image getWarningImage() { return getSWTImage(DWT.ICON_WARNING); } /** * Return the <code>Image</code> to be used when displaying information. * * @return image the information image */ public Image getInfoImage() { return getSWTImage(DWT.ICON_INFORMATION); } /** * Return the <code>Image</code> to be used when displaying a question. * * @return image the question image */ public Image getQuestionImage() { return getSWTImage(DWT.ICON_QUESTION); } /** * Get an <code>Image</code> from the provide DWT image constant. * * @param imageID * the DWT image constant * @return image the image */ private Image getSWTImage(int imageID) { Shell shell = getShell(); Display display; if (shell is null) { shell = getParentShell(); } if (shell is null) { display = Display.getCurrent(); } else { display = shell.getDisplay(); } Image[1] image; display.syncExec(new class(display,imageID) Runnable { int imageID_; Display display_; this(Display a,int b){ display_=a; imageID_=b; } public void run() { image[0] = display_.getSystemImage(imageID_); } }); return image[0]; } }