package com.eas.widgets;
import com.eas.core.Utils;
import com.eas.ui.events.HasHideHandlers;
import com.eas.ui.events.HasShowHandlers;
import com.eas.ui.events.HideEvent;
import com.eas.ui.events.HideHandler;
import com.eas.ui.events.ShowEvent;
import com.eas.ui.events.ShowHandler;
import com.eas.widgets.boxes.SpinnerBox;
import com.google.gwt.dom.client.InputElement;
import com.google.gwt.event.logical.shared.HasResizeHandlers;
import com.google.gwt.event.logical.shared.ResizeEvent;
import com.google.gwt.event.logical.shared.ResizeHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.ui.HasName;
import com.google.gwt.user.client.ui.ValueBox;
public class ConstraintedSpinnerBox extends SpinnerBox<Double> implements HasShowHandlers, HasHideHandlers,
HasResizeHandlers, HasName {
protected double step = 1.0;
protected Double min;
protected Double max;
public ConstraintedSpinnerBox(ValueBox<Double> aDecorated) {
super(aDecorated);
if (Utils.isMobile()) {
field.getElement().<InputElement>cast().setAttribute("type", "number");
}
}
@Override
public HandlerRegistration addResizeHandler(ResizeHandler handler) {
return addHandler(handler, ResizeEvent.getType());
}
@Override
public void onResize() {
super.onResize();
if (isAttached()) {
ResizeEvent.fire(this, getElement().getOffsetWidth(), getElement().getOffsetHeight());
}
}
@Override
public HandlerRegistration addHideHandler(HideHandler handler) {
return addHandler(handler, HideEvent.getType());
}
@Override
public HandlerRegistration addShowHandler(ShowHandler handler) {
return addHandler(handler, ShowEvent.getType());
}
@Override
public void setVisible(boolean visible) {
boolean oldValue = isVisible();
super.setVisible(visible);
if (oldValue != visible) {
if (visible) {
ShowEvent.fire(this, this);
} else {
HideEvent.fire(this, this);
}
}
}
@Override
protected void increment() {
Double oldValue = getValue();
Double newValue = (oldValue != null ? oldValue : 0) + step;
if (max == null || newValue <= max) {
setValue(newValue, true);
}
}
@Override
protected void decrement() {
Double oldValue = getValue();
Double newValue = (oldValue != null ? oldValue : 0) - step;
if (min == null || newValue >= min) {
setValue(newValue, true);
}
}
public Double getMin() {
return min;
}
public void setMin(Double aValue) {
min = aValue;
field.getElement().setAttribute("min", aValue + "");
}
public Double getMax() {
return max;
}
public void setMax(Double aValue) {
max = aValue;
field.getElement().setAttribute("max", aValue + "");
}
public Double getStep() {
return step;
}
public void setStep(Double aValue) {
step = aValue;
field.getElement().setAttribute("step", aValue + "");
}
}