/* Treerow.java
Purpose:
Description:
History:
Wed Jul 6 18:56:22 2005, Created by tomyeh
Copyright (C) 2005 Potix Corporation. All Rights Reserved.
{{IS_RIGHT
This program is distributed under LGPL Version 2.1 in the hope that
it will be useful, but WITHOUT ANY WARRANTY.
}}IS_RIGHT
*/
package org.zkoss.zul;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.UiException;
import org.zkoss.zul.impl.XulElement;
/**
* A treerow.
* <p>Default {@link #getZclass}: z-treerow (since 5.0.0)
* @author tomyeh
*/
public class Treerow extends XulElement {
public Treerow() {
}
/** Instantiates a treerow with a treecel holding the given label.
* @since 5.0.8
*/
public Treerow(String label) {
setLabel(label);
}
/** Returns the {@link Tree} instance containing this element.
*/
public Tree getTree() {
for (Component p = this; (p = p.getParent()) != null;)
if (p instanceof Tree)
return (Tree) p;
return null;
}
/** Returns the level this cell is. The root is level 0.
*/
public int getLevel() {
final Component parent = getParent();
return parent != null ? ((Treeitem) parent).getLevel() : 0;
}
/** Returns the {@link Treechildren} associated with this
* {@link Treerow}.
* In other words, it is {@link Treeitem#getTreechildren} of
* {@link #getParent}.
* @since 2.4.1
* @see Treechildren#getLinkedTreerow
*/
public Treechildren getLinkedTreechildren() {
final Component parent = getParent();
return parent != null ? ((Treeitem) parent).getTreechildren() : null;
}
/** Returns the label of the {@link Treecell} it contains, or null
* if no such cell.
* @since 5.0.8
*/
public String getLabel() {
final Treecell cell = (Treecell) getFirstChild();
return cell != null ? cell.getLabel() : null;
}
/** Sets the label of the {@link Treecell} it contains.
*
* <p>If treecell are not created, we automatically create it.
*
* <p>Notice that this method will create a treecell automatically
* if they don't exist.
* @since 5.0.8
*/
public void setLabel(String label) {
autoFirstCell().setLabel(label);
}
/** Returns the image of the {@link Treecell} it contains, or null
* if no such cell.
* @since 5.0.8
*/
public String getImage() {
final Treecell cell = (Treecell) getFirstChild();
return cell != null ? cell.getImage() : null;
}
/** Sets the image of the {@link Treecell} it contains.
*
* <p>If treecell are not created, we automatically create it.
*
* <p>Notice that this method will create a treerow and treecell automatically
* if they don't exist.
* @since 5.0.8
*/
public void setImage(String image) {
autoFirstCell().setImage(image);
}
private Treecell autoFirstCell() {
Treecell cell = (Treecell) getFirstChild();
if (cell == null) {
cell = new Treecell();
cell.applyProperties();
cell.setParent(this);
}
return cell;
}
/**
* @deprecated as of release 6.0.0. To control the size of Tree related
* components, please refer to {@link Tree} and {@link Treecol} instead.
*/
public void setWidth(String width) {
}
/**
* @deprecated as of release 6.0.0. To control the size of Tree related
* components, please refer to {@link Tree} and {@link Treecol} instead.
*/
public void setHflex(String flex) {
}
//-- Component --//
public String getZclass() {
return _zclass == null ? "z-treerow" : _zclass;
}
public void smartUpdate(String attr, Object value) {
super.smartUpdate(attr, value);
}
public void beforeParentChanged(Component parent) {
if (parent != null && !(parent instanceof Treeitem))
throw new UiException("Wrong parent: " + parent);
super.beforeParentChanged(parent);
}
public void beforeChildAdded(Component child, Component refChild) {
if (!(child instanceof Treecell))
throw new UiException("Unsupported child for tree row: " + child);
super.beforeChildAdded(child, refChild);
}
}