/** Refresh the expansion (recursive function) */ public void expandRefresh(TreeTableNode moved) { if (moved instanceof TaskNode) { Task movedTask = (Task) moved.getUserObject(); if (movedTask.getExpand()) { getTreeTable().getTree().expandPath(TreeUtil.createPath(moved)); } for (int i = 0; i < moved.getChildCount(); i++) { expandRefresh(moved.getChildAt(i)); } } }
@Override public void applyPreservingExpansionState(Task rootTask, Predicate<Task> callable) { MutableTreeTableNode rootNode = getNode(rootTask); List<MutableTreeTableNode> subtree = TreeUtil.collectSubtree(rootNode); Collections.reverse(subtree); LinkedHashMap<Task, Boolean> states = Maps.newLinkedHashMap(); for (MutableTreeTableNode node : subtree) { Task t = (Task) node.getUserObject(); states.put(t, t.getExpand()); } callable.apply(rootTask); for (Map.Entry<Task, Boolean> state : states.entrySet()) { setExpanded(state.getKey(), state.getValue()); } }