Java tutorial
/******************************************************************************* * Copyright (c) 2000, 2008 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 com.liferay.ide.ui.util; import com.liferay.ide.ui.LiferayUIPlugin; import java.net.URL; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.preference.IPreferenceNode; import org.eclipse.jface.preference.PreferenceDialog; import org.eclipse.jface.preference.PreferenceManager; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.FontMetrics; import org.eclipse.swt.graphics.GC; 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.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Link; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; public class SWTUtil { private static FontMetrics fontMetrics; protected static void initializeDialogUnits(Control testControl) { // Compute and store a font metric GC gc = new GC(testControl); gc.setFont(JFaceResources.getDialogFont()); fontMetrics = gc.getFontMetrics(); gc.dispose(); } /** * Returns a width hint for a button control. */ protected static int getButtonWidthHint(Button button) { int widthHint = Dialog.convertHorizontalDLUsToPixels(fontMetrics, IDialogConstants.BUTTON_WIDTH); return Math.max(widthHint, button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); } /** * Create a new button with the standard size. * * @param comp * the component to add the button to * @param label * the button label * @return a button */ public static Button createButton(Composite comp, String label) { Button b = new Button(comp, SWT.PUSH); b.setText(label); if (fontMetrics == null) { initializeDialogUnits(comp); } GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); data.widthHint = getButtonWidthHint(b); b.setLayoutData(data); return b; } public static boolean showPreferencePage(String id, Shell shell) { PreferenceManager manager = PlatformUI.getWorkbench().getPreferenceManager(); IPreferenceNode node = manager.find("org.eclipse.jdt.ui.preferences.JavaBasePreferencePage") //$NON-NLS-1$ .findSubNode(id); PreferenceManager manager2 = new PreferenceManager(); manager2.addToRoot(node); PreferenceDialog dialog = new PreferenceDialog(shell, manager2); dialog.create(); return (dialog.open() == Window.OK); } public static void selectItem(Combo combo, String item) { if (combo == null || item == null) return; String[] items = combo.getItems(); if (items != null && items.length > 0) { for (int i = 0; i < items.length; i++) { if (item.equals(items[i])) { combo.select(i); return; } } } } /** * 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 * @param wrapwidth * the width hint that the label should wrap at * @return a new label that wraps at a specified width */ public static Label createWrapLabel(Composite parent, String text, int hspan, int wrapwidth) { Label l = new Label(parent, SWT.WRAP); l.setFont(parent.getFont()); l.setText(text); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = hspan; gd.widthHint = wrapwidth; l.setLayoutData(gd); return l; } /** * creates a vertical spacer for separating components * * @param comp * @param numlines */ public static void createVerticalSpacer(Composite comp, int numlines, int hspan) { Label lbl = new Label(comp, SWT.NONE); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.heightHint = numlines; gd.horizontalSpan = hspan; lbl.setLayoutData(gd); } public static void createHorizontalSpacer(Composite comp, int hSpan) { Label l = new Label(comp, SWT.NONE); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = hSpan; l.setLayoutData(gd); } public static Link createHyperLink(Composite parent, int style, String text, int hspan, final String url) { final Link link = createLink(parent, style, text, hspan); if (url != null) { link.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { try { PlatformUI.getWorkbench().getBrowserSupport().getExternalBrowser().openURL(new URL(url)); } catch (Exception e1) { LiferayUIPlugin.logError("Could not open external browser.", e1); //$NON-NLS-1$ } } }); } return link; } /** * Creates a Composite widget * * @param parent * the parent composite to add this composite to * @param columns * the number of columns within the composite * @param hspan * the horizontal span the composite should take up on the parent * @param fill * the style for how this composite should fill into its parent Can be one of * <code>GridData.FILL_HORIZONAL</code>, <code>GridData.FILL_BOTH</code> or * <code>GridData.FILL_VERTICAL</code> * @return the new group */ 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; } /** * 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 */ public static Label createLabel(Composite parent, String text, int hspan) { return createLabel(parent, SWT.NONE, text, hspan); } public static Label createLabel(Composite parent, int style, String text, int hspan) { Label l = new Label(parent, style); l.setFont(parent.getFont()); l.setText(text); GridData gd = new GridData(); gd.horizontalSpan = hspan; l.setLayoutData(gd); return l; } public static Link createLink(Composite parent, int style, String text, int hspan) { Link l = new Link(parent, style); l.setFont(parent.getFont()); l.setText(text); GridData gd = new GridData(); gd.horizontalSpan = hspan; l.setLayoutData(gd); return l; } /** * Creates a Composite widget * * @param parent * the parent composite to add this composite to * @param columns * the number of columns within the composite * @param hspan * the horizontal span the composite should take up on the parent * @param fill * the style for how this composite should fill into its parent Can be one of * <code>GridData.FILL_HORIZONAL</code>, <code>GridData.FILL_BOTH</code> or * <code>GridData.FILL_VERTICAL</code> * @param marginwidth * the width of the margin to place around the composite (default is 5, specified by GridLayout) * @param marginheight * the height of the margin to place around the composite (default is 5, specified by GridLayout) * @return the new group */ public static Composite createComposite(Composite parent, int columns, int hspan, int fill, int marginwidth, int marginheight) { Composite g = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(columns, false); layout.marginWidth = marginwidth; layout.marginHeight = marginheight; g.setLayout(layout); g.setFont(parent.getFont()); GridData gd = new GridData(fill); gd.horizontalSpan = hspan; g.setLayoutData(gd); return g; } /** * 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 or <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); if (fontMetrics == null) { initializeDialogUnits(parent); } setButtonDimensionHint(button); return button; } /** * 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) { Object gd = button.getLayoutData(); if (gd instanceof GridData) { ((GridData) gd).widthHint = getButtonWidthHint(button); ((GridData) gd).horizontalAlignment = GridData.FILL; } } /** * Creates a new text widget * * @param parent * the parent composite to add this text widget to * @param hspan * the horizontal span to take up on the parent composite * @return the new text widget */ public static Text createSingleText(Composite parent, int hspan) { Text t = new Text(parent, SWT.SINGLE | SWT.BORDER); t.setFont(parent.getFont()); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = hspan; t.setLayoutData(gd); return t; } /** * Creates a check box button using the parents' font * * @param parent * the parent to add the button to * @param label * the label for the button * @param image * the image for the button * @param checked * the initial checked state of the button * @param hspan * the horizontal span to take up in the parent composite * @return a new checked button set to the initial checked state * @since 3.3 */ public static Button createCheckButton(Composite parent, String label, Image image, boolean checked, int hspan) { Button button = new Button(parent, SWT.CHECK); button.setFont(parent.getFont()); button.setSelection(checked); if (image != null) { button.setImage(image); } if (label != null) { button.setText(label); } GridData gd = new GridData(); gd.horizontalSpan = hspan; button.setLayoutData(gd); if (fontMetrics == null) { initializeDialogUnits(parent); } setButtonDimensionHint(button); return button; } public static Composite createTopComposite(Composite parent, int numColumns) { Composite composite = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); layout.numColumns = numColumns; composite.setLayout(layout); GridData data = new GridData(); data.verticalAlignment = GridData.FILL; data.horizontalAlignment = GridData.FILL; data.widthHint = 300; composite.setLayoutData(data); return composite; } public static Button createRadioButton(Composite parent, String label, Image image, boolean checked, int hspan) { Button button = new Button(parent, SWT.RADIO); button.setFont(parent.getFont()); button.setSelection(checked); if (image != null) { button.setImage(image); } if (label != null) { button.setText(label); } GridData gd = new GridData(); gd.horizontalSpan = hspan; button.setLayoutData(gd); if (fontMetrics == null) { initializeDialogUnits(parent); } setButtonDimensionHint(button); return button; } public static Group createGroup(Composite parent, String text, int numColumns) { Group group = new Group(parent, SWT.NULL); group.setText(text); GridLayout layout = new GridLayout(numColumns, false); group.setLayout(layout); GridData data = new GridData(); data.verticalAlignment = GridData.FILL; data.horizontalAlignment = GridData.FILL; data.widthHint = 300; group.setLayoutData(data); return group; } public static Text createText(Composite parent, int hspan) { return createText(parent, SWT.SINGLE | SWT.BORDER, hspan); } public static Text createText(Composite parent, int style, int hspan) { Text text = new Text(parent, style); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = hspan; text.setLayoutData(gd); return text; } public static void createSeparator(Composite parent, int hspan) { Label label = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL); GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, false, hspan, 1); label.setLayoutData(gd); } }