package org.aplikator.client.local.widgets; import org.aplikator.client.shared.descriptor.PropertyDTO; import org.gwtbootstrap3.client.ui.TextArea; import com.google.gwt.core.client.Scheduler; import com.google.gwt.event.dom.client.KeyUpEvent; import com.google.gwt.event.dom.client.KeyUpHandler; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.event.shared.HandlerRegistration; public class TextAreaWidget extends DataFieldBase implements DataField<String> { private TextArea area = new TextArea(); private String oldValue = ""; public TextAreaWidget(String caption, PropertyDTO property, int size, int rows, int height) { super(caption, property); controlHolder.add(area); //area.addStyleName(PaneWidgetResources.INSTANCE.css().formData()); area.addValueChangeHandler(new ValueChangeHandler<String>() { @Override public void onValueChange(ValueChangeEvent<String> event) { setDirty(true); } }); area.addKeyUpHandler(new KeyUpHandler() { @Override public void onKeyUp(KeyUpEvent event) { if (!oldValue.equals(area.getValue())) { oldValue = area.getValue(); ValueChangeEvent.fire(area, area.getValue()); } } }); if (property.getRefferedThrough() != null) { this.setEnabled(false); } this.setGridSize(size); if (rows > 0) { area.setVisibleLines(rows); } else if (height > 0) { area.setHeight("" + height + "px"); } else { area.setVisibleLines(4); } } public String getValue() { return new String(area.getValue()); } public void setValue(String value) { if (value == null) { oldValue = ""; } else { oldValue = value; } area.setValue(value); } public HandlerRegistration addValueChangeHandler(ValueChangeHandler<String> handler) { return area.addValueChangeHandler(handler); } public void setEnabled(boolean enabled) { if (property.getRefferedThrough() != null) { enabled = false; } area.setEnabled(enabled); } @Override public void grabFocus() { Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() { @Override public void execute() { area.setFocus(true); } }); } }