/* * Ext GWT - Ext for GWT * Copyright(c) 2007-2009, Ext JS, LLC. * licensing@extjs.com * * http://extjs.com/license */ package com.extjs.gxt.ui.client.widget.form; import com.extjs.gxt.ui.client.core.El; import com.extjs.gxt.ui.client.event.Events; import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.event.SliderEvent; import com.extjs.gxt.ui.client.widget.ComponentHelper; import com.extjs.gxt.ui.client.widget.Slider; import com.google.gwt.dom.client.Document; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Element; /** * Field which wraps a <code>Slider</code>. */ public class SliderField extends Field<Integer> { private Slider slider; protected El hidden; protected Listener<SliderEvent> listener; public SliderField(Slider slider) { super(); setSlider(slider); } @Override public El getFocusEl() { return slider.getFocusEl(); } @Override public El getInputEl() { return hidden; } public Slider getSlider() { return slider; } @Override public void setValue(Integer value) { slider.setValue(value); super.setValue(value); } public void setSlider(Slider slider) { assertPreRender(); if (listener == null) { listener = new Listener<SliderEvent>() { public void handleEvent(SliderEvent be) { if (rendered) { updateHiddenField(); } } }; } this.slider = slider; slider.addListener(Events.Change, listener); } @Override protected void afterRender() { super.afterRender(); updateHiddenField(); } @Override protected void doAttachChildren() { super.doAttachChildren(); ComponentHelper.doAttach(slider); } @Override protected void doDetachChildren() { super.doDetachChildren(); ComponentHelper.doDetach(slider); } @Override protected void onRender(Element parent, int index) { setElement(DOM.createDiv(), parent, index); slider.render(getElement()); hidden = new El((Element) Document.get().createHiddenInputElement().cast());; getElement().appendChild(hidden.dom); super.onRender(parent, index); } @Override protected void onResize(int width, int height) { if (rendered) { if (slider.isVertical()) { slider.setHeight(height); } else { slider.setWidth(width); } } super.onResize(width, height); } protected void updateHiddenField() { if (rendered) { hidden.setValue(slider.getValue() + ""); } } }