/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.ui.common.util;
import java.util.Arrays;
import java.util.List;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTreeViewer;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeViewerListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TreeExpansionEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.wizard.IWizard;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.custom.ViewForm;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
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.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.forms.HyperlinkSettings;
import org.eclipse.ui.forms.events.IHyperlinkListener;
import org.eclipse.ui.forms.widgets.FormText;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.teiid.core.designer.util.CoreArgCheck;
import org.teiid.designer.ui.common.InternalUiConstants;
import org.teiid.designer.ui.common.widget.DefaultTreeViewerController;
import org.teiid.designer.ui.common.widget.IListPanelController;
import org.teiid.designer.ui.common.widget.ITreeViewerController;
import org.teiid.designer.ui.common.widget.Label;
import org.teiid.designer.ui.common.widget.ListPanel;
import org.teiid.designer.ui.common.widget.WrappingLabel;
/**
* @since 8.0
*/
public final class WidgetFactory implements
InternalUiConstants.Widgets {
// ============================================================================================================================
// Constants
private static final Color[] TITLE_SELECTION_GRADIENT = new Color[] {
UiUtil.getSystemColor(SWT.COLOR_TITLE_BACKGROUND), UiUtil.getSystemColor(SWT.COLOR_TITLE_BACKGROUND_GRADIENT)
};
private static final int[] TITLE_SELECTION_GRADIENT_PERCENTAGES = new int[] {
100
};
private static final Color TITLE_SELECTION_FOREGROUND = UiUtil.getSystemColor(SWT.COLOR_TITLE_FOREGROUND);
public static final char PASSWORD_ECHO_CHAR = '*';
public static final int NO_DEFAULTS = 1 << 30;
// ============================================================================================================================
// Static Methods
/**
* @since 5.0.1
*/
public static Button createButton(final Composite parent,
int gridStyle) {
return createButton(parent, null, gridStyle, 1, SWT.PUSH);
}
/**
* @since 4.0
*/
public static Button createButton(final Composite parent,
final String name) {
return createButton(parent, name, 0, 1, SWT.PUSH);
}
/**
* @since 4.0
*/
public static Button createButton(final Composite parent,
final String name,
final int gridStyle) {
return createButton(parent, name, gridStyle, 1, SWT.PUSH);
}
/**
* @since 4.0
*/
public static Button createButton(final Composite parent,
final String name,
final int gridStyle,
final int span) {
return createButton(parent, name, gridStyle, span, SWT.PUSH);
}
/**
* @since 4.0
*/
public static Button createButton(final Composite parent,
final String name,
final int gridStyle,
final int span,
final int style) {
final Button button = new Button(parent, style);
if (name != null) {
button.setText(name);
}
final GridData gridData = new GridData(gridStyle);
gridData.horizontalSpan = span;
button.setLayoutData(gridData);
return button;
}
/**
* @since 4.0
*/
public static Button createCheckBox(final Composite parent) {
return createCheckBox(parent, null);
}
/**
* @since 4.0
*/
public static Button createCheckBox(final Composite parent,
final String name) {
return createCheckBox(parent, name, 0);
}
/**
* @since 4.0
*/
public static Button createCheckBox(final Composite parent,
final int gridStyle) {
return createCheckBox(parent, null, gridStyle);
}
/**
* @since 4.0
*/
public static Button createCheckBox(final Composite parent,
final String name,
final int gridStyle) {
return createCheckBox(parent, name, gridStyle, 1, false);
}
/**
* @since 4.0
*/
public static Button createCheckBox(final Composite parent,
final String name,
final boolean selected) {
return createCheckBox(parent, name, 0, selected);
}
/**
* @since 4.0
*/
public static Button createCheckBox(final Composite parent,
final String name,
final int gridStyle,
final boolean selected) {
return createCheckBox(parent, name, gridStyle, 1, selected);
}
/**
* @since 4.0
*/
public static Button createCheckBox(final Composite parent,
final String name,
final int gridStyle,
final int span) {
return createCheckBox(parent, name, gridStyle, span, false);
}
/**
* @since 4.0
*/
public static Button createCheckBox(final Composite parent,
final String name,
final int gridStyle,
final int span,
final boolean selected) {
final Button button = createButton(parent, name, gridStyle, span, SWT.CHECK);
button.setSelection(selected);
return button;
}
/**
* @since 4.0
*/
public static Combo createCombo(final Composite parent,
final int style) {
return createCombo(parent, style, GridData.HORIZONTAL_ALIGN_FILL);
}
/**
* @since 4.0
*/
public static Combo createCombo(final Composite parent,
final int style,
final int gridStyle) {
return createCombo(parent, style, gridStyle, 1);
}
/**
* @since 4.0
*/
public static Combo createCombo(final Composite parent,
final int style,
final int gridStyle,
final int span) {
return createCombo(parent, style, gridStyle, span, null, null);
}
/**
* @since 4.0
*/
public static Combo createCombo(final Composite parent,
final int style,
final int gridStyle,
final int span,
final List items,
final ILabelProvider provider) {
return createCombo(parent, style, gridStyle, span, items, provider, true);
}
/**
* @since 4.0
*/
public static Combo createCombo(final Composite parent,
final int style,
final int gridStyle,
final int span,
final List items,
final ILabelProvider provider,
final boolean sort) {
return createCombo(parent, style, gridStyle, span, items, null, provider, sort);
}
/**
* @since 4.0
*/
public static Combo createCombo(final Composite parent,
final int style,
final int gridStyle,
final List items) {
return createCombo(parent, style, gridStyle, items, null);
}
/**
* @since 4.0
*/
public static Combo createCombo(final Composite parent,
final int style,
final int gridStyle,
final Object[] items) {
return createCombo(parent, style, gridStyle, items, null);
}
/**
* @since 4.0
*/
public static Combo createCombo(final Composite parent,
final int style,
final int gridStyle,
final int span,
final Object[] items) {
return createCombo(parent, style, gridStyle, span, items == null ? (List)null : Arrays.asList(items), null);
}
/**
* @since 4.0
*/
public static Combo createCombo(final Composite parent,
final int style,
final int gridStyle,
final Object[] items,
final Object selection) {
return createCombo(parent, style, gridStyle, items == null ? (List)null : Arrays.asList(items), selection);
}
/**
* @since 4.0
*/
public static Combo createCombo(final Composite parent,
final int style,
final int gridStyle,
final List items,
final Object selection) {
return createCombo(parent, style, gridStyle, items, selection, null);
}
/**
* @since 4.0
*/
public static Combo createCombo(final Composite parent,
final int style,
final int gridStyle,
final List items,
final ILabelProvider provider) {
return createCombo(parent, style, gridStyle, items, provider, true);
}
/**
* @since 4.0
*/
public static Combo createCombo(final Composite parent,
final int style,
final int gridStyle,
final List items,
final ILabelProvider provider,
final boolean sort) {
return createCombo(parent, style, gridStyle, items, null, provider, sort);
}
/**
* @since 4.0
*/
public static Combo createCombo(final Composite parent,
final int style,
final int gridStyle,
final List items,
final Object selection,
final ILabelProvider provider) {
return createCombo(parent, style, gridStyle, items, selection, provider, true);
}
/**
* @since 4.0
*/
public static Combo createCombo(final Composite parent,
final int style,
final int gridStyle,
final List items,
final Object selection,
final ILabelProvider provider,
final boolean sort) {
return createCombo(parent, style, gridStyle, 1, items, selection, provider, sort);
}
/**
* @since 4.0
*/
public static Combo createCombo(final Composite parent,
final int style,
final int gridStyle,
final ILabelProvider provider) {
return createCombo(parent, style, gridStyle, null, null, provider);
}
/**
* @since 4.0
*/
public static Combo createCombo(final Composite parent,
final int style,
final int gridStyle,
final int span,
final List items,
final Object selection,
final ILabelProvider provider,
final boolean sort) {
CoreArgCheck.isNotNull(parent);
final Combo combo = new Combo(parent, style | SWT.BORDER);
final GridData gridData = new GridData(gridStyle);
gridData.horizontalSpan = span;
combo.setLayoutData(gridData);
if (items != null) {
WidgetUtil.setComboItems(combo, items, provider, sort);
}
if (selection != null) {
WidgetUtil.setComboText(combo, selection, provider, !WidgetUtil.hasStyle(combo, SWT.READ_ONLY));
}
return combo;
}
public static FormText createFormText(final Composite parent,
FormToolkit toolkit,
String html,
IHyperlinkListener listener) {
FormText formText = toolkit.createFormText(parent, true);
formText.setHyperlinkSettings(new HyperlinkSettings(parent.getDisplay()) {
@Override
public Cursor getHyperlinkCursor() {
if (getHyperlinkUnderlineMode() == HyperlinkSettings.UNDERLINE_NEVER) {
return parent.getDisplay().getSystemCursor(SWT.CURSOR_ARROW);
}
return super.getHyperlinkCursor();
}
});
formText.setText(html, true, false);
formText.addHyperlinkListener(listener);
return formText;
}
/**
* Whereas {@link #createGroup(Composite, int)} family of functions creates
* a group assuming a parent with a {@link GridLayout}, this makes no assumptions
* on the parent and provides a simple {@link FillLayout} to the created {@link Group}.
*
* @param parent
* @param string
*
* @return {@link Group}
*/
public static Group createSimpleGroup(Composite parent, String name) {
Group group = new Group(parent, SWT.BORDER);
FillLayout fillLayout = new FillLayout();
if (name != null) {
group.setText(name);
/**
* see issue comments in #createGroup(Composite, String, int, int, int)
*/
fillLayout.marginHeight = 10;
}
group.setLayout(fillLayout);
group.setFont(JFaceResources.getBannerFont());
return group;
}
/**
* @since 4.0
*/
public static Group createGroup(final Composite parent,
final String name) {
return createGroup(parent, name, 0);
}
/**
* @since 4.0
*/
public static Group createGroup(final Composite parent,
final int gridStyle) {
return createGroup(parent, null, gridStyle);
}
/**
* @since 4.0
*/
public static Group createGroup(final Composite parent,
final String name,
final int gridStyle) {
return createGroup(parent, name, gridStyle, 1);
}
/**
* @since 4.0
*/
public static Group createGroup(final Composite parent,
final String name,
final int gridStyle,
final int span) {
return createGroup(parent, name, gridStyle, span, 1);
}
/**
* @since 4.0
*/
public static Group createGroup(final Composite parent,
final String name,
final int gridStyle,
final int span,
final int columns) {
final Group group = new Group(parent, SWT.NONE);
final GridData gridData = new GridData(gridStyle);
gridData.horizontalSpan = span;
group.setLayoutData(gridData);
GridLayoutFactory gridLayoutFactory = GridLayoutFactory.fillDefaults()
.numColumns(columns)
.equalWidth(false);
Font bannerFont = JFaceResources.getBannerFont();
group.setFont(bannerFont);
/*
* An issue exists on some linux distiros, eg. Fedora, (but not on other's,
* eg. Ubuntu), that stops Groups rendering correctly with a title when using
* group.setText(). The title is overlapped in part by the internal content of
* the group. Investigation indicates it is tied to the use of grid layout as the
* layout of the group. Indeed, the issue does not occur in other uses of
* group where fill layout is used.
*
* This works around the issue by setting extended margins on the group. By
* giving the top margin a value of '10', it seems to ensure that the layout of
* the title is correctly observed resulting in no overlap. The only downside is
* that resizing the parent dialog/panel will result in a slight jump-down of the
* contents leaving a space of '10' between it and the title. However, rarely
* would a user resize a dialog so this is a minor irritation.
*/
if (name != null) {
gridLayoutFactory = gridLayoutFactory.margins(2, 10);
group.setText(name);
}
gridLayoutFactory.applyTo(group);
return group;
}
/**
* @since 4.0
*/
public static Label createLabel(final Composite parent) {
return createLabel(parent, GridData.VERTICAL_ALIGN_BEGINNING);
}
/**
* @since 4.0
*/
public static Label createLabel(final Composite parent,
final int gridStyle) {
return createLabel(parent, gridStyle, 1);
}
/**
* @since 4.0
*/
public static Label createLabel(final Composite parent,
final int gridStyle,
final int span) {
return createLabel(parent, gridStyle, span, null);
}
/**
* @since 4.0
*/
public static Label createLabel(final Composite parent,
final int gridStyle,
final int span,
final String text) {
return createLabel(parent, gridStyle, span, text, SWT.NONE);
}
/**
* @since 4.0
*/
public static Label createLabel(final Composite parent,
final int gridStyle,
final int span,
final String text,
final int style) {
return createLabel(parent, gridStyle, span, text, null, style);
}
/**
* @since 4.0
*/
public static Label createLabel(final Composite parent,
final int gridStyle,
final String text) {
return createLabel(parent, gridStyle, 1, text);
}
/**
* @since 4.0
*/
public static Label createLabel(final Composite parent,
final int gridStyle,
final String text,
final int style) {
return createLabel(parent, gridStyle, 1, text, style);
}
/**
* @since 4.0
*/
public static Label createLabel(final Composite parent,
final int gridStyle,
final Image image,
final int style) {
return createLabel(parent, gridStyle, 1, null, image, style);
}
/**
* @since 4.0
*/
public static Label createLabel(final Composite parent,
final String text) {
return createLabel(parent, text, SWT.NONE);
}
/**
* @since 4.0
*/
public static Label createLabel(final Composite parent,
final String text,
final int style) {
return createLabel(parent, text, null, style);
}
/**
* @since 4.0
*/
public static Label createLabel(final Composite parent,
final String text,
final Image image,
final int style) {
return createLabel(parent, GridData.VERTICAL_ALIGN_BEGINNING, 1, text, image, style);
}
/**
* @since 4.0
*/
public static Label createLabel(final Composite parent,
final Image image) {
return createLabel(parent, image, SWT.NONE);
}
/**
* @since 4.0
*/
public static Label createLabel(final Composite parent,
final Image image,
final int style) {
return createLabel(parent, GridData.VERTICAL_ALIGN_BEGINNING, 1, null, image, style);
}
/**
* @since 4.0
*/
public static Label createLabel(final Composite parent,
final int gridStyle,
final int span,
final String text,
final Image image,
final int style) {
final Label label = new Label(parent, style);
if (text != null) {
label.setText(text);
}
label.setImage(image);
final GridData gridData = new GridData(gridStyle);
gridData.horizontalSpan = span;
label.setLayoutData(gridData);
return label;
}
/**
* @since 4.0
*/
public static ListPanel createListPanel(final Composite parent,
final String title,
final IListPanelController controller) {
return new ListPanel(parent, title, controller);
}
/**
* Creates a resizable wizard dialog for the specified wizard.
*
* @param shell
* The shell under which to create the wizard dialog.
* @param wizard
* The wizard to be added to the dialog.
* @return The resizable wizard dialog.
* @since 4.0
*/
public static WizardDialog createOnePageWizardDialog(final Shell shell,
final IWizard wizard) {
CoreArgCheck.isNotNull(shell);
CoreArgCheck.isNotNull(wizard);
final WizardDialog dlg = new WizardDialog(shell, wizard) {
// Overridden to make wizard resizable
@Override
public void create() {
setShellStyle(getShellStyle() | SWT.RESIZE);
super.create();
getShell().getDefaultButton().setText(OK_LABEL);
updateSize(getWizard().getStartingPage());
}
};
return dlg;
}
/**
* @since 4.0
*/
public static Composite createPanel(final Composite parent) {
return createPanel(parent, SWT.NONE);
}
/**
* @since 4.0
*/
public static Composite createPanel(final Composite parent,
final int style) {
return createPanel(parent, style, 0);
}
/**
* @since 4.0
*/
public static Composite createPanel(final Composite parent,
final int style,
final int gridStyle) {
return createPanel(parent, style, gridStyle, 1);
}
/**
* @since 4.0
*/
public static Composite createPanel(final Composite parent,
final int style,
final int gridStyle,
final int span) {
return createPanel(parent, style, gridStyle, span, 1);
}
/**
* @since 4.0
*/
public static Composite createPanel(final Composite parent,
final int style,
final int gridStyle,
final int span,
final int columns) {
final Composite panel = new Composite(parent, style);
WidgetUtil.initializePanel(panel, gridStyle, span, columns);
return panel;
}
/**
* @since 4.0
*/
public static Text createPasswordField(final Composite parent) {
return createPasswordField(parent, GridData.FILL_HORIZONTAL, 1);
}
/**
* @since 4.0
*/
public static Text createPasswordField(final Composite parent,
final int gridStyle,
final int span) {
final Text text = createTextField(parent, gridStyle, span);
text.setEchoChar(PASSWORD_ECHO_CHAR);
return text;
}
/**
* @since 4.0
*/
public static Button createRadioButton(final Composite parent,
final String name) {
return createRadioButton(parent, name, false);
}
/**
* @since 4.0
*/
public static Button createRadioButton(final Composite parent,
final String name,
final boolean selected) {
return createRadioButton(parent, name, 0, 1, selected);
}
/**
* @since 4.0
*/
public static Button createRadioButton(final Composite parent,
final String name,
final int gridStyle,
final int span,
final boolean selected) {
final Button button = createButton(parent, name, gridStyle, span, SWT.RADIO);
button.setSelection(selected);
return button;
}
/**
* @since 4.0
*/
public static SashForm createSplitter(final Composite parent) {
return createSplitter(parent, SWT.HORIZONTAL);
}
/**
* @since 4.0
*/
public static SashForm createSplitter(final Composite parent,
final int style) {
return createSplitter(parent, style, GridData.FILL_BOTH);
}
/**
* @since 4.0
*/
public static SashForm createSplitter(final Composite parent,
final int style,
final int gridStyle) {
return createSplitter(parent, style, gridStyle, 1);
}
/**
* @since 4.0
*/
public static SashForm createSplitter(final Composite parent,
final int style,
final int gridStyle,
final int span) {
final SashForm splitter = new SashForm(parent, style);
final GridData gridData = new GridData(gridStyle);
gridData.horizontalSpan = span;
splitter.setLayoutData(gridData);
return splitter;
}
/**
* @since 4.0
*/
public static CTabItem createTab(final CTabFolder folder,
final String name) {
final CTabItem tab = new CTabItem(folder, SWT.NONE);
if (name != null) {
tab.setText(name);
tab.setToolTipText(name);
}
return tab;
}
/**
* @since 4.0
*/
public static CTabFolder createTabFolder(final Composite parent) {
return createTabFolder(parent, SWT.TOP);
}
/**
* @since 4.0
*/
public static CTabFolder createTabFolder(final Composite parent,
final int style) {
return createTabFolder(parent, style, GridData.FILL_BOTH);
}
/**
* @since 4.0
*/
public static CTabFolder createTabFolder(final Composite parent,
final int style,
final int gridStyle) {
return createTabFolder(parent, style, gridStyle, 1);
}
/**
* @since 4.0
*/
public static CTabFolder createTabFolder(final Composite parent,
final int style,
final int gridStyle,
final int span) {
final CTabFolder tabFolder = new CTabFolder(parent, style);
final GridData gridData = new GridData(gridStyle);
gridData.horizontalSpan = span;
tabFolder.setLayoutData(gridData);
if (WidgetUtil.hasStyle(tabFolder, SWT.TOP)) {
tabFolder.setSelectionBackground(TITLE_SELECTION_GRADIENT, TITLE_SELECTION_GRADIENT_PERCENTAGES);
tabFolder.setSelectionForeground(TITLE_SELECTION_FOREGROUND);
}
return tabFolder;
}
/**
* @since 4.0
*/
public static TableColumn createTableColumn(final Table table) {
return createTableColumn(table, null);
}
/**
* @since 4.0
*/
public static TableColumn createTableColumn(final Table table,
final String name) {
final TableColumn col = new TableColumn(table, SWT.NONE);
if (name != null) {
col.setText(name);
}
return col;
}
/**
* @param table the table whose columns are being created
* @param headers the table column headers
* @param style the table column style
* @since 5.5.3
*/
public static void createTableColumns( Table table,
String[] headers,
int style) {
for (String header : headers) {
TableColumn col = new TableColumn(table, style);
col.setText(header);
}
}
/**
* @since 4.0
*/
public static TableViewer createTableViewer(final Composite parent) {
return createTableViewer(parent, SWT.NONE);
}
/**
* @since 4.0
*/
public static TableViewer createTableViewer(Composite parent,
int style) {
if ((style & NO_DEFAULTS) == 0) {
style |= SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL;
}
final TableViewer viewer = new TableViewer(parent, style);
final Table table = viewer.getTable();
table.setLayoutData(new GridData(GridData.FILL_BOTH));
return viewer;
}
/**
* @since 4.0
*/
public static Text createTextBox(final Composite parent) {
return createTextBox(parent, SWT.NONE, GridData.FILL_BOTH);
}
/**
* @since 4.0
*/
public static Text createTextBox(final Composite parent,
final int style,
final int gridStyle) {
return createTextBox(parent, style, gridStyle, 1);
}
/**
* @since 4.0
*/
public static Text createTextBox(final Composite parent,
final int style,
final int gridStyle,
final int span) {
return createTextBox(parent, style, gridStyle, span, null);
}
/**
* @since 4.0
*/
public static Text createTextBox(final Composite parent,
final int style,
final int gridStyle,
final int span,
final String text) {
final Text box = new Text(parent, style | SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
final GridData gridData = new GridData(gridStyle);
gridData.horizontalSpan = span;
box.setLayoutData(gridData);
if (text != null) {
box.setText(text);
}
return box;
}
/**
* This method is the minimalist version of createStyledTextBox(). It will create a StyledText instance
* using the following default values:
* style = SWT.WRAP | SWT.READ_ONLY
* styleGrid = GridData.FILL_HORIZONTAL
* background color = UiUtil.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND)
* @param parent
* @param text
* @return StyledText
*
* @since 5.0.2
*/
public static StyledText createStyledTextBox(final Composite parent,
final String text) {
return createStyledTextBox(parent,SWT.WRAP | SWT.READ_ONLY,text);
}
/**
* This method is the creates a StyledText instance using the following default values:
* styleGrid = GridData.FILL_HORIZONTAL
* background color = UiUtil.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND)
* @param parent
* @param text
* @return StyledText
*
* @since 5.0.2
*/
public static StyledText createStyledTextBox(final Composite parent,
final int style,
final String text) {
return createStyledTextBox(parent,style,GridData.FILL_HORIZONTAL,text);
}
/**
* This method is the creates a StyledText instance using the following default values:
* background color = UiUtil.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND)
* @param parent
* @param style
* @param gridStyle
* @param text
* @return StyledText
*
* @since 5.0.2
*/
public static StyledText createStyledTextBox(final Composite parent,
final int style,
final int gridStyle,
final String text) {
return createStyledTextBox(parent,style,gridStyle,text,UiUtil.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
}
/**
* This method is the creates a StyledText instance using the passed values
* @param parent
* @param style
* @param gridStyle
* @param text
* @param background
* @return StyledText
*
* @since 5.0.2
*/
public static StyledText createStyledTextBox(final Composite parent,
final int style,
final int gridStyle,
final String text,
final Color background) {
final StyledText box = new StyledText(parent, style );
final GridData gridData = new GridData(gridStyle);
box.setLayoutData(gridData);
box.setBackground(background);
if (text != null) {
box.setText(text);
}
return box;
}
/**
* @since 4.0
*/
public static Text createTextField(final Composite parent) {
return createTextField(parent, GridData.HORIZONTAL_ALIGN_FILL);
}
/**
* @since 4.0
*/
public static Text createTextField(final Composite parent,
final int gridStyle) {
return createTextField(parent, gridStyle, 1);
}
/**
* @since 4.0
*/
public static Text createTextField(final Composite parent,
final int gridStyle,
final int span) {
return createTextField(parent, gridStyle, span, null);
}
/**
* Creates a {@link org.eclipse.swt.widgets.ToolBar} on the specifiec <code>ViewForm</code>. Actions can be installed in
* the <code>ToolBar</code> by adding them to the returned <code>IToolBarManager</code>.
*
* @param theViewForm
* the view form where the toolbar is being created
* @param theStyle
* the toolbar style
* @param thePosition
* the position of the toolbar on the view form (SWT.LEFT, SWT.RIGHT, SWT.CENTER)
* @return the toolbar manager
*/
public static IToolBarManager createViewFormToolBar(final ViewForm theViewForm,
final int theStyle,
final int thePosition) {
ToolBar tb = new ToolBar(theViewForm, theStyle);
// position the toolbar on the view form
if (thePosition == SWT.LEFT) {
theViewForm.setTopLeft(tb);
} else if (thePosition == SWT.CENTER) {
theViewForm.setTopCenter(tb);
} else {
theViewForm.setTopRight(tb);
}
return new ToolBarManager(tb);
}
/**
* Creates a {@link org.eclipse.swt.widgets.ToolBar} on the specifiec <code>ViewForm</code>. Actions can be installed in
* the <code>ToolBar</code> by adding them to the returned <code>IToolBarManager</code>. The <code>ToolBar</code> is
* intalled on the right and is flat and wraps.
*
* @param theViewForm
* the view form where the toolbar is being created
* @return the toolbar manager
*/
public static IToolBarManager createViewFormToolBar(final ViewForm theViewForm) {
return createViewFormToolBar(theViewForm, SWT.FLAT | SWT.WRAP, SWT.RIGHT);
}
/**
* @since 4.0
*/
public static Text createTextField(final Composite parent,
final int gridStyle,
final String text) {
return createTextField(parent, gridStyle, 1, text);
}
/**
* @since 4.0
*/
public static Text createTextField(final Composite parent,
final int gridStyle,
final int span,
final String text) {
return createTextField(parent, gridStyle, span, text, SWT.BORDER);
}
/**
* @since 4.0
*/
public static Text createTextField(final Composite parent,
final int gridStyle,
final int span,
final String text,
final int style) {
final Text fld = new Text(parent, SWT.BORDER | style);
final GridData gridData = new GridData(gridStyle);
gridData.horizontalSpan = span;
fld.setLayoutData(gridData);
if (text != null) {
fld.setText(text);
}
return fld;
}
/**
* @since 4.0
*/
public static TreeViewer createTreeViewer(final Composite parent,
final int style) {
return createTreeViewer(parent, style, GridData.FILL_BOTH);
}
/**
* @since 4.0
*/
public static TreeViewer createTreeViewer(final Composite parent,
final int style,
final int gridStyle) {
return createTreeViewer(parent, style, gridStyle, null);
}
/**
* @since 4.0
*/
public static TreeViewer createTreeViewer(final Composite parent,
final int style,
final ITreeViewerController controller) {
return createTreeViewer(parent, style, GridData.FILL_BOTH, controller);
}
/**
* Creates a <code>TreeViewer</code> or a {@link CheckboxTreeViewer} if the <code>SWT.CHECK</code> style is passed in.
*
* @since 4.0
*/
public static TreeViewer createTreeViewer(final Composite theParent,
final int theStyle,
final int theGridStyle,
final ITreeViewerController theController) {
TreeViewer viewer = createTreeViewer2(theParent, theStyle | SWT.BORDER, theController);
viewer.getTree().setLayoutData(new GridData(theGridStyle));
return viewer;
}
/**
* @param parent
* @param style
* @param controller
* @return
* @since 5.0.1
*/
public static TreeViewer createTreeViewer2(Composite parent,
int style,
ITreeViewerController controller) {
style |= SWT.V_SCROLL | SWT.H_SCROLL;
final TreeViewer viewer = (WidgetUtil.hasState(style, SWT.CHECK) ? new CheckboxTreeViewer(parent, style)
: new TreeViewer(parent, style));
final ITreeViewerController ctrlr = (controller != null ? controller : new DefaultTreeViewerController());
// Add listener to handle when a node is selected.
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(final SelectionChangedEvent event) {
ctrlr.itemSelected(event);
}
});
// Add listener to expand/collapse node when double-clicked
viewer.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(final DoubleClickEvent event) {
final Object node = ((IStructuredSelection)event.getSelection()).getFirstElement();
viewer.setExpandedState(node, !viewer.getExpandedState(node));
ctrlr.itemDoubleClicked(event);
}
});
// Add listener to select node when expanded/collapsed
viewer.addTreeListener(new ITreeViewerListener() {
public void treeCollapsed(final TreeExpansionEvent event) {
ctrlr.itemCollapsed(event);
}
public void treeExpanded(final TreeExpansionEvent event) {
ctrlr.itemExpanded(event);
}
});
viewer.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
IStructuredSelection selection = (IStructuredSelection)event.getSelection();
if (!selection.isEmpty()) {
Object obj = selection.getFirstElement();
if (obj != null) {
TreeItem item = WidgetUtil.findTreeItem(obj, viewer);
if (item != null) {
ctrlr.update(item, false);
}
}
}
}
});
// Add listener to select node when check box selected
if (WidgetUtil.hasStyle(viewer.getTree(), SWT.CHECK)) {
((CheckboxTreeViewer)viewer).addCheckStateListener(new ICheckStateListener() {
public void checkStateChanged(CheckStateChangedEvent event) {
// Toggle checked state if checkbox clicked and checkable. Call update even if not toggled in order to
// "undo" visual checked state.
Object obj = event.getElement();
TreeItem item = WidgetUtil.findTreeItem(obj, viewer);
if (ctrlr.isItemCheckable(item)) {
WidgetUtil.setCheckedState(item, event.getChecked() ? CHECKED : UNCHECKED, true, ctrlr);
ctrlr.checkedStateToggled(item);
} else {
ctrlr.update(item, false);
}
// Select node
viewer.setSelection(new StructuredSelection(item.getData()));
}
});
}
return viewer;
}
/**
* @since 4.0
*/
public static ViewForm createViewForm(final Composite parent,
final int style,
final int gridStyle,
final int span) {
final ViewForm form = new ViewForm(parent, style);
final GridData gridData = new GridData(gridStyle);
gridData.horizontalSpan = span;
form.setLayoutData(gridData);
return form;
}
/**
* Creates a resizable wizard dialog for the specified wizard.
*
* @param shell
* The shell under which to create the wizard dialog.
* @param wizard
* The wizard to be added to the dialog.
* @return The resizable wizard dialog.
* @since 4.0
*/
public static WizardDialog createWizardDialog(final Shell shell,
final IWizard wizard) {
CoreArgCheck.isNotNull(shell);
CoreArgCheck.isNotNull(wizard);
return new WizardDialog(shell, wizard) {
// Overridden to make wizard resizable
@Override
public void create() {
setShellStyle(getShellStyle() | SWT.RESIZE);
super.create();
}
};
}
/**
* @since 4.0
*/
public static WrappingLabel createWrappingLabel(final Composite parent,
final int gridStyle) {
return createWrappingLabel(parent, gridStyle, 1);
}
/**
* @since 4.0
*/
public static WrappingLabel createWrappingLabel(final Composite parent,
final int gridStyle,
final int span) {
return createWrappingLabel(parent, gridStyle, span, null);
}
/**
* @since 4.0
*/
public static WrappingLabel createWrappingLabel(final Composite parent,
final int gridStyle,
final String text) {
return createWrappingLabel(parent, gridStyle, 1, text);
}
/**
* @since 4.0
*/
public static WrappingLabel createWrappingLabel(final Composite parent,
final int gridStyle,
final int span,
final String text) {
return new WrappingLabel(parent, gridStyle, span, text);
}
// ============================================================================================================================
// Constructors
/**
* Prevents instantiation.
*
* @since 4.0
*/
private WidgetFactory() {
}
}