/******************************************************************************* * Copyright (c) 2000, 2003 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 *******************************************************************************/ package org.erlide.ui.util; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.DragSource; import org.eclipse.swt.dnd.DropTarget; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Caret; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.ScrollBar; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Widget; /** * Utility class to simplify access to some SWT resources. */ public final class SWTUtil { private SWTUtil() { } /** * Returns the standard display to be used. The method first checks, if the thread * calling this method has an associated disaply. If so, this display is returned. * Otherwise the method returns the default display. */ public static Display getStandardDisplay() { Display display; display = Display.getCurrent(); if (display == null) { display = Display.getDefault(); } return display; } /** * Returns the shell for the given widget. If the widget doesn't represent a SWT * object that manage a shell, <code>null</code> is returned. * * @return the shell for the given widget */ public static Shell getShell(final Widget widget) { if (widget instanceof Control) { return ((Control) widget).getShell(); } if (widget instanceof Caret) { return ((Caret) widget).getParent().getShell(); } if (widget instanceof DragSource) { return ((DragSource) widget).getControl().getShell(); } if (widget instanceof DropTarget) { return ((DropTarget) widget).getControl().getShell(); } if (widget instanceof Menu) { return ((Menu) widget).getParent().getShell(); } if (widget instanceof ScrollBar) { return ((ScrollBar) widget).getParent().getShell(); } return null; } /** * Returns a width hint for a button control. */ public static int getButtonWidthHint(final Button button) { final PixelConverter converter = new PixelConverter(button); final int widthHint = converter .convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); return Math.max(widthHint, button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); } /** * Returns a height hint for a button control. */ public static int getButtonHeightHint(final Button button) { return 30; } /** * Sets width and height hint for the button control. <b>Note:</b> This is a NOP if * the button's layout data is not an instance of <code>GridData</code>. * * @param the * button for which to set the dimension hint */ public static void setButtonDimensionHint(final Button button) { final Object gd = button.getLayoutData(); if (gd instanceof GridData) { final GridData gridData = (GridData) gd; gridData.heightHint = getButtonHeightHint(button); gridData.widthHint = getButtonWidthHint(button); gridData.horizontalAlignment = GridData.FILL; } } /** * Creates and returns a new push button with the given label and/or image. * * @param parent * parent control * @param label * button label or <code>null</code> * @param image * image of <code>null</code> * * @return a new push button */ public static Button createPushButton(final Composite parent, final String label, final Image image) { final Button button = createButton(parent, label, SWT.PUSH); if (image != null) { button.setImage(image); } return button; } /** * Creates and returns a new radio button with the given label. * * @param parent * parent control * @param label * button label or <code>null</code> * * @return a new radio button */ public static Button createRadioButton(final Composite parent, final String label) { final Button button = createButton(parent, label, SWT.RADIO); return button; } /** * @param parent * @param label * @param style * @return */ private static Button createButton(final Composite parent, final String label, final int style) { final Button button = new Button(parent, style); button.setFont(parent.getFont()); if (label != null) { button.setText(label); } final GridData gd = new GridData(); button.setLayoutData(gd); SWTUtil.setButtonDimensionHint(button); return button; } /** * @param parent * @param label * @return */ public static Button createCheckButton(final Composite parent, final String label) { return createButton(parent, label, SWT.CHECK); } /** * Creates and returns a group with the given characteristics * * @param parent * parent control * @param title * title for group or <code>null</code> * @param numColumns * number of columns in group layout * @param fill * {@link GridData} fill style, horizontal, vertical, both or none * * @return the group created */ public static Group createGroup(final Composite parent, final String title, final int numColumns, final int fill) { final Group group = new Group(parent, SWT.NONE); final GridData gd = new GridData(fill); group.setLayoutData(gd); final GridLayout layout = new GridLayout(); layout.numColumns = numColumns; group.setLayout(layout); group.setFont(parent.getFont()); if (title != null) { group.setText(title); } return group; } }