/*******************************************************************************
* Copyright (c) 2007 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.common.ui.widget.editor;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Collection;
import org.eclipse.core.runtime.Assert;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Text;
import org.jboss.tools.common.ui.CommonUIMessages;
import org.jboss.tools.common.ui.widget.field.TextField;
/**
*
* @author eskimo(dgolovin@exadel.com)
*
*/
public class TextFieldEditor extends BaseFieldEditor implements PropertyChangeListener{
String message = null;
/**
*
*/
public static final int UNLIMITED = -1;
protected int style = -1;
/**
*
* @param name
* @param aLabelText
* @param defaultvalue
*/
public TextFieldEditor(String name,String aLabelText,String defaultvalue) {
super(name, aLabelText, defaultvalue);
}
/**
*
* @param name
* @param aLabelText
* @param defaultvalue
* @param editable
*/
public TextFieldEditor(String name,String aLabelText,String defaultvalue,boolean editable) {
super(name, aLabelText, defaultvalue);
setEditable(editable);
}
/**
*
*/
protected TextField fTextField = null;
/**
*
*/
protected int fWidthInChars = 0;
public void setMessage(String message) {
this.message = message;
}
/**
*
*/
@Override
public Object[] getEditorControls() {
return new Control[] {getTextControl()};
}
/*
* (non-Javadoc)
* @see org.jboss.tools.seam.ui.widget.editor.BaseFieldEditor#doFillIntoGrid(java.lang.Object)
*/
@Override
public void doFillIntoGrid(Object aParent) {
Assert.isTrue(aParent instanceof Composite, CommonUIMessages.TEXT_FIELD_EDITOR_PARENT_CONTROL_SHOULD_BE_COMPOSITE);
Assert.isTrue(((Composite)aParent).getLayout() instanceof GridLayout,CommonUIMessages.TEXT_FIELD_EDITOR_EDITOR_SUPPORTS_ONLY_GRID_LAYOUT);
Composite aComposite = (Composite) aParent;
Control[] controls = (Control[])getEditorControls(aComposite);
GridLayout gl = (GridLayout)((Composite)aParent).getLayout();
getTextControl(aComposite);
GridData gd = new GridData();
gd.horizontalSpan = gl.numColumns - 1;
gd.horizontalAlignment = GridData.FILL;
gd.grabExcessHorizontalSpace = true;
fTextField.getTextControl().setLayoutData(gd);
}
/**
*
* @param parent
* @return
*/
public Text getTextControl(Composite parent) {
if (fTextField == null) {
fTextField = new TextField(parent, getInitialStyle());
Text textField = fTextField.getTextControl();
textField.setFont(parent.getFont());
Object value = getValue();
textField.setText(getValue().toString());
textField.setEditable(isEditable());
textField.setEnabled(isEnabled());
fTextField.addPropertyChangeListener(this);
if(message != null) {
fTextField.getTextControl().setMessage(message);
}
} else if (parent!=null){
Assert.isTrue(parent==fTextField.getTextControl().getParent());
}
return fTextField.getTextControl();
}
/**
*
*/
protected void updateWidgetValues() {
setValueAsString(getValueAsString());
}
/**
*
* @return
*/
protected int getInitialStyle() {
if(this.style >= 0) return style;
return SWT.SINGLE | SWT.BORDER;
}
/*
* @param value
* @return
*/
private String checkCollection(Object value){
return value != null && (!((Collection)value).isEmpty()) ? prepareCollectionToString((Collection)value) : ""; //$NON-NLS-1$
}
/*
* @param collection
* @return
*/
private String prepareCollectionToString(Collection collection)
{
String stringValue = ""; //$NON-NLS-1$
Object[] objects = collection.toArray();
for(int i = 0; i < objects.length; i++){
stringValue += objects[i];
if(i < objects.length - 1)
stringValue += " "; //$NON-NLS-1$
}
return stringValue;
}
/*
* @param value
* @return
*/
private String checkSimple(Object value){
return (value != null) ? value.toString() : ""; //$NON-NLS-1$
}
/**
*
*/
@Override
public int getNumberOfControls() {
return 2;
}
/**
* Returns this field editor's text control.
*
* @return the text control, or <code>null</code> if no
* text field is created yet
*/
protected Text getTextControl() {
return fTextField!=null?fTextField.getTextControl():null;
}
/*
* (non-Javadoc)
* @see org.jboss.tools.seam.ui.widget.editor.BaseFieldEditor#setFocus()
*/
@Override
public boolean setFocus() {
boolean setfocus = false;
if(fTextField!=null && !fTextField.getTextControl().isDisposed())
setfocus = fTextField.getTextControl().setFocus();
return setfocus;
}
/**
*
*/
@Override
public Object[] getEditorControls(Object composite) {
return new Control[]{getTextControl((Composite)composite)};
}
/**
*
* @param object
*/
public void save(Object object) {
}
/**
*
*/
@Override
public void setValue(Object newValue) {
super.setValue(newValue);
if(fTextField!=null){
fTextField.removePropertyChangeListener(this);
fTextField.getTextControl().setText(newValue.toString());
fTextField.addPropertyChangeListener(this);
}
}
/**
*
*/
@Override
public void setEditable(boolean aEditable) {
super.setEditable(aEditable);
if(getTextControl()!=null) getTextControl().setEditable(aEditable);
}
/**
*
*/
public void propertyChange(PropertyChangeEvent evt) {
super.setValue(evt.getNewValue());
}
}