Java tutorial
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ package org.apache.directory.studio.common.ui.widgets; import org.apache.directory.studio.common.ui.CommonUIConstants; import org.apache.directory.studio.common.ui.CommonUIPlugin; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.fieldassist.ControlDecoration; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.swt.SWT; import org.eclipse.swt.events.VerifyEvent; import org.eclipse.swt.events.VerifyListener; import org.eclipse.swt.graphics.FontMetrics; import org.eclipse.swt.graphics.GC; 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.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Link; import org.eclipse.swt.widgets.Text; /** * This class provides utility methods to create SWT widgets. * * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> */ public class BaseWidgetUtils { /** * Creates a SWT {@link Group} under the given parent. * * @param parent the parent * @param label the label of the group * @param span the horizontal span * @return the created group */ public static Group createGroup(Composite parent, String label, int span) { Group group = new Group(parent, SWT.NONE); GridData gridData = new GridData(GridData.FILL_BOTH); gridData.horizontalSpan = span; group.setLayoutData(gridData); if (label != null) { group.setText(label); } group.setLayout(new GridLayout()); return group; } /** * Creates a SWT {@link Composite} under the given parent. * A GridLayout with the given number of columns is used. * * @param parent the parent * @param columnCount the number of columns * @param span the horizontal span * @return the created composite */ public static Composite createColumnContainer(Composite parent, int columnCount, int span) { return createColumnContainer(parent, columnCount, false, span); } /** * Creates a SWT {@link Composite} under the given parent. * A GridLayout with the given number of columns is used. * * @param parent the parent * @param columnCount the number of columns * @param makeColumnsEqualWidth if the columns width should be equal * @param span the horizontal span * @return the created composite */ public static Composite createColumnContainer(Composite parent, int columnCount, boolean makeColumnsEqualWidth, int span) { Composite container = new Composite(parent, SWT.NONE); GridLayout gridLayout = new GridLayout(columnCount, makeColumnsEqualWidth); gridLayout.marginHeight = gridLayout.marginWidth = 0; container.setLayout(gridLayout); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = span; container.setLayoutData(gridData); return container; } /** * Creates a SWT {@link Label} under the given parent. * * @param parent the parent * @param text the label's text * @param span the horizontal span * @return the created label */ public static Label createLabel(Composite parent, String text, int span) { Label label = new Label(parent, SWT.NONE); GridData gridData = new GridData(); gridData.horizontalSpan = span; label.setLayoutData(gridData); label.setText(text); return label; } /** * Creates a SWT {@link Label} under the given parent. * The label is created with the SWT.WRAP style to enable line wrapping. * * @param parent the parent * @param text the label's text * @param span the horizontal span * @return the created label */ public static Label createWrappedLabel(Composite parent, String text, int span) { Label label = new Label(parent, SWT.WRAP); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = span; gridData.widthHint = 100; label.setLayoutData(gridData); label.setText(text); return label; } /** * Creates a SWT {@link Text} under the given parent. * The created text control is modifiable. * * @param parent the parent * @param text the initial text * @param span the horizontal span * @return the created text */ public static Text createText(Composite parent, String text, int span) { Text textWidget = new Text(parent, SWT.NONE | SWT.BORDER); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = span; textWidget.setLayoutData(gridData); textWidget.setText(text); return textWidget; } /** * Creates a SWT {@link Text} under the given parent. * The created text control is modifiable. * * @param parent the parent * @param text the initial text * @param textWidth the width of the text control * @param span the horizontal span * @return the created text */ public static Text createText(Composite parent, String text, int textWidth, int span) { Text textWidget = new Text(parent, SWT.NONE | SWT.BORDER); GridData gridData = new GridData(); gridData.horizontalSpan = span; gridData.widthHint = 9 * textWidth; textWidget.setLayoutData(gridData); textWidget.setText(text); textWidget.setTextLimit(textWidth); return textWidget; } /** * Creates a SWT {@link Text} under the given parent. * The created text control is created with the SWT.PASSWORD style. * * @param parent the parent * @param text the initial text * @param span the horizontal span * @return the created text */ public static Text createPasswordText(Composite parent, String text, int span) { Text textWidget = new Text(parent, SWT.NONE | SWT.BORDER | SWT.PASSWORD); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = span; textWidget.setLayoutData(gridData); textWidget.setText(text); return textWidget; } /** * Creates a SWT {@link Text} under the given parent. * The created text control is created with the SWT.PASSWORD and * SWT.READ_ONLY style. So the created controls is not modifiable. * * @param parent the parent * @param text the initial text * @param span the horizontal span * @return the created text */ public static Text createReadonlyPasswordText(Composite parent, String text, int span) { Text textWidget = new Text(parent, SWT.NONE | SWT.BORDER | SWT.PASSWORD | SWT.READ_ONLY); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = span; textWidget.setLayoutData(gridData); textWidget.setEditable(false); textWidget.setBackground(parent.getBackground()); textWidget.setText(text); return textWidget; } /** * Creates a SWT {@link Text} under the given parent. * The created text control behaves like a label: it has no border, * a grayed background and is not modifiable. * But the text is selectable and could be copied. * * @param parent the parent * @param text the initial text * @param span the horizontal span * @return the created text */ public static Text createLabeledText(Composite parent, String text, int span) { Text textWidget = new Text(parent, SWT.NONE); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = span; textWidget.setLayoutData(gridData); textWidget.setEditable(false); textWidget.setBackground(parent.getBackground()); textWidget.setText(text); return textWidget; } /** * Creates a SWT {@link Text} under the given parent. * The created text control behaves like a label: it has no border, * a grayed background and is not modifiable. * But the text is selectable and could be copied. * * @param parent the parent * @param text the initial text * @param span the horizontal span * @param widthHint the width hint * @return the created text */ public static Text createLabeledText(Composite parent, String text, int span, int widthHint) { Text textWidget = new Text(parent, SWT.NONE); GridData gridData = new GridData(SWT.FILL, SWT.NONE, true, false); gridData.horizontalSpan = span; gridData.widthHint = widthHint; textWidget.setLayoutData(gridData); textWidget.setEditable(false); textWidget.setBackground(parent.getBackground()); textWidget.setText(text); return textWidget; } /** * Creates a SWT {@link Text} under the given parent. * The created text control behaves like a label: it has no border, * a grayed background and is not modifiable. * But the text is selectable and could be copied. * The label is created with the SWT.WRAP style to enable line wrapping. * * @param parent the parent * @param text the initial text * @param span the horizontal span * @return the created text */ public static Text createWrappedLabeledText(Composite parent, String text, int span) { Text textWidget = new Text(parent, SWT.WRAP); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = span; gridData.widthHint = 10; gridData.grabExcessHorizontalSpace = true; gridData.horizontalAlignment = GridData.FILL; textWidget.setLayoutData(gridData); textWidget.setEditable(false); textWidget.setBackground(parent.getBackground()); textWidget.setText(text); return textWidget; } /** * Creates a SWT {@link Text} under the given parent. * The created text control behaves like a label: it has no border, * a grayed background and is not modifiable. * But the text is selectable and could be copied. * The label is created with the SWT.WRAP style to enable line wrapping. * * @param parent the parent * @param text the initial text * @param span the horizontal span * @param widthHint the width hint * @return the created text */ public static Text createWrappedLabeledText(Composite parent, String text, int span, int widthHint) { Text textWidget = new Text(parent, SWT.WRAP); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = span; gridData.widthHint = widthHint; gridData.grabExcessHorizontalSpace = true; gridData.horizontalAlignment = GridData.FILL; textWidget.setLayoutData(gridData); textWidget.setEditable(false); textWidget.setBackground(parent.getBackground()); textWidget.setText(text); return textWidget; } /** * Creates a SWT {@link Text} under the given parent. * The text is not modifiable, but the text is selectable * and could be copied. * * @param parent the parent * @param text the initial text * @param span the horizontal span * @return the created text */ public static Text createReadonlyText(Composite parent, String text, int span) { Text textWidget = new Text(parent, SWT.NONE | SWT.BORDER | SWT.READ_ONLY); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = span; textWidget.setLayoutData(gridData); textWidget.setEditable(false); textWidget.setBackground(parent.getBackground()); textWidget.setText(text); return textWidget; } /** * Creates a SWT {@link Combo} under the given parent. * Beside the selection of an item it is also possible to type * free text into the combo. * * @param parent the parent * @param items the initial visible items * @param selectedIndex the initial selected item, zero-based * @param span the horizontal span * @return the created combo */ public static Combo createCombo(Composite parent, String[] items, int selectedIndex, int span) { Combo combo = new Combo(parent, SWT.DROP_DOWN | SWT.BORDER); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = span; combo.setLayoutData(gridData); combo.setItems(items); combo.select(selectedIndex); combo.setVisibleItemCount(20); return combo; } /** * Creates a SWT {@link Combo} under the given parent. * It is not possible to type free text into the combo, only * selection of predefined items is possible. * * @param parent the parent * @param items the initial visible items * @param selectedIndex the initial selected item, zero-based * @param span the horizontal span * @return the created combo */ public static Combo createReadonlyCombo(Composite parent, String[] items, int selectedIndex, int span) { Combo combo = new Combo(parent, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.BORDER); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = span; combo.setLayoutData(gridData); combo.setItems(items); combo.select(selectedIndex); combo.setVisibleItemCount(20); return combo; } /** * Creates a checkbox under the given parent. * * @param parent the parent * @param text the label of the checkbox * @param span the horizontal span * @return the created checkbox */ public static Button createCheckbox(Composite parent, String text, int span) { Button checkbox = new Button(parent, SWT.CHECK); checkbox.setText(text); GridData gridData = new GridData(); gridData.horizontalSpan = span; checkbox.setLayoutData(gridData); return checkbox; } /** * Creates a radio button under the given parent. * * @param parent the parent * @param text the label of the radio button * @param span the horizontal span * @return the created radio button */ public static Button createRadiobutton(Composite parent, String text, int span) { Button radio = new Button(parent, SWT.RADIO); radio.setText(text); GridData gridData = new GridData(); gridData.horizontalSpan = span; radio.setLayoutData(gridData); return radio; } /** * Creates a button under the given parent. * The button width is set to the default width. * * @param parent the parent * @param text the label of the button * @param span the horizontal span * @return the created button */ public static Button createButton(Composite parent, String text, int span) { GC gc = new GC(parent); try { gc.setFont(JFaceResources.getDialogFont()); FontMetrics fontMetrics = gc.getFontMetrics(); Button button = new Button(parent, SWT.PUSH); GridData gridData = new GridData(); gridData.widthHint = Dialog.convertHorizontalDLUsToPixels(fontMetrics, IDialogConstants.BUTTON_WIDTH); gridData.horizontalSpan = span; button.setLayoutData(gridData); button.setText(text); return button; } finally { gc.dispose(); } } /** * Adds some space to . * * @param parent the parent * @param span the horizontal span * @return the create label representing the radio buttons indent */ public static Label createRadioIndent(Composite parent, int span) { Label label = new Label(parent, SWT.NONE); GridData gridData = new GridData(); gridData.horizontalSpan = span; gridData.horizontalIndent = 22; label.setLayoutData(gridData); return label; } /** * Creates a spacer. * * @param parent the parent * @param span the horizontal span * @return the create label representing the spacer */ public static Label createSpacer(Composite parent, int span) { Label label = new Label(parent, SWT.NONE); GridData gridData = new GridData(); gridData.horizontalSpan = span; gridData.heightHint = 1; label.setLayoutData(gridData); return label; } /** * Creates a separator. * * @param parent the parent * @param span the horizontal span * @return the create label representing the separator */ public static Label createSeparator(Composite parent, int span) { Label label = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = span; label.setLayoutData(gridData); return label; } /** * Creates a SWT {@link Link} under the given parent. * * @param parent the parent * @param text the initial text * @param span the horizontal span * @return the created text */ public static Link createLink(Composite parent, String text, int span) { Link link = new Link(parent, SWT.NONE); link.setText(text); GridData gridData = new GridData(SWT.FILL, SWT.BEGINNING, true, false); gridData.horizontalSpan = span; gridData.widthHint = 150; link.setLayoutData(gridData); return link; } /** * Creates a Text that can be used to enter an integer. * * @param toolkit the toolkit * @param parent the parent * @return a Text that is a valid integer */ public static Text createIntegerText(FormToolkit toolkit, Composite parent) { return createIntegerText(toolkit, parent, null, -1); } /** * Creates a Text that can be used to enter an integer. * * @param toolkit the toolkit * @param parent the parent * @param width the size of the input text to use * @return a Text that is a valid integer */ public static Text createIntegerText(FormToolkit toolkit, Composite parent, int width) { return createIntegerText(toolkit, parent, null, width); } /** * Creates a Text that can be used to enter an integer. * * @param toolkit the toolkit * @param parent the parent * @param description the description that has to be added after the inmput text * @return a Text that is a valid integer */ public static Text createIntegerText(FormToolkit toolkit, Composite parent, String description) { return createIntegerText(toolkit, parent, description, -1); } /** * Creates a Text that can be used to enter an integer. * * @param toolkit the toolkit * @param parent the parent * @param description the description that has to be added after the inmput text * @param width the size of the input text to use * @return a Text that is a valid integer */ public static Text createIntegerText(FormToolkit toolkit, Composite parent, String description, int width) { Text integerText = toolkit.createText(parent, ""); //$NON-NLS-1$ integerText.addVerifyListener(new VerifyListener() { public void verifyText(VerifyEvent e) { for (int i = 0; i < e.text.length(); i++) { if (!Character.isDigit(e.text.charAt(i))) { e.doit = false; break; } } } }); // Add the description, if needed if ((description != null) && (description.length() > 0)) { ControlDecoration monitoringCheckboxDecoration = new ControlDecoration(integerText, SWT.CENTER | SWT.RIGHT); monitoringCheckboxDecoration.setImage(CommonUIPlugin.getDefault() .getImageDescriptor(CommonUIConstants.IMG_INFORMATION).createImage()); monitoringCheckboxDecoration.setMarginWidth(4); monitoringCheckboxDecoration.setDescriptionText(description); } if (width >= 0) { GridData gridData = new GridData(); gridData.widthHint = width; integerText.setLayoutData(gridData); } return integerText; } /** * Set a value in a Button, if it's not null * * @param value The Value to set * @param checkBox The Button which will be checked if the value is not null and set to True */ public static void setValue(Boolean value, Button checkBox) { if (value != null) { checkBox.setSelection(value); } else { checkBox.setSelection(false); } } /** * Set a value in a Text, if it's not null * * @param value The Value to set * @param inputText The Text which will be set if the value is not null */ public static void setValue(Integer value, Text inputText) { if (value != null) { inputText.setText(value.toString()); } else { inputText.setText(""); } } /** * Set a value in a Text, if it's not null * * @param value The Value to set * @param checkBox The Text which will be set if the value is not null */ public static void setValue(String value, Text inputText) { if (value != null) { inputText.setText(value); } else { inputText.setText(""); } } }