package scrum.client.search; import ilarkesto.core.scope.Scope; import ilarkesto.gwt.client.Gwt; import scrum.client.common.AScrumWidget; import com.google.gwt.event.dom.client.KeyPressEvent; import com.google.gwt.event.dom.client.KeyPressHandler; import com.google.gwt.event.dom.client.KeyUpEvent; import com.google.gwt.event.dom.client.KeyUpHandler; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.Widget; public class SearchInputWidget extends AScrumWidget { private Search search; private TextBox input; private boolean dirty; @Override protected Widget onInitialization() { search = Scope.get().getComponent(Search.class); input = new TextBox(); input.addKeyUpHandler(new InputHandler()); input.addKeyPressHandler(new SubmitHandler()); SearchTimer timer = new SearchTimer(); timer.scheduleRepeating(1000); return Gwt.createDiv("SearchInputWidget", input); } private void submitSearch() { dirty = false; search.search(input.getText()); } class InputHandler implements KeyUpHandler { public void onKeyUp(KeyUpEvent event) { dirty = true; } } class SubmitHandler implements KeyPressHandler { public void onKeyPress(KeyPressEvent event) { if (event.getCharCode() == 13) submitSearch(); } } class SearchTimer extends Timer { @Override public void run() { if (dirty && input.getText().length() > 3) { submitSearch(); } } } }