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