You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@click.apache.org by Tim Hooper <Th...@woh.rr.com> on 2008/12/22 16:27:10 UTC
Checkbox Tree to Radio Tree
I want to convert the Checkbox Tree control into a Radio button tree control.
Seems like it shouldn't be that hard. I've used the Click framework controls,
but never made one myself. Any pointers on how to get started?
Re: Checkbox Tree to Radio Tree
Posted by Bob Schellink <sa...@gmail.com>.
Hi Tim,
Tim Hooper wrote:
> I want to convert the Checkbox Tree control into a Radio button tree control.
> Seems like it shouldn't be that hard. I've used the Click framework controls,
> but never made one myself. Any pointers on how to get started?
I just had a look at the CheckboxTree and its not as straightforward
to change from checkbox to radio as it could be. Ideally Tree should
expose a method such as #createControl which returns a Checkbox but
could be overridden to return a Radio.
In the meantime you could create a custom RadioTree which extends
CheckboxTree and specify a custom Decorator.
Below is some code which could help.
kind regards
bob
class RadioTree extends CheckboxTree {
public RadioTree(String name) {
super(name);
setDecorator(new RadioDecorator());
}
class RadioDecorator implements Decorator {
public String render(Object object, Context context) {
TreeNode treeNode = (TreeNode) object;
HtmlStringBuffer buffer = new HtmlStringBuffer();
renderIcon(buffer, treeNode);
buffer.append("<input ");
buffer.append(" style=\"margin:0\" type=\"radio\"");
buffer.appendAttribute("name", SELECT_TREE_NODE_PARAM);
buffer.appendAttribute("value", treeNode.getId());
if (treeNode.isSelected()) {
buffer.appendAttribute("checked", "checked");
}
buffer.elementEnd();
buffer.elementStart("span");
if (treeNode.isSelected()) {
buffer.appendAttribute("class", "selected");
} else {
buffer.appendAttribute("class", "unselected");
}
buffer.closeTag();
renderValue(buffer, treeNode);
buffer.elementEnd("span");
return buffer.toString();
}
/**
* Render the node's value.
*
* @param buffer string buffer containing the markup
* @param treeNode treeNode to render
*/
protected void renderValue(HtmlStringBuffer buffer,
TreeNode treeNode) {
//just print normal value
if (treeNode.getValue() != null) {
buffer.append(treeNode.getValue());
}
buffer.append("\n");
}
}
}