diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/TreeNodeFlexiCellRenderer.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/TreeNodeFlexiCellRenderer.java index e670a5ba5fd67d5a494d50d804ce553d322052d8..57e4c5c072f32b7d70545011f16845b178e18a68 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/TreeNodeFlexiCellRenderer.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/TreeNodeFlexiCellRenderer.java @@ -19,6 +19,9 @@ */ package org.olat.core.gui.components.form.flexible.impl.elements.table; +import java.util.List; + +import org.olat.core.gui.components.form.flexible.elements.FlexiTableFilter; import org.olat.core.gui.components.form.flexible.impl.Form; import org.olat.core.gui.components.form.flexible.impl.FormJSHelper; import org.olat.core.gui.components.form.flexible.impl.NameValuePair; @@ -70,9 +73,20 @@ public class TreeNodeFlexiCellRenderer implements FlexiCellRenderer { private boolean isFlat(FlexiTableElementImpl ftE) { return flatBySearchAndFilter - && (StringHelper.containsNonWhitespace(ftE.getQuickSearchString()) || !ftE.getSelectedFilters().isEmpty()); + && (StringHelper.containsNonWhitespace(ftE.getQuickSearchString()) || isFiltered(ftE.getSelectedFilters())); + } + + private boolean isFiltered(List<FlexiTableFilter> filters) { + if(filters == null || filters.isEmpty()) return false; + + boolean filtered = true; + for(FlexiTableFilter filter:filters) { + if(filter.isShowAll()) { + filtered &= false; + } + } + return filtered; } - private void renderIndented(Renderer renderer, StringOutput target, Object cellValue, int row, FlexiTableComponent source, URLBuilder ubu, Translator translator) { diff --git a/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableController.java b/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableController.java index 2d300e025321fbb81d47d13d8750e0ce6604c860..90a431570c4918c12976d23f88a5e2ad6ee4b1c7 100644 --- a/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableController.java +++ b/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableController.java @@ -161,7 +161,8 @@ public class TaxonomyTreeTableController extends FormBasicController implements resources.add(new FlexiTableFilter(type.getDisplayName(), type.getKey().toString())); } resources.add(new FlexiTableFilter(translate("filter.no.level.type"), "-")); - resources.add(new FlexiTableFilter(translate("show.all"), "-", true)); + resources.add(FlexiTableFilter.SPACER); + resources.add(new FlexiTableFilter(translate("show.all"), "all", true)); return resources; } diff --git a/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableModel.java b/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableModel.java index 5beae0ab87e03c826384ec45fec921afef33ce01..6733489d1fc2293d73b6e51dc383367dd492e3c3 100644 --- a/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableModel.java +++ b/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableModel.java @@ -61,21 +61,28 @@ implements FilterableFlexiTableModel { if(filters != null && filters.size() > 0 && filters.get(0) != null) { Set<Long> typeKeys = new HashSet<>(); boolean noType = false; + boolean showAll = false; for(FlexiTableFilter filter:filters) { if("-".equals(filter.getFilter())) { noType = true; } else if(StringHelper.isLong(filter.getFilter())) { typeKeys.add(new Long(filter.getFilter())); + } else if(filter.isShowAll()) { + showAll = true; } } - List<TaxonomyLevelRow> filteredRows = new ArrayList<>(backupRows.size()); - for(TaxonomyLevelRow row:backupRows) { - if(accept(row, typeKeys, noType)) { - filteredRows.add(row); + if(showAll) { + setUnfilteredObjects(); + } else { + List<TaxonomyLevelRow> filteredRows = new ArrayList<>(backupRows.size()); + for(TaxonomyLevelRow row:backupRows) { + if(accept(row, typeKeys, noType)) { + filteredRows.add(row); + } } + setFilteredObjects(filteredRows); } - setFilteredObjects(filteredRows); } else { setUnfilteredObjects(); }