diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/DropDownList.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/DropDownList.java index e2970aa818d1b616f1de05f54ddce4c5c7609789..43406463a62d6e26d537a0da2322c4961006578d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/DropDownList.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/DropDownList.java @@ -24,6 +24,7 @@ import java.util.Set; import com.extjs.gxt.ui.client.data.ModelData; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.store.Store; +import com.extjs.gxt.ui.client.store.StoreFilter; import com.extjs.gxt.ui.client.widget.form.ComboBox; import com.google.gwt.user.client.Element; @@ -34,6 +35,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewConte import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareField; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IDatabaseModificationObserver; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUtils; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.StringUtils; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind; /** @@ -98,7 +100,40 @@ abstract public class DropDownList<M extends ModelData, E> extends ComboBox<M> i setWidth(DEFAULT_WIDTH); setDisplayField(displayField); setFieldLabel(label); - setStore(new ListStore<M>()); + setStore(createEmptyStoreWithContainsFilter()); + } + + private ListStore<M> createEmptyStoreWithContainsFilter() + { + StoreFilter<M> filter = new StoreFilter<M>() + { + + @SuppressWarnings("unchecked") + public boolean select(Store s, M parent, M item, String property) + { + String v = getRawValue(); + if (StringUtils.isBlank(v)) + { + return true; + } + if (item != null && item.get(getDisplayField()) != null) + { + return ((String) item.get(getDisplayField())).toLowerCase().indexOf( + v.toLowerCase()) >= 0; + } + return false; + } + }; + ListStore<M> newStore = new ListStore<M>() + { + @Override + public void filter(String property, String beginsWith) + { + super.filter(property); + } + }; + newStore.addFilter(filter); + return newStore; } protected void setCallbackId(String callbackId)