package com.eas.widgets.boxes;
import com.eas.ui.HasDecorationsWidth;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.TextAreaElement;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.ui.TextArea;
public class NullableTextArea extends TextArea implements HasDecorationsWidth {
protected TextAreaElement inputElem;
protected String value;
private boolean valueChangeHandlerInitialized;
public NullableTextArea() {
super(Document.get().createTextAreaElement());
setStyleName("form-control");
}
public NullableTextArea(Element elem) {
super(elem);
inputElem = TextAreaElement.as(elem);
}
@Override
public void setDecorationsWidth(int aDecorationsWidth) {
getElement().getStyle().setPaddingRight(aDecorationsWidth, Style.Unit.PX);
}
@Override
public void setValue(String aValue, boolean fireEvents) {
String oldValue = getValue();
value = aValue;
if (value == null ? oldValue != null : !value.equals(oldValue)) {
setText(aValue != null ? aValue : "");
if (fireEvents) {
ValueChangeEvent.fire(this, aValue);
}
}
}
@Override
public String getValue() {
return value;
}
@Override
public HandlerRegistration addValueChangeHandler(ValueChangeHandler<String> handler) {
// Initialization code
if (!valueChangeHandlerInitialized) {
valueChangeHandlerInitialized = true;
addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
setValue(getText(), true);
}
});
}
return addHandler(handler, ValueChangeEvent.getType());
}
}