package org.zkoss.zktest.test2; import java.util.Hashtable; import java.util.Iterator; import java.util.Random; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.Path; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; import org.zkoss.zk.ui.event.OpenEvent; import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.DefaultTreeModel; import org.zkoss.zul.DefaultTreeNode; import org.zkoss.zul.Div; import org.zkoss.zul.Label; import org.zkoss.zul.Tree; import org.zkoss.zul.Treecell; import org.zkoss.zul.Treeitem; import org.zkoss.zul.TreeitemRenderer; import org.zkoss.zul.Treerow; import org.zkoss.zul.Window; public class B70_ZK_2547Composer extends GenericForwardComposer { DefaultTreeModel mymodelA; private Tree myTreeA; Window window; public static int NUM_ROWS=50; public static boolean ALEATORY_LEAFS=true; public static int UPDATE_MILIS=30; public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); if(!comp.getDesktop().isServerPushEnabled()){ comp.getDesktop().enableServerPush(true); } window = (Window)Path.getComponent("//mypage/mywindow"); myTreeA = (Tree) window.getFellow("myTreeA"); mymodelA = new DefaultTreeModel(new DefaultTreeNode(null, new DefaultTreeNode[] {})); fillTree(myTreeA, mymodelA, "A"); } private void fillTree(Tree myTree, DefaultTreeModel mymodel, String treeName) { myTree.setItemRenderer(new TreeRendererTest()); DefaultTreeNode rootNode = (DefaultTreeNode)mymodel.getRoot(); for (int i = 0; i < NUM_ROWS; i++) { TestObject test0 = new TestObject(); test0.col0 = "Row "+treeName+" "+i; int iNumLeafs = 2; if (!ALEATORY_LEAFS || iNumLeafs > 0) { TestObject test1 = new TestObject(); test1.col0 = "SubRow " + treeName + " " + i + " X"; if (!ALEATORY_LEAFS || iNumLeafs > 1) { TestObject test2 = new TestObject(); test2.col0 = "SubRow " + treeName + " " + i + " Y"; rootNode.add(new DefaultTreeNode(test0, new DefaultTreeNode[] { new DefaultTreeNode(test1), new DefaultTreeNode(test2) })); } else { rootNode.add(new DefaultTreeNode(test0, new DefaultTreeNode[] { new DefaultTreeNode(test1)})); } } else { rootNode.add(new DefaultTreeNode(test0)); } } myTree.setModel(mymodel); } public static int newRandomInt(int n) { Random randomGenerator = new Random(); return randomGenerator.nextInt(n); } } class TestObject { public String col0; public boolean open; public boolean leaf; } class TreeRendererTest implements TreeitemRenderer{ private static Hashtable<String, Integer> totals = new Hashtable<String, Integer>() {{ put("A", 0); put("B", 0); put("C", 0); }}; public void render(Treeitem treeItem, Object data, int id) throws Exception { DefaultTreeNode treeNode = (DefaultTreeNode) data; treeItem.setValue(treeNode); Treerow tr; if (treeItem.getTreerow() == null) { tr = new Treerow(); tr.setParent(treeItem); } else { tr = treeItem.getTreerow(); tr.getChildren().clear(); } TestObject row = (TestObject)treeNode.getData(); Treecell t0=new Treecell(); t0.setLabel(row.col0); tr.appendChild(t0); } }