diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java index 1ffbb3e1b101824b045186af5b5174c61718b76c..e8e7797ca7ac77444b4e4a07b7c3e5c288c7e896 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java @@ -803,6 +803,8 @@ public abstract class Dict public static final String APPLY_FILTER = "apply_filter"; + public static final String RESET_FILTER = "reset_filter"; + public static final String ADD_NEW_FILTER = "add_new_filter"; public static final String HOW_TO_ADDRESS = "how_to_address"; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/filter/FilterToolbar.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/filter/FilterToolbar.java index 8857e9aa6b7d4bc6429ccabc643de2d663e04566..a9b88ee1b8f37f3ec8c253c104e0cc5aa7156d40 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/filter/FilterToolbar.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/filter/FilterToolbar.java @@ -13,6 +13,7 @@ import com.extjs.gxt.ui.client.event.SelectionChangedListener; import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.widget.Component; import com.extjs.gxt.ui.client.widget.LayoutContainer; +import com.extjs.gxt.ui.client.widget.form.Field; import com.extjs.gxt.ui.client.widget.form.TriggerField; import com.extjs.gxt.ui.client.widget.layout.FillLayout; import com.extjs.gxt.ui.client.widget.toolbar.AdapterToolItem; @@ -43,6 +44,8 @@ public class FilterToolbar<T> extends ToolBar implements IDatabaseModificationOb { static final String APPLY_ID = "apply_button"; + static final String RESET_ID = "reset_button"; + private final List<PagingColumnFilter<T>> columnFilters; private final LayoutContainer filterContainer; @@ -53,6 +56,8 @@ public class FilterToolbar<T> extends ToolBar implements IDatabaseModificationOb private final TextToolItem applyTool; + private final TextToolItem resetTool; + public FilterToolbar(IViewContext<ICommonClientServiceAsync> viewContext, String gridId, IDisplayTypeIDProvider displayTypeIDProvider, final List<PagingColumnFilter<T>> filterWidgets, IDelegatedAction applyFiltersAction) @@ -70,14 +75,18 @@ public class FilterToolbar<T> extends ToolBar implements IDatabaseModificationOb applyTool = new TextToolItem(viewContext.getMessage(Dict.APPLY_FILTER)); applyTool.setId(createId(APPLY_ID, gridId)); applyTool.setEnabled(false); + applyTool.hide(); add(applyTool); + resetTool = new TextToolItem(viewContext.getMessage(Dict.RESET_FILTER)); + resetTool.setId(createId(RESET_ID, gridId)); + add(resetTool); filterSelectionWidget.addSelectionChangedListener(new SelectionChangedListener<ModelData>() { @Override public void selectionChanged(SelectionChangedEvent<ModelData> se) { - updateFilterContainer(); + updateFilterFields(); apply(); } @@ -90,6 +99,15 @@ public class FilterToolbar<T> extends ToolBar implements IDatabaseModificationOb apply(); } }); + resetTool.addSelectionListener(new SelectionListener<ComponentEvent>() + { + @Override + public void componentSelected(ComponentEvent ce) + { + resetFilterFields(); + apply(); + } + }); } @@ -102,7 +120,7 @@ public class FilterToolbar<T> extends ToolBar implements IDatabaseModificationOb { this.columnFilters.clear(); this.columnFilters.addAll(newFilters); - updateFilterContainer(); + updateFilterFields(); } public boolean isColumnFilterSelected() @@ -127,7 +145,6 @@ public class FilterToolbar<T> extends ToolBar implements IDatabaseModificationOb Set<ParameterWithValue> parameters = new HashSet<ParameterWithValue>(); for (Component field : filterContainer.getItems()) { - parameters.add(((CustomFilterParameterWidget) field).getParameterWithValue()); } info.setParameters(parameters); @@ -146,24 +163,38 @@ public class FilterToolbar<T> extends ToolBar implements IDatabaseModificationOb filterSelectionWidget.update(observedModifications); } - private void updateFilterContainer() + private void updateFilterFields() { + filterContainer.removeAll(); Filter filter = filterSelectionWidget.tryGetSelected(); - if (filter != null) + if (isColumnFilterSelected()) { - filterContainer.removeAll(); - if (filter.getName().equals(Filter.COLUMN_FILTER)) + for (PagingColumnFilter<T> filterWidget : columnFilters) { - for (PagingColumnFilter<T> filterWidget : FilterToolbar.this.columnFilters) - { - filterContainer.add(filterWidget); - } - } else + filterContainer.add(filterWidget); + } + applyTool.hide(); + } else + { + for (String parameter : filter.getParameters()) { - for (String parameter : filter.getParameters()) - { - filterContainer.add(new CustomFilterParameterWidget(parameter)); - } + filterContainer.add(new CustomFilterParameterWidget(parameter)); + } + applyTool.show(); + updateApplyToolEnabledState(); + } + resetTool.setVisible(filterContainer.getItemCount() > 0); + } + + @SuppressWarnings("unchecked") + private void resetFilterFields() + { + for (Component field : filterContainer.getItems()) + { + if (field instanceof Field) + { + Field f = (Field) field; + f.reset(); } } } @@ -174,7 +205,7 @@ public class FilterToolbar<T> extends ToolBar implements IDatabaseModificationOb applyFiltersAction.execute(); } - private void updateApplyTool() + private void updateApplyToolEnabledState() { applyTool.setEnabled(isValid()); } @@ -186,7 +217,6 @@ public class FilterToolbar<T> extends ToolBar implements IDatabaseModificationOb boolean valid = true; for (Component field : filterContainer.getItems()) { - CustomFilterParameterWidget f = (CustomFilterParameterWidget) field; valid = f.isValid() && valid; } @@ -217,7 +247,7 @@ public class FilterToolbar<T> extends ToolBar implements IDatabaseModificationOb protected void onKeyUp(FieldEvent fe) { super.onKeyUp(fe); - updateApplyTool(); + updateApplyToolEnabledState(); } public ParameterWithValue getParameterWithValue() @@ -230,7 +260,7 @@ public class FilterToolbar<T> extends ToolBar implements IDatabaseModificationOb { super.onTriggerClick(ce); setValue(null); - updateApplyTool(); + updateApplyToolEnabledState(); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js index 15258fc128df37937da5c5ad52c07b5e84fe8427..1030a1792a4ebaed18b4e5cddac1ff6a6b5bb43e 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js +++ b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js @@ -508,6 +508,7 @@ samples_radio_group_label: "Samples", grid_settings_title: "Table settings", custom_filters: "Custom filters", apply_filter: "Apply", + reset_filter: "Reset", add_new_filter: "Add a New Filter", how_to_address: "How To Address", insert_columns: "Insert Columns",