diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableCustomRenderer.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableCustomRenderer.java index 62541c868007c81cf1612c8faff1159dd9fcc17b..dd1216f0741f08f21de224c4b63ae9182ff88a21 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableCustomRenderer.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableCustomRenderer.java @@ -151,8 +151,20 @@ class FlexiTableCustomRenderer extends AbstractFlexiTableRenderer implements Com } } } + + if(dataModel instanceof FlexiTreeTableDataModel) { + boolean hasChildren = ((FlexiTreeTableDataModel<?>)dataModel).hasChildren(row); + container.contextPut("hasChildren", hasChildren); + if(hasChildren) { + container.contextPut("isOpen", ((FlexiTreeTableDataModel<?>)dataModel).isOpen(row)); + } + } container.getHTMLRendererSingleton().render(renderer, sb, container, ubu, translator, renderResult, null); + container.contextRemove("openCloseLink"); + container.contextRemove("hasChildren"); + container.contextRemove("rowIndex"); + container.contextRemove("isOpen"); container.contextRemove("row"); container.contextRemove("f"); diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerTableModel.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerTableModel.java index 17ae717cea4a6fdec092f3dfe3160a5af1620274..ee3b32c1e529152fb64c3e5e27ea5e39e0d4e2f6 100644 --- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerTableModel.java +++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerTableModel.java @@ -154,7 +154,6 @@ public class CurriculumComposerTableModel extends DefaultFlexiTreeTableDataModel return null; } - @Override public boolean hasChildren(int row) { CurriculumElementRow element = getObject(row); @@ -184,8 +183,6 @@ public class CurriculumComposerTableModel extends DefaultFlexiTreeTableDataModel } } - - @Override public CurriculumComposerTableModel createCopyWithEmptyList() { return new CurriculumComposerTableModel(getTableColumnModel()); diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementListController.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementListController.java index 08823a63a9e3d59001c2c69c1bb74dc11014b3a3..012b8c1530530f14d2268f9efd1b4c5dc9de1629 100644 --- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementListController.java +++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementListController.java @@ -50,6 +50,7 @@ import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTable import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableRendererType; import org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionEvent; import org.olat.core.gui.components.form.flexible.impl.elements.table.TextFlexiCellRenderer; +import org.olat.core.gui.components.form.flexible.impl.elements.table.TreeNodeFlexiCellRenderer; import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.stack.BreadcrumbPanel; import org.olat.core.gui.components.velocity.VelocityContainer; @@ -74,7 +75,6 @@ import org.olat.modules.curriculum.model.CurriculumElementRefImpl; import org.olat.modules.curriculum.model.CurriculumElementRepositoryEntryViews; import org.olat.modules.curriculum.ui.CurriculumElementWithViewsDataModel.ElementViewCols; import org.olat.modules.curriculum.ui.component.CurriculumElementCompositeRenderer; -import org.olat.modules.curriculum.ui.component.CurriculumElementIndentRenderer; import org.olat.modules.curriculum.ui.component.CurriculumElementViewsRowComparator; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntryMyView; @@ -154,9 +154,8 @@ public class CurriculumElementListController extends FormBasicController impleme protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel(); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, ElementViewCols.key)); - DefaultFlexiColumnModel elementNameCol = new DefaultFlexiColumnModel(ElementViewCols.displayName, "select"); - elementNameCol.setCellRenderer(new CurriculumElementCompositeRenderer("select", new CurriculumElementIndentRenderer())); - columnsModel.addFlexiColumnModel(elementNameCol); + TreeNodeFlexiCellRenderer treeNodeRenderer = new TreeNodeFlexiCellRenderer("select"); + columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(ElementViewCols.displayName, treeNodeRenderer)); DefaultFlexiColumnModel elementIdentifierCol = new DefaultFlexiColumnModel(ElementViewCols.identifier, "select"); elementIdentifierCol.setCellRenderer(new CurriculumElementCompositeRenderer("select", new TextFlexiCellRenderer())); columnsModel.addFlexiColumnModel(elementIdentifierCol); diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementWithViewsDataModel.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementWithViewsDataModel.java index 7d56dbc37d375e0a85a1f0fde9d1025f9b1c1111..9a783b08ccdb5f064f9073062b06a75b187ba135 100644 --- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementWithViewsDataModel.java +++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementWithViewsDataModel.java @@ -19,7 +19,11 @@ */ package org.olat.modules.curriculum.ui; -import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableDataModel; +import java.util.ArrayList; +import java.util.List; + +import org.olat.core.gui.components.form.flexible.elements.FlexiTableFilter; +import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTreeTableDataModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiSortableColumnDef; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel; @@ -29,12 +33,23 @@ import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTable * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com * */ -public class CurriculumElementWithViewsDataModel extends DefaultFlexiTableDataModel<CurriculumElementWithViewsRow> { +public class CurriculumElementWithViewsDataModel extends DefaultFlexiTreeTableDataModel<CurriculumElementWithViewsRow> { public CurriculumElementWithViewsDataModel(FlexiTableColumnModel columnsModel) { super(columnsModel); } + @Override + public void filter(String searchString, List<FlexiTableFilter> filters) { + setObjects(new ArrayList<>(backupRows)); + } + + @Override + public boolean hasChildren(int row) { + CurriculumElementWithViewsRow element = getObject(row); + return element.hasChildren(); + } + @Override public Object getValueAt(int row, int col) { CurriculumElementWithViewsRow curriculum = getObject(row); diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementWithViewsRow.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementWithViewsRow.java index 07fe44e92431849af451a5ae315a0ed9712c48a5..edc986fa103cb5b960a07c6ae5bec2850bcd1931 100644 --- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementWithViewsRow.java +++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementWithViewsRow.java @@ -84,7 +84,7 @@ public class CurriculumElementWithViewsRow implements CurriculumElementWithView, public CurriculumElementWithViewsRow(CurriculumElement element, CurriculumElementMembership curriculumMembership, int myEntryCount) { this.element = element; - elementType = element == null ? null : element.getType(); + elementType = element.getType(); this.curriculumMembership = curriculumMembership; curriculumMember = curriculumMembership != null && curriculumMembership.hasMembership(); singleEntry = false; diff --git a/src/main/java/org/olat/modules/curriculum/ui/_content/curriculum_element_row.html b/src/main/java/org/olat/modules/curriculum/ui/_content/curriculum_element_row.html index d9275bab124ecab97fe36ee3c8e3f2ec90c799cc..49a59b436d703858b6bd9b2e619e9deca246ae99 100644 --- a/src/main/java/org/olat/modules/curriculum/ui/_content/curriculum_element_row.html +++ b/src/main/java/org/olat/modules/curriculum/ui/_content/curriculum_element_row.html @@ -3,6 +3,14 @@ #if(${row.isCurriculumElementOnly()} || ${row.isCurriculumElementWithEntry()}) #set ($headerTag = "h" + ($row.level + 2)) <$headerTag class="o_curriculum_element_title"> + #if($r.isTrue($hasChildren)) + #if($r.isTrue($isOpen)) + <a href="javascript:;" onclick="$f.ffXHREvent("tt-close",${rowIndex})"> + #else + <a href="javascript:;" onclick="$f.ffXHREvent("tt-open",${rowIndex})"> + #end + <i class='o_icon o_icon-fw #if($r.isTrue($isOpen)) o_icon_close_tree #else o_icon_open_tree #end'> </i></a> + #end $r.escapeHtml($row.curriculumElementDisplayName) <small>$r.escapeHtml($row.curriculumElementIdentifier) </small> #if($row.getCurriculumElementTypeName())<small class="o_type">($row.getCurriculumElementTypeName())</small>#end