raimund@1534: package de.intevation.flys.client.client.ui; raimund@1534: raimund@1534: import java.util.ArrayList; raimund@1534: import java.util.List; raimund@1536: import java.util.Map; raimund@1534: raimund@1534: import com.google.gwt.core.client.GWT; raimund@1534: raimund@1534: import com.smartgwt.client.widgets.form.DynamicForm; raimund@1534: import com.smartgwt.client.widgets.form.fields.TextItem; raimund@1534: import com.smartgwt.client.widgets.form.fields.events.ChangedEvent; raimund@1534: import com.smartgwt.client.widgets.form.fields.events.ChangedHandler; raimund@1534: import com.smartgwt.client.widgets.form.fields.events.KeyUpEvent; raimund@1534: import com.smartgwt.client.widgets.form.fields.events.KeyUpHandler; raimund@1534: import com.smartgwt.client.widgets.layout.HLayout; raimund@1534: raimund@1534: import de.intevation.flys.client.client.event.FilterHandler; raimund@1534: import de.intevation.flys.client.client.event.RangeFilterEvent; raimund@1534: import de.intevation.flys.client.client.FLYSConstants; raimund@1536: import de.intevation.flys.client.client.utils.DoubleValidator; raimund@1534: raimund@1534: /** raimund@1534: * @author Raimund Renkert raimund@1534: */ raimund@1534: public class RangeTableFilter raimund@1534: extends HLayout raimund@1534: implements ChangedHandler, KeyUpHandler raimund@1534: { raimund@1534: /** The message class that provides i18n strings. */ raimund@1534: protected FLYSConstants MESSAGES = GWT.create(FLYSConstants.class); raimund@1534: raimund@1534: protected List handlers; raimund@1534: raimund@1534: protected TextItem fromField; raimund@1534: protected TextItem toField; raimund@1536: protected DynamicForm filterForm; raimund@1534: raimund@1534: public RangeTableFilter() { raimund@1534: super(); raimund@1534: fromField = new TextItem(); raimund@1534: fromField.setTitle(MESSAGES.from()); raimund@1534: fromField.setWidth(60); raimund@1534: toField = new TextItem(); raimund@1534: toField.setTitle(MESSAGES.to()); raimund@1534: toField.setWidth(60); raimund@1534: raimund@1534: raimund@1534: handlers = new ArrayList(); raimund@1534: raimund@1534: fromField.addChangedHandler(this); raimund@1534: fromField.addKeyUpHandler(this); raimund@1534: toField.addChangedHandler(this); raimund@1534: toField.addKeyUpHandler(this); raimund@1534: raimund@1536: filterForm = new DynamicForm(); raimund@1536: filterForm.setNumCols(4); raimund@1536: filterForm.setFields(fromField, toField); raimund@1534: raimund@1536: addMember(filterForm); raimund@1534: } raimund@1534: raimund@1534: raimund@1534: public void onChanged(ChangedEvent event) { raimund@1534: // This event handler is to slow... raimund@1534: // fireFilterCriteriaChanged(getSearchString()); raimund@1534: } raimund@1534: raimund@1534: raimund@1534: public void onKeyUp(KeyUpEvent event) { raimund@1536: DoubleValidator validator = new DoubleValidator(); raimund@1536: Map errors = filterForm.getErrors(); sascha@2905: if(event.getItem().getValue() != null && raimund@1536: !validator.validate(event.getItem(), errors)) { raimund@1536: filterForm.setErrors(errors, true); raimund@1536: GWT.log("no valid input!"); raimund@1536: return; raimund@1536: } raimund@1536: else { raimund@1536: errors.clear(); raimund@1536: filterForm.setErrors(errors, true); raimund@1536: } raimund@1534: //To deactivate "As you type" filter add raimund@1534: // ' && event.getKeyName().equals("Enter")' raimund@1534: // to the if-clause. raimund@1534: if (event != null) { raimund@1534: fireFilterCriteriaChanged(getFrom(), getTo()); raimund@1534: } raimund@1534: } raimund@1534: raimund@1534: raimund@1534: public String getFrom() { raimund@1534: if (fromField.getValueAsString() == null) { raimund@1534: return ""; raimund@1534: } raimund@1534: else { raimund@1534: return fromField.getValueAsString(); raimund@1534: } raimund@1534: } raimund@1534: raimund@1534: raimund@1534: public String getTo() { raimund@1534: if (toField.getValueAsString() == null) { raimund@1534: return ""; raimund@1534: } raimund@1534: else { raimund@1534: return toField.getValueAsString(); raimund@1534: } raimund@1534: } raimund@1534: raimund@1534: raimund@1534: public void addFilterHandler(FilterHandler handler) { raimund@1534: if (handler != null) { raimund@1534: handlers.add(handler); raimund@1534: } raimund@1534: } raimund@1534: raimund@1534: raimund@1534: protected void fireFilterCriteriaChanged(String from, String to) { raimund@1534: RangeFilterEvent filter = new RangeFilterEvent(from, to); raimund@1534: raimund@1534: for (FilterHandler handler: handlers) { raimund@1534: handler.onFilterCriteriaChanged(filter); raimund@1534: } raimund@1534: } raimund@1534: raimund@1534: raimund@1534: public void clear() { raimund@1534: fromField.clearValue(); raimund@1534: toField.clearValue(); raimund@1534: fireFilterCriteriaChanged("", ""); raimund@1534: } raimund@1534: } raimund@1534: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :