@Override protected Element writeItem(Element tbody, Object itemId, DesignContext context) { Element tr = super.writeItem(tbody, itemId, context); DesignAttributeHandler.writeAttribute("collapsed", tr.attributes(), isCollapsed(itemId), true, boolean.class, context); return tr; }
@Test public void selectExpandsTreeToNodeButNotNodeItself() throws Exception { // GIVEN // initial state assertThat(tree.isCollapsed(ROOT_0), is(true)); assertThat(tree.isCollapsed(NODE_1), is(true)); assertThat(tree.isCollapsed(NODE_12), is(true)); assertThat(tree.isCollapsed(NODE_121), is(true)); // WHEN treeView.select(Lists.newArrayList(NODE_12)); // THEN assertThat(tree.isCollapsed(ROOT_0), is(false)); assertThat(tree.isCollapsed(NODE_1), is(false)); assertThat(tree.isCollapsed(NODE_12), is(true)); }
/** * Sets the Item specified by given identifier as collapsed or expanded. If * the Item is collapsed, its children are not displayed to the user. * * @param itemId * the identifier of the Item * @param collapsed * true if the Item should be collapsed, false if expanded */ public void setCollapsed(Object itemId, boolean collapsed) { if (isCollapsed(itemId) != collapsed) { if (null == toggledItemId && !isRowCacheInvalidated() && getVisibleItemIds().contains(itemId)) { // optimization: partial refresh if only one item is // collapsed/expanded toggledItemId = itemId; toggleChildVisibility(itemId, false); } else { // make sure a full refresh takes place - otherwise neither // partial nor full repaint of table content is performed toggledItemId = null; toggleChildVisibility(itemId, true); } } }
@Test public void collapseNodeWithSelectedChildUnselectsChild() throws Exception { // GIVEN same initial state tree.setCollapsed(ROOT_0, false); treeView.select(Lists.newArrayList(ROOT_0, NODE_121)); // WHEN tree.setCollapsed(ROOT_0, true); // THEN assertThat(tree.isCollapsed(ROOT_0), is(true)); assertThat(tree.isSelected(ROOT_0), is(true)); assertThat(tree.isSelected(NODE_121), is(false)); }
private void toggleChildVisibility(Object itemId, boolean forceFullRefresh) { getContainerStrategy().toggleChildVisibility(itemId); // ensure that page still has first item in page, DON'T clear the // caches. setCurrentPageFirstItemIndex(getCurrentPageFirstItemIndex(), false); if (isCollapsed(itemId)) { fireCollapseEvent(itemId); } else { fireExpandEvent(itemId); } if (containerSupportsPartialUpdates && !forceFullRefresh) { markAsDirty(); } else { // For containers that do not send item set change events, always do // full repaint instead of partial row update. refreshRowCache(); } }