/** @param parent either a Tree or Treeitem instance. */ private static Treechildren treechildrenOf(Component parent) { Treechildren tc = (parent instanceof Tree) ? ((Tree) parent).getTreechildren() : ((Treeitem) parent).getTreechildren(); if (tc == null) { tc = new Treechildren(); tc.setParent(parent); } return tc; }
private void renderTree() { if (_treechildren == null) { Treechildren children = new Treechildren(); children.setParent(this); } else { _treechildren.getChildren().clear(); } if (_model instanceof TreeSelectableModel) this.setMultiple(((TreeSelectableModel) _model).isMultiple()); Object node = _model.getRoot(); final Renderer renderer = new Renderer(); try { renderChildren(renderer, _treechildren, node); } catch (Throwable ex) { renderer.doCatch(ex); } finally { renderer.doFinally(); } Events.postEvent(ZulEvents.ON_AFTER_RENDER, this, null); // notify the tree when items have been rendered. }
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); }
Treechildren tc = new Treechildren(); tc.setParent(ti);