package com.gwt.ui.client.tree;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.TreeItem;
import com.google.gwt.user.client.ui.Widget;
/**
*
* @author ibouakl
*
*/
public class AdvanceTreeItem extends TreeItem {
private TreePopupMenu contextMenu;
private int type;
private Object userObject;
/**
* A constructor for this class
*/
public AdvanceTreeItem() {
super();
this.type = 1;
}
/**
* A constructor for this class.
*
* @param widget widget rendition of the tree item.
*/
public AdvanceTreeItem(Widget widget) {
super(widget);
this.type = 1;
}
/**
* Note that all the items in the tree are converted to GWT HTML object before adding to the tree.
*/
public AdvanceTreeItem addItem(String itemText) {
HTML html = new HTML(itemText);
AdvanceTreeItem advanceTreeItem = new AdvanceTreeItem(html);
return addItem(advanceTreeItem);
}
/**
* Add a Advance tree object as a child of this tree element.
*
* @param item item to add.
*/
public AdvanceTreeItem addItem(AdvanceTreeItem item) {
super.addItem(item);
calculateLevel(this, item);
AdvanceTree.preventBrowserContextMenu(item.getElement());
return item;
}
/**
* calculate level for each tree item on the tree
*
* @param parent
* @param child
*/
private void calculateLevel(AdvanceTreeItem parent, AdvanceTreeItem child) {
child.setType(child.getType() + parent.getType());
if (child.getChildCount() > 0) {
for (int i = 0, n = child.getChildCount(); i < n; i++) {
if (child.getChild(i) instanceof AdvanceTreeItem)
calculateLevel(parent, (AdvanceTreeItem)child.getChild(i));
}
}
}
/**
* Gets the context menu for this element. If an element-specific context menu is not set, a null is returned.
*
* @return Returns the contextMenu.
*/
public TreePopupMenu getContextMenu() {
return contextMenu;
}
/**
* Returns the type of the object.
*
* @return Returns the type.
*/
public int getType() {
return type;
}
/**
* Sets an item-specific context menu. This will override the level-specific context menu.
*
* @param contextMenu The contextMenu to set.
*/
public void setContextMenu(TreePopupMenu contextMenu) {
this.contextMenu = contextMenu;
}
public void setHTML(String html) {
HTML h = new HTML(html);
AdvanceTreeItem advanceTreeItem = new AdvanceTreeItem(h);
addItem(advanceTreeItem);
AdvanceTree.preventBrowserContextMenu(advanceTreeItem.getElement());
}
public void setText(String text) {
HTML h = new HTML(text);
AdvanceTreeItem advanceTreeItem = new AdvanceTreeItem(h);
addItem(advanceTreeItem);
AdvanceTree.preventBrowserContextMenu(advanceTreeItem.getElement());
}
/**
* Sets the type of this object.
*
* @param type The type to set.
*/
public void setType(int type) {
this.type = type;
}
public void setWidget(Widget newWidget) {
AdvanceTree.preventBrowserContextMenu(newWidget.getElement());
super.setWidget(newWidget);
}
public Object getUserObject() {
return userObject;
}
/**
* store any user object for the Tree item
*/
public void setUserObject(Object userObject) {
this.userObject = userObject;
}
}