package org.ovirt.engine.ui.webadmin.widget.editor;
import org.ovirt.engine.ui.webadmin.widget.IntegerSlider;
import com.google.gwt.editor.client.LeafValueEditor;
import com.google.gwt.event.dom.client.KeyDownHandler;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.event.dom.client.KeyUpHandler;
import com.google.gwt.event.logical.shared.HasValueChangeHandlers;
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.i18n.client.NumberFormat;
import com.google.gwt.user.client.TakesValue;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.TextBox;
/**
* This class extends Composite instead of InputText and embeds a slider widget
* for setting its value.
*/
public class EntityModelInputWithSlider extends Composite implements
EditorWidget<Object, LeafValueEditor<Object>>, TakesValue<Object>,
HasValueChangeHandlers<Object> {
private TakesValueWithChangeHandlersEditor<Object> editor;
private TextBox t;
private IntegerSlider slider;
public EntityModelInputWithSlider(int min, int max) {
HorizontalPanel panel = new HorizontalPanel();
t = new TextBox();
t.setEnabled(false);
t.setVisibleLength(2);
slider = new IntegerSlider(min, max);
slider.setNumTicks(max-1);
slider.setStepSize(1);
slider.setNumLabels(0);
slider.addValueChangeHandler(new ValueChangeHandler<Integer>() {
@Override
public void onValueChange(ValueChangeEvent<Integer> event) {
t.setValue(NumberFormat.getFormat("#").format(event.getValue()));
}
});
panel.add(t);
panel.setCellVerticalAlignment(t, HasVerticalAlignment.ALIGN_BOTTOM);
panel.add(slider);
panel.setCellWidth(slider, "80%");
initWidget(panel);
}
@Override
public TakesValueWithChangeHandlersEditor<Object> asEditor() {
if (editor == null) {
editor = TakesValueWithChangeHandlersEditor.of(this, this);
}
return editor;
}
public IntegerSlider asSlider() {
return slider;
}
@Override
public HandlerRegistration addKeyUpHandler(KeyUpHandler handler) {
return asSlider().addKeyUpHandler(handler);
}
@Override
public HandlerRegistration addKeyDownHandler(KeyDownHandler handler) {
return asSlider().addKeyDownHandler(handler);
}
@Override
public HandlerRegistration addKeyPressHandler(KeyPressHandler handler) {
return asSlider().addKeyPressHandler(handler);
}
@Override
public int getTabIndex() {
return asSlider().getTabIndex();
}
@Override
public void setAccessKey(char key) {
asSlider().setAccessKey(key);
}
@Override
public void setFocus(boolean focused) {
asSlider().setFocus(focused);
}
@Override
public void setTabIndex(int index) {
asSlider().setTabIndex(index);
}
@Override
public boolean isEnabled() {
return asSlider().isEnabled();
}
@Override
public void setEnabled(boolean enabled) {
asSlider().setEnabled(enabled);
}
public Object getValue() {
return asSlider().getValue();
}
@Override
public void setValue(Object value) {
asSlider().setValue((Integer)value);
t.setValue(value.toString());
}
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public HandlerRegistration addValueChangeHandler(ValueChangeHandler handler) {
return asSlider().addValueChangeHandler(handler);
}
}