package com.sksamuel.jqm4gwt.form.elements; import com.google.gwt.dom.client.Document; import com.google.gwt.event.dom.client.DomEvent; import com.google.gwt.event.shared.GwtEvent; import com.google.gwt.event.shared.HandlerRegistration; import com.sksamuel.jqm4gwt.JQMCommon; import com.sksamuel.jqm4gwt.events.JQMChangeHandler; import com.sksamuel.jqm4gwt.events.JQMComponentEvents; import com.sksamuel.jqm4gwt.events.JQMEvent; import com.sksamuel.jqm4gwt.events.JQMEventFactory; import com.sksamuel.jqm4gwt.events.JQMHandlerRegistration; import com.sksamuel.jqm4gwt.events.JQMHandlerRegistration.WidgetHandlerCounter; import com.sksamuel.jqm4gwt.events.JQMInputHandler; /** * @author Stephen K Samuel samspade79@gmail.com 18 May 2011 04:17:45 * * <br> Text element stylised as a search box. * * <br> See <a href="http://demos.jquerymobile.com/1.4.5/forms/#search">Search Input</a> * */ public class JQMSearch extends JQMText { /** * Create a new {@link JQMSearch} with no label text */ public JQMSearch() { this(null); } /** * Create a new {@link JQMSearch} with the given label text * * @param text - the text to use as the label */ public JQMSearch(String text) { super(text); setType("search"); initChangeHandler(); } @Override public String getValue() { return JQMCommon.getVal(getInputId()); } @Override public void setValue(String value, boolean fireEvents) { JQMCommon.setVal(getInputId(), value); if (fireEvents) DomEvent.fireNativeEvent(Document.get().createChangeEvent(), input); } /** * Standard GWT ChangeEvent is not working for search input, that's why we have to activate * it manually by listening jQuery change event. */ private void initChangeHandler() { JQMChangeHandler handler = new JQMChangeHandler() { @Override public void onEvent(JQMEvent<?> event) { DomEvent.fireNativeEvent(Document.get().createChangeEvent(), input); }}; JQMHandlerRegistration.registerJQueryHandler(new WidgetHandlerCounter() { @Override public int getHandlerCountForWidget(GwtEvent.Type<?> type) { return getHandlerCount(type); } }, this, handler, JQMComponentEvents.CHANGE, JQMEventFactory.getType(JQMComponentEvents.CHANGE, JQMChangeHandler.class)); } /** * Occurs on every entered/deleted symbol. * <br><b>Warning!</b> Clear button does not raise this event, use * addValueChangeHandler() to react on it. */ public HandlerRegistration addInputHandler(JQMInputHandler handler) { if (handler == null) return null; return JQMHandlerRegistration.registerJQueryHandler(new WidgetHandlerCounter() { @Override public int getHandlerCountForWidget(GwtEvent.Type<?> type) { return getHandlerCount(type); } }, this, handler, JQMComponentEvents.INPUT, JQMEventFactory.getType(JQMComponentEvents.INPUT, JQMInputHandler.class)); } }