org.eclipse.epf.ui.util.SWTUtil.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.epf.ui.util.SWTUtil.java

Source

//------------------------------------------------------------------------------
// Copyright (c) 2005, 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 implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.ui.util;

import org.eclipse.jface.text.TextViewer;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyledText;
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.Table;
import org.eclipse.swt.widgets.Text;

/**
 * Helper class to create SWT widgets for the EPF UI.
 * <p>
 * This class helps to provide a common look and feel for all EPF forms,
 * dialogs, wizards and preference pages.
 * 
 * @author Kelvin Low
 * @since 1.2
 */
public class SWTUtil {

    /**
     * Prevents external instantiation of this class. All methods in this class
     * should be declared static.
     */
    private SWTUtil() {
    }

    /**
     * Creates a composite with a grid layout.
     * 
     * @param parent
     *            the parent composite
     * @param column
     *            the number of column cells that the composite will take up
     * @return a <code>Composite</code> object
     */
    public static Composite createGridLayoutComposite(Composite parent, int column) {
        Composite composite = new Composite(parent, SWT.NONE);
        composite.setLayout(new GridLayout(column, false));
        composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        return composite;
    }

    /**
     * Creates a child composite with a grid layout.
     * <p>
     * The child composite will be indented from the parent composite.
     * 
     * @param parent
     *            the parent composite
     * @param column
     *            the number of column cells that the composite will take up
     * @return a <code>Composite</code> object
     */
    public static Composite createChildGridLayoutComposite(Composite parent, int column) {
        Composite composite = new Composite(parent, SWT.NONE);
        composite.setLayout(new GridLayout(column, false));
        composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        ((GridLayout) composite.getLayout()).marginTop = -3;
        ((GridLayout) composite.getLayout()).marginLeft = 13;
        return composite;
    }

    /**
     * Creates a group with a grid layout.
     * 
     * @param parent
     *            the parent composite
     * @param text
     *            the text for the group
     * @param column
     *            the number of column cells that the group will take up
     * @return a <code>Group</code> object
     */
    public static Group createGridLayoutGroup(Composite parent, String text, int column) {
        Group group = new Group(parent, SWT.NONE);
        group.setLayout(new GridLayout(column, false));
        group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        group.setText(text);
        return group;
    }

    /**
     * Creates a group with a grid layout.
     * 
     * @param parent
     *            the parent composite
     * @param text
     *            the text for the group
     * @param column
     *            the number of column cells that the group will take up
     * @param equalColumnWidth
     *            flag to indicate whether column cells should be same width or
     *            not
     * @return a <code>Group</code> object
     */
    public static Group createGridLayoutGroup(Composite parent, String text, int column, boolean equalColumnWidth) {
        Group group = new Group(parent, SWT.NONE);
        group.setLayout(new GridLayout(column, equalColumnWidth));
        group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        group.setText(text);
        return group;
    }

    /**
     * Creates a label.
     * 
     * @param parent
     *            the parent composite
     * @param text
     *            the text for the label
     * @param column
     *            the number of column cells that the label will take up
     * @return a <code>Label</code> object
     */
    public static Label createLabel(Composite parent, String text, int column) {
        Label label = new Label(parent, SWT.NONE);
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.horizontalSpan = column;
        label.setLayoutData(gd);
        label.setText(text);
        return label;
    }

    /**
     * Creates a label that only takes up one column cell.
     * 
     * @param parent
     *            the parent composite
     * @param text
     *            the text for the label
     * @return a <code>Label</code> object
     */
    public static Label createLabel(Composite parent, String text) {
        Label label = new Label(parent, SWT.NONE);
        label.setLayoutData(new GridData());
        label.setText(text);
        return label;
    }

    /**
     * Creates a vertically aligned label that only takes up one column cell.
     * 
     * @param parent
     *            the parent composite
     * @param text
     *            the text for the label
     * @return a <code>Label</code> object
     */
    public static Label createVerticallyAlignedLabel(Composite parent, String text) {
        Label label = new Label(parent, SWT.NONE);
        label.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
        label.setText(text);
        return label;
    }

    /**
     * Creates a readonly text control.
     * 
     * @param parent
     *            the parent composite
     * @param defaultText
     *            the default text for the control
     * @param widthHint
     *            the preferred width (in pixels) for the control
     * @param column
     *            the number of column cells that the control will take up
     * @return a <code>Text</code> object
     */
    public static Text createText(Composite parent, String defaultText, int widthHint, int column) {
        Text text = new Text(parent, SWT.BORDER | SWT.READ_ONLY);
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.horizontalSpan = column;
        gd.widthHint = widthHint;
        text.setLayoutData(gd);
        return text;
    }

    /**
     * Creates an readonly text control that only takes up one column cell.
     * 
     * @param parent
     *            the parent composite
     * @param defaultText
     *            the default text for the control
     * @return a <code>Text</code> object
     */
    public static Text createText(Composite parent, String defaultText) {
        Text text = new Text(parent, SWT.BORDER | SWT.READ_ONLY);
        text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        text.setText(defaultText);
        return text;
    }

    /**
     * Creates an editable text control.
     * 
     * @param parent
     *            the parent composite
     * @param defaultText
     *            the default text for the control
     * @param widthHint
     *            the preferred width (in pixels) for the control
     * @param heightHint
     *            the preferred height (in pixels) for the control
     * @param column
     *            the number of column cells that the control will take up
     * @return a <code>Text</code> object
     */
    public static Text createEditableText(Composite parent, String defaultText, int widthHint, int heightHint,
            int column) {
        Text text = new Text(parent, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL);
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.horizontalSpan = column;
        gd.widthHint = widthHint;
        gd.heightHint = heightHint;
        text.setLayoutData(gd);
        return text;
    }

    /**
     * Creates an editable text control.
     * 
     * @param parent
     *            the parent composite
     * @param widthHint
     *            the preferred width (in pixels) for the control
     * @param heightHint
     *            the preferred height (in pixels) for the control
     * @param column
     *            the number of column cells that the control will take up
     * @return a <code>Text</code> object
     */
    public static Text createEditableText(Composite parent, int widthHint, int heightHint, int column) {
        return createEditableText(parent, "", widthHint, heightHint, column); //$NON-NLS-1$
    }

    /**
     * Creates an editable text control.
     * 
     * @param parent
     *            the parent composite
     * @param defaultText
     *            the default text for the control
     * @param widthHint
     *            the preferred width (in pixels) for the control
     * @param column
     *            the number of column cells that the control will take up
     * @return a <code>Text</code> object
     */
    public static Text createEditableText(Composite parent, String defaultText, int widthHint, int column) {
        Text text = new Text(parent, SWT.BORDER);
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.horizontalSpan = column;
        gd.widthHint = widthHint;
        text.setLayoutData(gd);
        return text;
    }

    /**
     * Creates an editable text control that only takes up one column cell.
     * 
     * @param parent
     *            the parent composite
     * @param defaultText
     *            the default text for the control
     * @param widthHint
     *            the preferred width (in pixels) for the control
     * @return a <code>Text</code> object
     */
    public static Text createEditableText(Composite parent, String defaultText, int widthHint) {
        Text text = new Text(parent, SWT.BORDER);
        GridData gd = new GridData();
        gd.widthHint = widthHint;
        text.setLayoutData(gd);
        return text;
    }

    /**
     * Creates an editable text control that only takes up one column cell.
     * 
     * @param parent
     *            the parent composite
     * @param defaultText
     *            the default text for the control
     * @return a <code>Text</code> object
     */
    public static Text createEditableText(Composite parent, String defaultText) {
        Text text = new Text(parent, SWT.BORDER);
        text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        text.setText(defaultText);
        return text;
    }

    /**
     * Creates an editable text control.
     * 
     * @param parent
     *            the parent composite
     * @param column
     *            the number of column cells that the control will take up
     * @return a <code>Text</code> object
     */
    public static Text createEditableText(Composite parent, int column) {
        return createEditableText(parent, "", SWT.DEFAULT, column); //$NON-NLS-1$
    }

    /**
     * Creates an empty editable text control that only takes up one column
     * cell.
     * 
     * @param parent
     *            the parent composite
     * @return a <code>Text</code> object
     */
    public static Text createEditableText(Composite parent) {
        return createEditableText(parent, ""); //$NON-NLS-1$
    }

    /**
     * Creates a readonly multi-line text control.
     * 
     * @param parent
     *            the parent composite
     * @param defaultText
     *            the default text for the control
     * @param widthHint
     *            the preferred width (in pixels) for the control
     * @param heightHint
     *            the preferred height (in pixels) for the control
     * @param column
     *            the number of column cells that the control will take up
     * @return a <code>Text</code> object
     */
    public static Text createMultiLineText(Composite parent, String defaultText, int widthHint, int heightHint,
            int column) {
        Text text = new Text(parent, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL | SWT.READ_ONLY);
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.horizontalSpan = column;
        gd.widthHint = widthHint;
        gd.heightHint = heightHint;
        text.setLayoutData(gd);
        return text;
    }

    /**
     * Creates an combobox.
     * 
     * @param parent
     *            the parent composite
     * @param column
     *            the number of column cells that the control will take up
     * @return a <code>Combo</code> object
     */
    public static Combo createCombobox(Composite parent, int column) {
        Combo combo = new Combo(parent, SWT.BORDER);
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.horizontalSpan = column;
        combo.setLayoutData(gd);
        return combo;
    }

    /**
     * Creates an combobox.
     * 
     * @param parent
     *            the parent composite
     * @param column
     *            the number of column cells that the control will take up
     * @return a <code>Combo</code> object
     */
    public static Combo createReadOnlyCombobox(Composite parent, int column) {
        Combo combo = new Combo(parent, SWT.BORDER | SWT.READ_ONLY);
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.horizontalSpan = column;
        combo.setLayoutData(gd);
        return combo;
    }

    /**
     * Creates an combobox that only takes up one column cell.
     * 
     * @param parent
     *            the parent composite
     * @return a <code>Combo</code> object
     */
    public static Combo createCombobox(Composite parent) {
        return createCombobox(parent, 1);
    }

    /**
     * Creates a button.
     * 
     * @param parent
     *            the parent composite
     * @param text
     *            the text for the control
     * @return a <code>Button</code> object
     */
    public static Button createButton(Composite parent, String text) {
        Button button = new Button(parent, SWT.NONE);
        button.setText(text);
        return button;
    }

    /**
     * Creates a checkbox.
     * 
     * @param parent
     *            the parent composite
     * @param text
     *            the text for the control
     * @param column
     *            the number of column cells that the control will take up
     * @return a <code>Button</code> object
     */
    public static Button createCheckbox(Composite parent, String text, int column) {
        Button button = new Button(parent, SWT.CHECK);
        button.setText(text);
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.horizontalSpan = column;
        button.setLayoutData(gd);
        return button;
    }

    /**
     * Creates a checkbox that only takes up one column cell.
     * 
     * @param parent
     *            the parent composite
     * @param text
     *            the text for the control
     * @return a <code>Button</code> object
     */
    public static Button createCheckbox(Composite parent, String text) {
        return createCheckbox(parent, text, 1);
    }

    /**
     * Creates an radio button.
     * 
     * @param parent
     *            the parent composite
     * @param text
     *            the text for the control
     * @param column
     *            the number of column cells that the control will take up
     * @param selected
     *            if <code>true</code>, select the radio button by default
     * @return a <code>Button</code> object
     */
    public static Button createRadioButton(Composite parent, String text, int column, boolean selected) {
        Button radioButton = new Button(parent, SWT.RADIO);
        radioButton.setText(text);
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.horizontalSpan = column;
        radioButton.setLayoutData(gd);
        radioButton.setSelection(selected);
        return radioButton;
    }

    /**
     * Creates an radio button that only takes up one column cell.
     * 
     * @param parent
     *            the parent composite
     * @param text
     *            the text for the control
     * @return a <code>Button</code> object
     */
    public static Button createRadioButton(Composite parent, String text) {
        return createRadioButton(parent, text, 1, false);
    }

    /**
     * Creates a readonly text viewer.
     * 
     * @param parent
     *            the parent composite
     * @param widthHint
     *            the preferred width (in pixels) for the control
     * @param heightHint
     *            the preferred height (in pixels) for the control
     * @param column
     *            the number of column cells that the control will take up
     * @return a <code>TextViewer</code> object
     */
    public static TextViewer createTextViewer(Composite parent, int widthHint, int heightHint, int column) {
        TextViewer textViewer = new TextViewer(parent,
                SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL | SWT.READ_ONLY);
        StyledText textWidget = textViewer.getTextWidget();
        GridData gd = new GridData(GridData.BEGINNING | GridData.FILL_BOTH);
        gd.horizontalSpan = column;
        gd.heightHint = heightHint;
        gd.widthHint = widthHint;
        textWidget.setLayoutData(gd);
        return textViewer;
    }

    /**
     * Creates a readonly text viewer that only takes up one column cell.
     * 
     * @param parent
     *            the parent composite
     * @return a <code>TextViewer</code> object
     */
    public static TextViewer createTextViewer(Composite parent) {
        return createTextViewer(parent, SWT.DEFAULT, SWT.DEFAULT, SWT.DEFAULT);
    }

    /**
     * Creates a table viewer.
     * 
     * @param parent
     *            the parent composite
     * @param widthHint
     *            the preferred width (in pixels) for the control
     * @param heightHint
     *            the preferred height (in pixels) for the control
     * @param column
     *            the number of column cells that the control will take up
     * @return a <code>TableViewer</code> object
     */
    public static TableViewer createTableViewer(Composite parent, int widthHint, int heightHint, int column) {
        Table table = new Table(parent, SWT.V_SCROLL | SWT.BORDER);
        GridData gd = new GridData(GridData.BEGINNING | GridData.FILL_BOTH);
        gd.horizontalSpan = column;
        gd.widthHint = widthHint;
        gd.heightHint = heightHint;
        table.setLayoutData(gd);
        TableViewer tableViewer = new TableViewer(table);
        return tableViewer;
    }

    /**
     * Creates a checkbox table viewer.
     * 
     * @param parent
     *            the parent composite
     * @param widthHint
     *            the preferred width (in pixels) for the control
     * @param heightHint
     *            the preferred height (in pixels) for the control
     * @param column
     *            the number of column cells that the control will take up
     * @return a <code>CheckboxTableViewer</code> object
     */
    public static CheckboxTableViewer createCheckboxTableViewer(Composite parent, int widthHint, int heightHint,
            int column) {
        CheckboxTableViewer checkboxTableViewer = CheckboxTableViewer.newCheckList(parent,
                SWT.BORDER | SWT.FILL | SWT.HORIZONTAL);
        Table table = checkboxTableViewer.getTable();
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.horizontalSpan = column;
        gd.widthHint = widthHint;
        gd.heightHint = heightHint;
        table.setLayoutData(gd);
        return checkboxTableViewer;
    }

    /**
     * Creates a list viewer.
     * 
     * @param parent
     *            the parent composite
     * @param widthHint
     *            the preferred width (in pixels) for the control
     * @param heightHint
     *            the preferred height (in pixels) for the control
     * @param column
     *            the number of column cells that the control will take up
     * @return a <code>ListViewer</code> object
     */
    public static ListViewer createListViewer(Composite parent, int widthHint, int heightHint, int column) {
        ListViewer listViewer = new ListViewer(parent, SWT.V_SCROLL | SWT.BORDER);
        GridData gd = new GridData(GridData.BEGINNING | GridData.FILL_BOTH);
        gd.horizontalSpan = column;
        gd.widthHint = widthHint;
        gd.heightHint = heightHint;
        listViewer.getControl().setLayoutData(gd);
        return listViewer;
    }

    /**
     * Creates a line.
     * 
     * @param parent
     *            the parent composite
     * @param column
     *            the number of column cells that the line will take up
     * @return a <code>Label</code> object
     */
    public static Label createLine(Composite parent, int column) {
        Label line = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL | SWT.BOLD);
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.horizontalSpan = column;
        line.setLayoutData(gd);
        return line;
    }

    /**
     * Checks whether a text control has some text.
     * 
     * @param control
     *            the text control
     * @return <code>true</code> if the text control has some text,
     *         <code>false</code> otherwise
     */
    public static boolean isNonEmptyText(Text control) {
        String text = control.getText();
        return text != null && text.trim().length() > 0;
    }

}