package com.akjava.gwt.threejsexamples.client;
import java.util.HashMap;
import java.util.Map;
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.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
public class LabeledInputRangeWidget extends HorizontalPanel{
private DeprecatedRange range;
private TextBox textBox;
private Map<ValueChangeHandler<Number>,HandlerRegistration> registMap=new HashMap<ValueChangeHandler<Number>, HandlerRegistration>();
public LabeledInputRangeWidget(String name,Number min,Number max,Number step){
this.setVerticalAlignment(ALIGN_MIDDLE);
Label label=new Label(name);
label.setAutoHorizontalAlignment(ALIGN_CENTER);
label.setWidth("120px");
add(label);
range = new DeprecatedRange(name,min,max,step);
range.setWidth("140px");
add(range);
textBox = new TextBox();
textBox.setEnabled(true);
textBox.setWidth("40px");
add(textBox);
textBox.setValue(String.valueOf(range.getValue()));
range.addValueChangeHandler(new ValueChangeHandler<Number>() {
@Override
public void onValueChange(ValueChangeEvent<Number> event) {
setTextBoxText(String.valueOf(event.getValue()));
}
});
textBox.setReadOnly(true);//not yet
}
public void setTextBoxText(String value){
int min=5;
if(value.startsWith("-")){
min=6;
}
value=value.substring(0, Math.min(min, value.length()));//limit text
textBox.setValue(value);
}
public void setValue(double value){
setTextBoxText(String.valueOf(value));
range.setValue(value);
}
public double getValue(){
return (Double) range.getValue();
}
public void addtRangeListener(ValueChangeHandler<Number> handler){
HandlerRegistration regist=range.addValueChangeHandler(handler);
registMap.put(handler,regist);
}
public void removeRangeListener(ValueChangeHandler<Number> handler){
if(registMap.get(handler)!=null){
registMap.get(handler).removeHandler();
}
}
/*now range set .point value.
public int parseDivided(Number value){
if(value instanceof Integer){
return 1;
}else{
String v=String.valueOf(value);
int s=v.indexOf(".");
if(s==-1){
return 1;
}
return (int)Math.pow(10, v.length()-s);
}
}*/
}