org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils.java

Source

/*
 *  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("");
        }

    }
}