private void onTreeDataRemoved(Component parent, Object node, int index) { final Treechildren tc = treechildrenOf(parent); final List<? extends Component> items = tc.getChildren(); if (items.size() > index) { ((Treeitem) items.get(index)).detach(); } else if (!(parent instanceof Treeitem) || ((Treeitem) parent).isLoaded()) { tc.detach(); } }
private void renderChangedItem(Treeitem item, Object node) { /* * After modified the node in tree model, if node is leaf, * its treechildren is needed to be dropped. */ if (_model != null) { Treechildren tc = item.getTreechildren(); if (_model.isLeaf(node)) { if (tc != null) tc.detach(); //just in case } else { if (tc == null) { tc = new Treechildren(); tc.setParent(item); } } final Renderer renderer = new Renderer(); try { renderer.renderChangedItem(item, node, item.getIndex()); //re-render } catch (Throwable ex) { renderer.doCatch(ex); } finally { renderer.doFinally(); } } }
/** Note: it doesn't call render doCatch/doFinally */ private void renderItem0(Renderer renderer, Treeitem item, Object node) throws Throwable { if (item.isLoaded()) //all direct children are loaded return; /* * After modified the node in tree model, if node is leaf, * its treechildren is needed to be dropped. */ Treechildren tc = item.getTreechildren(); if (_model.isLeaf(node)) { if (tc != null) tc.detach(); //just in case //no children to render //Note item already rendered, so no need: //renderer.render(item, node); } else { if (tc != null) tc.getChildren().clear(); //just in case else { tc = new Treechildren(); tc.setParent(item); } renderChildren(renderer, tc, node); } Object v = item.getAttribute(Attributes.MODEL_RENDERAS); if (v != null) //a new item is created to replace the existent one (item = (Treeitem) v).setOpen(false); item.setLoaded(true); }