/******************************************************************************* * 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 *******************************************************************************/ package org2.eclipse.php.internal.ui.util; import org.eclipse.core.runtime.Assert; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.swt.SWT; 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.Composite; import org.eclipse.swt.widgets.Label; /** * Factory class to create some SWT resources. */ public class SWTFactory { /** * Returns a width hint for a button control. */ public static int getButtonWidthHint(Button button) { button.setFont(JFaceResources.getDialogFont()); PixelConverter converter = new PixelConverter(button); int widthHint = converter.convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); return Math.max(widthHint, button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); } /** * 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(Button button) { Assert.isNotNull(button); Object gd = button.getLayoutData(); if (gd instanceof GridData) { ((GridData) gd).widthHint = getButtonWidthHint(button); ((GridData) gd).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(Composite parent, String label, Image image) { Button button = new Button(parent, SWT.PUSH); button.setFont(parent.getFont()); if (image != null) { button.setImage(image); } if (label != null) { button.setText(label); } GridData gd = new GridData(); button.setLayoutData(gd); SWTFactory.setButtonDimensionHint(button); return button; } /** * Creates a new label widget * * @param parent * the parent composite to add this label widget to * @param text * the text for the label * @param hspan * the horizontal span to take up in the parent composite * @return the new label * @since 3.2 */ public static Label createLabel(Composite parent, String text, int hspan) { Label l = new Label(parent, SWT.NONE); l.setFont(parent.getFont()); l.setText(text); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = hspan; gd.grabExcessHorizontalSpace = false; l.setLayoutData(gd); return l; } /** * Creates a wrapping label * * @param parent * the parent composite to add this label to * @param text * the text to be displayed in the label * @param hspan * the horizontal span that label should take up in the parent composite * @return a new label that wraps at a specified width * @since 3.3 */ public static Label createWrapLabel(Composite parent, String text, int hspan) { Label l = new Label(parent, SWT.NONE | SWT.WRAP); l.setFont(parent.getFont()); l.setText(text); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = hspan; l.setLayoutData(gd); return l; } /** * Creates a composite that uses the parent's font and has a grid layout * * @param parent * the parent to add the composite to * @param columns * the number of columns the composite should have * @param hspan * the horizontal span the new composite should take up in the parent * @param fill * the fill style of the composite {@link GridData} * @return a new composite with a grid layout * @since 3.3 */ public static Composite createComposite(Composite parent, int columns, int hspan, int fill) { Composite g = new Composite(parent, SWT.NONE); g.setLayout(new GridLayout(columns, false)); g.setFont(parent.getFont()); GridData gd = new GridData(fill); gd.horizontalSpan = hspan; g.setLayoutData(gd); return g; } }