/* * Ext GWT 2.2.4 - Ext for GWT * Copyright(c) 2007-2010, Ext JS, LLC. * licensing@extjs.com * * http://extjs.com/license */ package com.extjs.gxt.ui.client.widget.form; import com.extjs.gxt.ui.client.GXT; 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; /** * Creates a new slider field. * * @param slider the slider to be wrapped. */ public SliderField(Slider slider) { super(); setSlider(slider); } /** * Returns the slider component. * * @return the slider. */ public Slider getSlider() { return slider; } @Override public void setReadOnly(boolean readOnly) { super.setReadOnly(readOnly); if (readOnly) { slider.disable(); } else if (!readOnly && isEnabled()) { slider.enable(); } } /** * Sets the slider component. * * @param slider the slider */ public void setSlider(Slider slider) { assertPreRender(); if (listener == null) { listener = new Listener<SliderEvent>() { public void handleEvent(SliderEvent be) { if (rendered) { updateHiddenField(); } } }; } if (this.slider != slider) { if (this.slider != null) { ComponentHelper.removeFromParent(this.slider); this.slider.removeListener(Events.Change, listener); } this.slider = slider; slider.getFocusSupport().setIgnore(true); ComponentHelper.setParent(this, slider); slider.addListener(Events.Change, listener); } } @Override public void setValue(Integer value) { if (value == null) { int min = slider.getMinValue(); slider.setValue(min); super.setValue(min); } else { slider.setValue(value); super.setValue(value); } } @Override protected void afterRender() { super.afterRender(); updateHiddenField(); El elem = findLabelElement(); if (elem != null) { elem.dom.setAttribute("for", slider.getId()); } } @Override protected void doAttachChildren() { super.doAttachChildren(); ComponentHelper.doAttach(slider); } @Override protected void doDetachChildren() { super.doDetachChildren(); ComponentHelper.doDetach(slider); } @Override protected El getFocusEl() { return slider.getFocusEl(); } @Override protected El getInputEl() { return hidden; } @Override protected void onDisable() { super.onDisable(); slider.disable(); } @Override protected void onEnable() { super.onEnable(); if (!readOnly) { slider.enable(); } } @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); if (GXT.isIE) { el().makePositionable(); } 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() + ""); } } }