blob: 3102bd792f5598c196f8b67662488d3411cd9ca6 [file] [log] [blame]
//------------------------------------------------------------------------------
// 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.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 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 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;
}
}