/*! ******************************************************************************
*
* Pentaho Data Integration
*
* Copyright (C) 2002-2013 by Pentaho : http://www.pentaho.com
*
*******************************************************************************
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************/
package org.pentaho.di.ui.core.widget;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.pentaho.di.core.util.Assert;
import org.pentaho.di.core.variables.VariableSpace;
/**
* @author <a href="mailto:thomas.hoedl@aschauer-edv.at">Thomas Hoedl(asc042)</a>
*
*/
public class PluginWidgetFactory {
/**
* The margin.
*/
public static final int DEFAULT_MARGIN = 4;
/**
* The default middle.
*/
public static final int DEFAULT_MIDDLE = 35;
public static final int DEFAULT_RIGHT_OFFSET = 100;
private final Shell shell;
private final VariableSpace varSpace;
private int margin = DEFAULT_MARGIN;
private int middle = DEFAULT_MIDDLE;
private int rightOffset = DEFAULT_RIGHT_OFFSET;
/**
* Constructor.
*
* @param shell
* the shell to set.
* @param varSpace
* the variableSpace to be used. e.g. for TextVar
* @throws IllegalArgumentException
* if shell is null.
*/
public PluginWidgetFactory( final Shell shell, final VariableSpace varSpace ) throws IllegalArgumentException {
Assert.assertNotNull( shell, "Shell cannot be null" );
Assert.assertNotNull( varSpace, "transMeta cannot be null" );
this.shell = shell;
this.varSpace = varSpace;
}
/**
* @return the margin
*/
public int getMargin() {
return this.margin;
}
/**
* @param margin
* the margin to set
*/
public void setMargin( final int margin ) {
this.margin = margin;
}
/**
* @return the middle
*/
public int getMiddle() {
return this.middle;
}
/**
* @param middle
* the middle to set
*/
public void setMiddle( final int middle ) {
this.middle = middle;
}
/**
* Create label.
*
* @param text
* text to set.
* @return new label.
*/
public Label createRightLabel( final String text ) {
return this.createLabel( SWT.RIGHT, text );
}
/**
* Create label.
*
* @param style
* style to use.
* @param text
* text to set.
* @return new label.
*/
public Label createLabel( final int style, final String text ) {
final Label label = new Label( this.shell, style );
label.setText( text );
return label;
}
/**
* Convenience method to create FormData for labels.
*
* @param topControl
* the control which is above the current label, or null if none above.
* @return layoutData.
*/
public FormData createLabelLayoutData( final Control topControl ) {
FormData formData = new FormData();
formData.left = new FormAttachment( 0, 0 );
formData.right = new FormAttachment( this.middle, -this.margin );
if ( topControl != null ) {
formData.top = new FormAttachment( topControl, this.margin );
} else {
formData.top = new FormAttachment( 0, this.margin );
}
return formData;
}
/**
* Convenience method to create FormData for Controls beside a label.
*
* @param topControl
* the control which is above the current label, or null if none above.
* @return layoutData.
*/
public FormData createControlLayoutData( final Control topControl ) {
FormData formData = new FormData();
formData.left = new FormAttachment( this.middle, 0 );
if ( topControl != null ) {
formData.top = new FormAttachment( topControl, this.margin );
} else {
formData.top = new FormAttachment( 0, this.margin );
}
formData.right = new FormAttachment( this.rightOffset, 0 );
return formData;
}
/**
* @param text
* text to set.
* @return text widget.
*/
public Text createSingleTextLeft( final String text ) {
return this.createText( SWT.SINGLE | SWT.LEFT | SWT.BORDER, text );
}
/**
* @param style
* style to use.
* @param text
* text to set.
* @return text widget.
*/
public Text createText( final int style, final String text ) {
final Text textWidget = new Text( this.shell, style );
textWidget.setText( text );
return textWidget;
}
/**
* @return new ...
*/
public TextVar createSingleTextVarLeft() {
return new TextVar( this.varSpace, this.shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
}
/**
* @param style
* style to use.
* @param text
* text to set.
* @return new button.
*/
public Button createButton( final int style, final String text ) {
final Button button = new Button( this.shell, style );
button.setText( text );
return button;
}
/**
* @param text
* text to set.
* @return new button.
*/
public Button createPushButton( final String text ) {
return this.createButton( SWT.PUSH, text );
}
}