Java tutorial
/****************************************************************************** * Copyright (c) 2011-2013, Linagora * * 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: * Linagora - initial API and implementation *******************************************************************************/ package com.ebmwebsourcing.petals.common.internal.provisional.utils; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.List; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.jface.text.source.SourceViewer; import org.eclipse.jface.text.source.SourceViewerConfiguration; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.Control; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Link; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.dialogs.ElementTreeSelectionDialog; import org.eclipse.ui.dialogs.ListDialog; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.wst.sse.core.StructuredModelManager; import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; import org.eclipse.wst.sse.ui.StructuredTextViewerConfiguration; import org.eclipse.wst.sse.ui.internal.StructuredTextViewer; import org.eclipse.wst.sse.ui.internal.provisional.style.LineStyleProvider; import org.eclipse.wst.xml.core.internal.provisional.contenttype.ContentTypeIdForXML; import org.eclipse.wst.xml.ui.StructuredTextViewerConfigurationXML; import com.ebmwebsourcing.petals.common.internal.provisional.preferences.PreferencesManager; import com.ebmwebsourcing.petals.common.internal.provisional.swt.DefaultSelectionListener; import com.ebmwebsourcing.petals.common.internal.provisional.swt.LinkWithImageComposite; import com.ebmwebsourcing.petals.common.internal.provisional.swt.ListWithButtonComposite; import com.ebmwebsourcing.petals.common.internal.provisional.swt.QNameText; import com.ebmwebsourcing.petals.common.internal.provisional.swt.TextWithButtonComposite; /** * A set of utilities to create SWT and JFace widgets. * @author Vincent Zurczak - EBM WebSourcing */ public final class SwtFactory { /** * Private constructor for utility class. */ private SwtFactory() { // nothing } /** * Creates a new composite. * @param container the parent * @return a new composite */ public static Composite createComposite(Composite container) { return new Composite(container, SWT.NONE); } /** * Creates a label. * * @param container the parent * @param label the label * @param tooltip the tool tip * @return the created label */ public static Label createLabel(Composite container, String label, String tooltip) { Label l = new Label(container, SWT.NONE); l.setText(label); l.setToolTipText(tooltip); return l; } /** * Creates a simple text field. * * @param container the parent * @param useWholeSpace true to use the whole space (horizontally) * @return the created text field */ public static Text createSimpleTextField(Composite container, boolean useWholeSpace) { Text t = new Text(container, SWT.SINGLE | SWT.BORDER); if (useWholeSpace) t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); return t; } /** * Creates a combo with the drop_down option. * * @param container the parent * @param readOnly true to make the combo read only, false if it can be edited manually * @param useWholeSpace true to use the whole space (horizontally) * @return the created combo */ public static Combo createDropDownCombo(Composite container, boolean readOnly, boolean useWholeSpace) { int style = SWT.DROP_DOWN | SWT.BORDER; if (readOnly) style |= SWT.READ_ONLY; Combo c = new Combo(container, style); if (useWholeSpace) c.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); return c; } /** * Creates a password field with a button to hide or show the password in clear. * @param container the container * @param useWholeSpace true to use the whole space * @param showPwd true to show the password in clear at the beginning * @return a composite which contains both the text and the button */ public static TextWithButtonComposite createPasswordField(Composite container, boolean showPwd) { final TextWithButtonComposite twb = new TextWithButtonComposite(container, SWT.SINGLE | SWT.BORDER); twb.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); twb.getText().setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); final char defEchoChar = twb.getText().getEchoChar(); twb.getButton().addSelectionListener(new DefaultSelectionListener() { @Override public void widgetSelected(SelectionEvent e) { char echoChar = twb.getText().getEchoChar(); if (echoChar == defEchoChar) { twb.getButton().setText("Show Password"); twb.getText().setEchoChar('\u2022'); } else { twb.getButton().setText("Hide Password"); twb.getText().setEchoChar(defEchoChar); } twb.layout(); } }); if (showPwd) twb.getText().setEchoChar('a'); twb.getButton().notifyListeners(SWT.Selection, new Event()); return twb; } /** * Creates a combo viewer with a default label provider and an array content provider. * @param parent the parent * @param useWholeSpace true to use the whole space horizontally * @param values the values to put in the viewer * @return the viewer */ public static ComboViewer createDefaultComboViewer(Composite parent, boolean useWholeSpace, boolean readOnly, Object[] values) { int style = SWT.SINGLE | SWT.BORDER; if (readOnly) style |= SWT.READ_ONLY; final ComboViewer viewer = new ComboViewer(parent, style); if (useWholeSpace) viewer.getCombo().setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); viewer.setContentProvider(new ArrayContentProvider()); viewer.setLabelProvider(new LabelProvider()); viewer.setInput(values); return viewer; } /** * Creates a styled text with syntax highlighting for XML document. * <p> * Be careful, the layout data must be applied on the parent of the result. * </p> * <code> * StyledText st = SwtFactory.createXmlTextViewer( parent );<br /> * st.getParent().setLayoutData( new GridData()); * </code> * * @param parent * @return */ public static StyledText createXmlTextViewer(Composite parent) { return createXmlTextViewer(parent, true); } /** * Creates a styled text with syntax highlighting for XML document. * <p> * Be careful, the layout data must be applied on the parent of the result. * </p> * <code> * StyledText st = SwtFactory.createXmlTextViewer( parent );<br /> * st.getParent().setLayoutData( new GridData()); * </code> * * @param parent * @param horizontalScroll * @return */ @SuppressWarnings("restriction") public static StyledText createXmlTextViewer(Composite parent, boolean showHorizontalScroll) { Composite editor = new Composite(parent, SWT.NONE); editor.setLayout(new FillLayout()); SourceViewerConfiguration sourceViewerConfiguration = new StructuredTextViewerConfiguration() { StructuredTextViewerConfiguration baseConfiguration = new StructuredTextViewerConfigurationXML(); @Override public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) { return this.baseConfiguration.getConfiguredContentTypes(sourceViewer); } @Override public LineStyleProvider[] getLineStyleProviders(ISourceViewer sourceViewer, String partitionType) { return this.baseConfiguration.getLineStyleProviders(sourceViewer, partitionType); } }; SourceViewer viewer = null; String contentTypeID = ContentTypeIdForXML.ContentTypeID_XML; int style = SWT.BORDER | SWT.V_SCROLL; style |= showHorizontalScroll ? SWT.V_SCROLL : SWT.WRAP; viewer = new StructuredTextViewer(editor, null, null, false, style); ((StructuredTextViewer) viewer).getTextWidget() .setFont(JFaceResources.getFont("org.eclipse.wst.sse.ui.textfont")); //$NON-NLS-1$ IStructuredModel scratchModel = StructuredModelManager.getModelManager() .createUnManagedStructuredModelFor(contentTypeID); IDocument document = scratchModel.getStructuredDocument(); viewer.configure(sourceViewerConfiguration); viewer.setDocument(document); return viewer.getTextWidget(); } /** * Creates a hyper link. * * @param container the parent * @param text the text to show in the hyper link * @param enabled true if it should be enabled, false otherwise * @param useWholeSpace true to use the whole space (horizontally) * @return the created link * @see #createDecoredLink(Composite, String, Image, boolean) */ public static Link createLink(Composite container, String text, boolean enabled, boolean useWholeSpace) { Link link = new Link(container, SWT.NONE); link.setText(text); link.setEnabled(enabled); if (useWholeSpace) link.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); return link; } /** * Creates a composite which contains both a label with an image and a hyper link. * * @param parent the parent * @param text the text to show in the hyper link * @param image the image to set * @return the created link * @see #createLink(Composite, String, boolean) */ public static LinkWithImageComposite createDecoredLink(Composite parent, String text, Image image) { LinkWithImageComposite decoredLink = new LinkWithImageComposite(parent); decoredLink.getLabel().setImage(image); decoredLink.getLink().setText(text); return decoredLink; } /** * Creates a QName text field. * * @param container the parent * @param useWholeSpace true to use the whole space (horizontally) * @return the created QName text field */ public static QNameText createQNameTextField(Composite container, boolean useWholeSpace) { QNameText t = new QNameText(container); if (useWholeSpace) t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); return t; } /** * Creates a QName text field. * * @param container the parent * @param useWholeSpace true to use the whole space (horizontally) * @param defaultLocalPart the local part to show when there is no value * @param defaultNamespace the name space to show when there is no value * @return the created QName text field */ public static QNameText createQNameTextField(Composite container, boolean useWholeSpace, String defaultLocalPart, String defaultNamespace) { QNameText t = new QNameText(container, defaultLocalPart, defaultNamespace); if (useWholeSpace) t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); return t; } /** * Creates a push button. * * @param container the parent * @param label the label * @param tooltip the tool tip * @return the created button */ public static Button createPushButton(Composite container, String label, String tooltip) { Button b = new Button(container, SWT.PUSH); b.setText(label); b.setToolTipText(tooltip); return b; } /** * Creates a check box button. * * @param container the parent * @param label the label * @param tooltip the tool tip * @param selected true to select the check box * @return the created button */ public static Button createCheckBoxButton(Composite container, String label, String tooltip, boolean selected) { Button b = new Button(container, SWT.CHECK); b.setText(label); b.setToolTipText(tooltip); b.setSelection(selected); return b; } /** * Creates a file browser, with a text and a button to open a file dialog. * <p> * This is a convenience method to create a file browser from a file type.<br /> * <code> * createFileBrowser( parent, true, "WSDL" ); * </code> * is equivalent to * <code> * createFileBrowser( parent, true, new String[]{ WSDL Files (*.wsdl)}, new String[] { "*.wsdl" }); * </code> * </p> * * @param parent the parent * @param selectSeveralFiles true to select several files, false for a single one * @param fileAsUri true to write the file path as an URI, false to write the file path * @param fileType the file type (file extension = file type in lower case) * @return the created text * @see #createFileBrowser(Composite, boolean, boolean, String[], String[]) */ public static TextWithButtonComposite createFileBrowser(Composite parent, boolean selectSeveralFiles, boolean fileAsUri, String fileType) { String ext = "*" + fileType.toLowerCase(); String[] filterNames = new String[] { fileType + " Files (" + ext + ")" }; return createFileBrowser(parent, selectSeveralFiles, fileAsUri, filterNames, new String[] { ext }); } /** * Creates a file browser, with a text and a button to open a file dialog. * * @param parent the parent * @param selectSeveralFiles true to select several files, false for a single one * @param fileAsUri true to write the file path as an URI, false to write the file path * @param filterNames the filter names * @param fileExtensions the file extensions * @return the created composite, with a text containing the file selection * @see #createFileBrowser(Composite, boolean, boolean, String) */ public static TextWithButtonComposite createFileBrowser(final Composite parent, final boolean selectSeveralFiles, final boolean fileAsUri, final String[] filterNames, final String[] fileExtensions) { final TextWithButtonComposite browser = new TextWithButtonComposite(parent); browser.getText().setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); browser.getButton().setText("Browse..."); browser.getButton().addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { FileDialog dlg = new FileDialog(parent.getShell(), selectSeveralFiles ? SWT.MULTI : SWT.SINGLE); dlg.setText("File Selection"); dlg.setFilterNames(filterNames); dlg.setFilterExtensions(fileExtensions); String path = PreferencesManager.getSavedLocation(); if (!StringUtils.isEmpty(path)) dlg.setFilterPath(path); String fn = dlg.open(); if (fn != null) { path = dlg.getFilterPath(); PreferencesManager.setSavedLocation(path); File f = new File(fn); browser.getText().setText(fileAsUri ? f.toURI().toString() : f.getAbsolutePath()); browser.getText().setSelection(browser.getText().getText().length()); } } }); return browser; } /** * Creates a workspace file browser, with a text and a button to open a file dialog. * @param parent the parent * @param container the container to search files * @param reference the file which acts as a reference to compute the relative path of the selection * @param fileExtension a file extension (without the dot, e.g. WSDL) * @return the created composite, with a text containing the file selection */ public static TextWithButtonComposite createWorkspaceFileBrowser(final Composite parent, final IContainer container, final IResource reference, final String fileExtension) { final TextWithButtonComposite browser = new TextWithButtonComposite(parent); browser.getText().setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); browser.getButton().setText("Browse..."); browser.getButton().addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { ElementTreeSelectionDialog dlg = createWorkspaceFileSelectionDialog(parent.getShell(), container, fileExtension + " Selection", "Select " + fileExtension + " files in the workspace.", fileExtension); if (dlg.open() != Window.OK) return; IFile f = (IFile) dlg.getFirstResult(); String s = IoUtils.getRelativeLocationToFile(reference.getLocation().toFile(), f.getLocation().toFile()); browser.getText().setText(s != null ? s : ""); browser.getText().setSelection(browser.getText().getText().length()); } }); return browser; } /** * Creates a directory browser, with a text and a button to open a directory dialog. * @param parent the parent * @return the created composite, with a text containing the file selection */ public static TextWithButtonComposite createDirectoryBrowser(final Composite parent) { final TextWithButtonComposite browser = new TextWithButtonComposite(parent); browser.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); browser.getText().setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); browser.getButton().setText("Browse..."); browser.getButton().addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { DirectoryDialog dlg = new DirectoryDialog(parent.getShell(), SWT.NONE); dlg.setText("Select a Directory"); String path = PreferencesManager.getSavedLocation(); if (!StringUtils.isEmpty(path)) dlg.setFilterPath(path); String fn = dlg.open(); if (fn != null) { browser.getText().setText(fn); browser.getText().setSelection(browser.getText().getText().length()); } } }); return browser; } /** * Creates a file list with a browser to open a file dialog. * <p> * This is a convenience method to create a file list browser from a file type.<br /> * <code> * createFileListViewer( parent, "WSDL" ); * </code> * is equivalent to * <code> * createFileListViewer( parent, new String[]{ WSDL Files (*.wsdl)}, new String[] { "*.wsdl" }); * </code> * </p> * * @param parent the parent * @param fileType the file type (file extension = file type in lower case) * @param files a non-null collection of files (can be empty) * @return the tree viewer that displays the selected files */ public static ListWithButtonComposite createFileListViewer(final Composite parent, String fileType, final Collection<File> files) { String ext = "*" + fileType.toLowerCase(); String[] filterNames = new String[] { fileType + " Files (" + ext + ")" }; return createFileListViewer(parent, filterNames, new String[] { ext }, files); } /** * Creates a file list with a browser to open a file dialog. * <p> * When a file is added or removed, a selection listener is invoked. * </p> * * @param parent the parent * @param filterNames the filter names * @param fileExtensions the file extensions * @param files a non-null collection of files (can be empty) * @return the tree viewer that displays the selected files */ public static ListWithButtonComposite createFileListViewer(final Composite parent, final String[] filterNames, final String[] fileExtensions, final Collection<File> files) { final ListWithButtonComposite lbc = new ListWithButtonComposite(parent); lbc.setLayoutData(new GridData(GridData.FILL_BOTH)); final TableViewer viewer = lbc.getViewer(); viewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH)); viewer.setContentProvider(new ArrayContentProvider()); viewer.setLabelProvider(new LabelProvider() { @Override public String getText(Object element) { if (element instanceof File) return ((File) element).getAbsolutePath(); return super.getText(element); } }); // ADD button lbc.getAddButton().setText("Add"); lbc.getAddButton().setImage(PetalsImages.INSTANCE.getAdd()); lbc.getAddButton().addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { FileDialog dlg = new FileDialog(parent.getShell(), SWT.MULTI); dlg.setText("Select one or several files"); dlg.setFilterNames(filterNames); dlg.setFilterExtensions(fileExtensions); String path = PreferencesManager.getSavedLocation(); if (path.trim().length() > 0) dlg.setFilterPath(path); String fn = dlg.open(); if (fn == null) return; // Process the files path = dlg.getFilterPath(); PreferencesManager.setSavedLocation(path); File parent = new File(path); for (String filename : dlg.getFileNames()) { File chosenFile = new File(parent, filename); files.add(chosenFile); } viewer.setInput(files); viewer.refresh(); lbc.notifyListeners(); } }); // REMOVE button lbc.getRemoveButton().setText("Remove"); lbc.getRemoveButton().setImage(PetalsImages.INSTANCE.getDelete()); lbc.getRemoveButton().addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { Iterator<?> it = ((IStructuredSelection) viewer.getSelection()).iterator(); while (it.hasNext()) { File f = (File) it.next(); files.remove(f); } viewer.setInput(files); viewer.refresh(); lbc.notifyListeners(); } }); return lbc; } /** * Creates a dialog to select a file in the given container. * * @param parent the shell * @param container the parent container (can be the work space root) * @param title the dialog's title * @param desription the dialog's description * @return a selection dialog * @see #createWorkspaceFileSelectionDialog(Shell, IContainer, String, String, String) */ public static ElementTreeSelectionDialog createWorkspaceFileSelectionDialog(Shell parent, IContainer container, String title, String desription) { ElementTreeSelectionDialog dlg = new ElementTreeSelectionDialog(parent, new WorkbenchLabelProvider(), new WorkbenchContentProvider()); dlg.setInput(container); dlg.setTitle(title); dlg.setMessage(desription); return dlg; } /** * Creates a dialog to select a file with a given extension in a given container. * <p> * If you want to select any file in the container, the best solution is to * directly use {@link ElementTreeSelectionDialog} with a {@link WorkbenchContentProvider} * and a {@link WorkbenchLabelProvider}. With respect to this solution, this method * adds filtering capabilities. * </p> * * @param parent the shell * @param container the parent container (can be the work space root) * @param title the dialog's title * @param desription the dialog's description * @param fileExtension the file extension (without the dot) * @return a selection dialog * @see #createWorkspaceFileSelectionDialog(Shell, IContainer, String, String) */ public static ElementTreeSelectionDialog createWorkspaceFileSelectionDialog(Shell parent, IContainer container, String title, String desription, final String fileExtension) { ElementTreeSelectionDialog dlg = new ElementTreeSelectionDialog(parent, new WorkbenchLabelProvider(), new WorkbenchContentProvider() { @Override public Object[] getChildren(Object element) { Object[] result = super.getChildren(element); if (result == null) result = new Object[0]; List<Object> filteredResult = new ArrayList<Object>(); for (Object o : result) { if (o instanceof IFile && fileExtension.equalsIgnoreCase(((IFile) o).getFileExtension())) filteredResult.add(o); else if (o instanceof IContainer && !ResourceUtils .getFiles(fileExtension, Arrays.asList((IContainer) o)).isEmpty()) filteredResult.add(o); } return filteredResult.toArray(); } }); dlg.setInput(container); dlg.setTitle(title); dlg.setMessage(desription); return dlg; } /** * Creates a list dialog with a workbench label provider and an array content provider. * @param shell the parent shell * @param title the title * @param message the message * @return the created list dialog */ public static ListDialog createListDialog(Shell shell, String title, String message) { ListDialog dlg = new ListDialog(shell); dlg.setAddCancelButton(true); dlg.setContentProvider(new ArrayContentProvider()); dlg.setLabelProvider(new WorkbenchLabelProvider()); dlg.setTitle(title); dlg.setMessage(message); return dlg; } /** * Creates grid layout. * * @param columns the number of columns * @param sameWidth true to have make the columns have the same width * @return a new grid layout * @see GridLayout#GridLayout(int, boolean) */ public static GridLayout createGridLayout(int columns, boolean sameWidth) { return new GridLayout(columns, sameWidth); } /** * Creates grid layout with predefined margins. * <p> * Note that width and height margins are both set to 0. * </p> * * @param columns the number of columns * @param sameWidth true to have make the columns have the same width * @param mTop the top margin * @param mRight the right margin * @param mBottom the bottom margin * @param mLeft the left margin * @return a new grid layout * @see GridLayout#GridLayout(int, boolean) */ public static GridLayout createGridLayout(int columns, boolean sameWidth, int mTop, int mRight, int mBottom, int mLeft) { GridLayout layout = new GridLayout(columns, sameWidth); layout.marginWidth = 0; layout.marginHeight = 0; layout.marginBottom = mBottom; layout.marginLeft = mLeft; layout.marginTop = mTop; layout.marginRight = mRight; return layout; } /** * Creates and applies a grid layout to a specific composite. * * @param composite the composite * @param columns the number of columns * @param sameWidth true to have make the columns have the same width * @param mTop the top margin * @param mRight the right margin * @param mBottom the bottom margin * @param mLeft the left margin * * @return the updated composite * @see #createGridLayout(int, boolean, int, int, int, int) */ public static Composite applyNewGridLayout(Composite composite, int columns, boolean sameWidth) { composite.setLayout(createGridLayout(columns, sameWidth)); return composite; } /** * Creates and applies a grid layout to a specific composite. * * @param composite the composite * @param columns the number of columns * @param sameWidth true to have make the columns have the same width * @return the updated composite * @see GridLayout#GridLayout(int, boolean) */ public static Composite applyNewGridLayout(Composite composite, int columns, boolean sameWidth, int mTop, int mRight, int mBottom, int mLeft) { composite.setLayout(createGridLayout(columns, sameWidth, mTop, mRight, mBottom, mLeft)); return composite; } /** * Creates and applies a grid data to a specific control. * <p> * The control fills the space horizontally. * </p> * @param control the control to update */ public static void applyHorizontalGridData(Control control) { control.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); } /** * Creates and applies a grid data to a specific control. * <p> * The control fills the space horizontally. * </p> * @param control the control to update * @param hSpan the horizontal span */ public static void applyHorizontalGridData(Control control, int hSpan) { GridData layoutData = new GridData(GridData.FILL_HORIZONTAL); layoutData.horizontalSpan = hSpan; control.setLayoutData(layoutData); } /** * Creates and applies a grid data to a specific control. * <p> * The control fills the space horizontally. * </p> * @param control the control to update * @param hSpan the horizontal span * @param vIndent the vertical indent */ public static void applyHorizontalGridData(Control control, int hSpan, int vIndent) { GridData layoutData = new GridData(GridData.FILL_HORIZONTAL); layoutData.horizontalSpan = hSpan; layoutData.verticalIndent = vIndent; control.setLayoutData(layoutData); } /** * Creates and applies a grid data to a specific control. * <p> * The control fills the space horizontally. * </p> * @param control the control to update * @param hSpan the horizontal span * @param vIndent the vertical indent */ public static void applyGridData(Control control, int hSpan, int vIndent) { GridData layoutData = new GridData(); layoutData.horizontalSpan = hSpan; layoutData.verticalIndent = vIndent; control.setLayoutData(layoutData); } /** * Creates and applies a grid data to a specific control. * <p> * The control fills the space horizontally and vertically. * </p> * @param control the control to update */ public static void applyGrabbingGridData(Control control) { control.setLayoutData(new GridData(GridData.FILL_BOTH)); } /** * Creates and applies a grid data to a specific control. * <p> * The control fills the space horizontally. * </p> * @param control the control to update * @param hSpan the horizontal span */ public static void applyGrabbingGridData(Control control, int hSpan) { GridData layoutData = new GridData(GridData.FILL_BOTH); layoutData.horizontalSpan = hSpan; control.setLayoutData(layoutData); } /** * Creates and applies a grid data to a specific control. * <p> * The control fills the space horizontally. * </p> * @param control the control to update * @param hSpan the horizontal span * @param vIndent the vertical indent */ public static void applyGrabbingGridData(Control control, int hSpan, int vIndent) { GridData layoutData = new GridData(GridData.FILL_BOTH); layoutData.horizontalSpan = hSpan; layoutData.verticalIndent = vIndent; control.setLayoutData(layoutData); } /** * Creates and applies a grid data to a specific control. * * @param control the control to update * @param hAlign the horizontal alignment * @param vAlign the vertical alignment * @param grabHSpace true to grab extra horizontal space * @param grabVSpace true to grab extra vertical space * @see GridData#GridData(int, int, boolean, boolean) */ public static void applyNewGridData(Control control, int hAlign, int vAlign, boolean grabHSpace, boolean grabVSpace) { control.setLayoutData(new GridData(hAlign, vAlign, grabHSpace, grabVSpace)); } }