Skip to content

Commit

Permalink
ZK-3853: Tree supports 3-states selection(WIP)
Browse files Browse the repository at this point in the history
  • Loading branch information
JamsonChan committed Jan 2, 2024
1 parent ba03820 commit 3c2b90b
Show file tree
Hide file tree
Showing 22 changed files with 1,938 additions and 41 deletions.
3 changes: 3 additions & 0 deletions zkdoc/release-note
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ ZK 10.0.0
ZK-5596: Simplify the JavaScript url when enable embedded mode
ZK-5590: Reimplement sourcemap in ZK 10
ZK-5512: Support for Listening to Space Key Pressed
ZK-3853: Tree supports 3-states selection

* Bugs
ZK-5393: Update ZK jars to jakarta-friendly uploads
Expand Down Expand Up @@ -38,6 +39,8 @@ ZK 10.0.0
simplifying the source to enable embedded mode.
+ The setContent() method of Comboitem, Menu, and Navitem now only accepts a safe HTML content.
i.e. The content will be sanitized before rendering, please don't use JavaScript content.
+ Tree support tri-state selection, use new boolean attribute `indeterminate` to enable.

--------
ZK 10.0.0-Beta
Oct 17, 2023
Expand Down
149 changes: 149 additions & 0 deletions zktest/src/main/java/org/zkoss/zktest/test2/F100_ZK_3853Composer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
/* F100_ZK_3853Composer.java
Purpose:
Description:
History:
Fri Dec 15 17:53:26 CST 2023, Created by jamson
Copyright (C) 2023 Potix Corporation. All Rights Reserved.
*/
package org.zkoss.zktest.test2;

import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.Listen;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zul.Button;
import org.zkoss.zul.DefaultTreeModel;
import org.zkoss.zul.DefaultTreeNode;
import org.zkoss.zul.Tree;
import org.zkoss.zul.TreeNode;
import org.zkoss.zul.Treechildren;
import org.zkoss.zul.Treeitem;
import org.zkoss.zul.Window;

public class F100_ZK_3853Composer extends SelectorComposer<Window> {

DefaultTreeModel model;
@Wire
Tree tree, tree2;
@Wire
Button b6, b13;
@Override
public void doAfterCompose(Window component) throws Exception {
super.doAfterCompose(component);
model = new DefaultTreeModel(
new DefaultTreeNode(null,
new DefaultTreeNode[] {
new DefaultTreeNode("1",
new DefaultTreeNode[] {
new DefaultTreeNode("2"),
new DefaultTreeNode("3")
}),
new DefaultTreeNode("4"),
new DefaultTreeNode("5",
new DefaultTreeNode[] {
new DefaultTreeNode("6",
new DefaultTreeNode[] {
new DefaultTreeNode("7"),
new DefaultTreeNode("8"),
new DefaultTreeNode("9",
new DefaultTreeNode[] {
new DefaultTreeNode("10"),
new DefaultTreeNode("11"),
new DefaultTreeNode("12"),
}
)
}
),
new DefaultTreeNode("13"),
new DefaultTreeNode("14")
}
)
}
)
);
tree.setModel(model);
tree.setIndeterminate(true);
}

@Listen("onClick=#b1")
public void b1() {
tree.setModel(tree.getModel() == null ? model : null);
}

@Listen("onClick=#b2")
public void b2() {
tree.setIndeterminate(!tree.isIndeterminate());
}

@Listen("onClick=#b3")
public void b3() {
model.setIndeterminate(!model.isIndeterminate());
}

@Listen("onClick=#b4")
public void b4() {
tree.setMultiple(!tree.isMultiple());
}

@Listen("onClick=#b5")
public void b5() {
model.setMultiple(!model.isMultiple());
}

@Listen("onClick=#b6")
public void b6() {
b6.setLabel("sel:" + String.valueOf(tree.getSelectedCount()) + " par:" + String.valueOf(tree.getPartialCount()));
}

@Listen("onClick=#b7")
public void b7() {
TreeNode root = (TreeNode) model.getRoot(),
targetParent = root.getChildAt(2).getChildAt(0).getChildAt(2),
newNode = new DefaultTreeNode("Model inserted");
targetParent.insert(newNode, 1);
}

@Listen("onClick=#b8")
public void b8() {
TreeNode root = (TreeNode) model.getRoot(),
targetParent = root.getChildAt(2).getChildAt(0).getChildAt(2);
targetParent.remove(1);
}

@Listen("onClick=#b11")
public void b11() {
tree2.setIndeterminate(!tree2.isIndeterminate());
}

@Listen("onClick=#b12")
public void b12() {
tree2.setMultiple(!tree2.isMultiple());
}

@Listen("onClick=#b13")
public void b13() {
b13.setLabel("sel:" + String.valueOf(tree2.getSelectedCount()) + " par:" + String.valueOf(tree2.getPartialCount()));
}

@Listen("onClick=#b14")
public void b14() {
Treechildren treechildren = tree2.getTreechildren();
Treeitem t1 = (Treeitem) treechildren.getFirstChild(),
t4 = (Treeitem) t1.getNextSibling(),
t5 = (Treeitem) t4.getNextSibling();

Treeitem ti = new Treeitem();
ti.setLabel("inserted");
ti.setSelected(true);
treechildren.insertBefore(ti, treechildren.getFirstChild());
}

@Listen("onClick=#b15")
public void b15() {
Treechildren treechildren = tree2.getTreechildren();
treechildren.removeChild(treechildren.getFirstChild());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
/* F100_ZK_3853_2Composer.java
Purpose:
Description:
History:
Tue Jan 02 18:48:59 CST 2024, Created by jamson
Copyright (C) 2024 Potix Corporation. All Rights Reserved.
*/
package org.zkoss.zktest.test2;

import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.Listen;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zul.DefaultTreeModel;
import org.zkoss.zul.DefaultTreeNode;
import org.zkoss.zul.Tree;
import org.zkoss.zul.Window;

public class F100_ZK_3853_2Composer extends SelectorComposer<Window> {
DefaultTreeModel model;
@Wire
Tree tree;
@Override
public void doAfterCompose(Window component) throws Exception {
super.doAfterCompose(component);
model =
new DefaultTreeModel(
new DefaultTreeNode(null,
new DefaultTreeNode[] {
new DefaultTreeNode("0",
new DefaultTreeNode[] {
new DefaultTreeNode("1"),
new DefaultTreeNode("2")
}
),
new DefaultTreeNode("3"),
new DefaultTreeNode("4",
new DefaultTreeNode[] {
new DefaultTreeNode("5",
new DefaultTreeNode[] {
new DefaultTreeNode("6"),
new DefaultTreeNode("7"),
new DefaultTreeNode("8",
new DefaultTreeNode[] {
new DefaultTreeNode("9"),
new DefaultTreeNode("10"),
new DefaultTreeNode("11"),
}
)
}
),
new DefaultTreeNode("12"),
new DefaultTreeNode("13")
}
)
}
)
);
tree.setModel(model);
tree.setIndeterminate(true);
}

@Listen("onClick=#btn")
public void toogleModel() {
tree.setModel(tree.getModel() == null ? model : null);
}
}
104 changes: 104 additions & 0 deletions zktest/src/main/webapp/test2/F100-ZK-3853-1.zul
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
F100-ZK-3853-1.zul
Purpose:
Description:
History:
Tue Jan 02 16:00:24 CST 2024, Created by jamson
Copyright (C) 2024 Potix Corporation. All Rights Reserved.
-->
<zk>
<label multiline="true">
Tri-State Tree Pure Component Test.
click checkbox and check whether all updates are correct.
</label>
<tree indeterminate="true">
<treecols>
<treecol label="treecol" />
</treecols>
<treechildren>
<treeitem open="false">
<treerow>
<treecell label="0" />
</treerow>
<treechildren>
<treeitem>
<treerow>
<treecell label="1"/>
</treerow>
</treeitem>
<treeitem>
<treerow>
<treecell label="2" />
</treerow>
</treeitem>
</treechildren>
</treeitem>
<treeitem>
<treerow>
<treecell label="3" />
</treerow>
</treeitem>
<treeitem open="false">
<treerow>
<treecell label="4" />
</treerow>
<treechildren>
<treeitem open="false">
<treerow>
<treecell label="5" />
</treerow>
<treechildren>
<treeitem open="false">
<treerow>
<treecell label="6" />
</treerow>
</treeitem>
<treeitem>
<treerow>
<treecell label="7" />
</treerow>
</treeitem>
<treeitem open="false">
<treerow>
<treecell label="8" />
</treerow>
<treechildren>
<treeitem>
<treerow>
<treecell label="9" />
</treerow>
</treeitem>
<treeitem>
<treerow>
<treecell label="10" />
</treerow>
</treeitem>
<treeitem>
<treerow>
<treecell label="11" />
</treerow>
</treeitem>
</treechildren>
</treeitem>
</treechildren>
</treeitem>
<treeitem>
<treerow>
<treecell label="12" />
</treerow>
</treeitem>
<treeitem>
<treerow>
<treecell label="13" />
</treerow>
</treeitem>
</treechildren>
</treeitem>
</treechildren>
</tree>
</zk>
28 changes: 28 additions & 0 deletions zktest/src/main/webapp/test2/F100-ZK-3853-2.zul
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
F100-ZK-3853-2.zul
Purpose:
Description:
History:
Tue Jan 02 18:38:49 CST 2024, Created by jamson
Copyright (C) 2024 Potix Corporation. All Rights Reserved.
-->
<zk>
<label multiline="true">
Tri-State Tree with Model Test.
1. click checkbox and check whether all updates are correct.
2. click `toggle model` button, check the model save all state correctly after un-bind and re-bind.
</label>
<window apply="org.zkoss.zktest.test2.F100_ZK_3853_2Composer">
<button id="btn" label="toggle model"/>
<tree id="tree">
<treecols>
<treecol label="treecol" />
</treecols>
</tree>
</window>
</zk>
Loading

0 comments on commit 3c2b90b

Please sign in to comment.