raimund@1534: package de.intevation.flys.client.client.ui;
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:
christian@4184: import de.intevation.flys.client.client.FLYSConstants;
raimund@1534: import de.intevation.flys.client.client.event.FilterHandler;
raimund@1534: import de.intevation.flys.client.client.event.RangeFilterEvent;
raimund@1536: import de.intevation.flys.client.client.utils.DoubleValidator;
raimund@1534:
christian@4184: import java.util.ArrayList;
christian@4184: import java.util.List;
christian@4184: import java.util.Map;
christian@4184:
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:
christian@4184: @Override
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:
christian@4184: @Override
raimund@1534: public void onKeyUp(KeyUpEvent event) {
raimund@1536: DoubleValidator validator = new DoubleValidator();
christian@4184: 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:
christian@4184: @Override
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 :