/* * Ext GWT - Ext for GWT * Copyright(c) 2007-2009, Ext JS, LLC. * licensing@extjs.com * * http://extjs.com/license */ package com.extjs.gxt.ui.client.widget.treetable; import com.extjs.gxt.ui.client.Style; import com.extjs.gxt.ui.client.event.BaseEvent; import com.extjs.gxt.ui.client.event.ComponentEvent; import com.extjs.gxt.ui.client.event.Events; import com.extjs.gxt.ui.client.event.TreeTableEvent; import com.extjs.gxt.ui.client.widget.tips.ToolTip; import com.extjs.gxt.ui.client.widget.tree.Tree; import com.extjs.gxt.ui.client.widget.tree.TreeItem; import com.extjs.gxt.ui.client.widget.tree.TreeItemUI; import com.extjs.gxt.ui.client.widget.treegrid.TreeGrid; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.Event; /** * A item in a <code>TreeTable</code>. All events are bubbled to the item's * parent treetable. * * <dl> * <dt><b>Events:</b></dt> * * <dd><b>BeforeAdd</b> : TreeTableEvent(treeTable, item, child, index)<br> * <div>Fires before a item is added or inserted. Listeners can cancel the action by * calling {@link BaseEvent#setCancelled(boolean)}.</div> * <ul> * <li>treeTable : the tree table</li> * <li>item : this</li> * <li>child : the item being added</li> * <li>index : the index at which the item will be added</li> * </ul> * </dd> * * <dd><b>BeforeRemove</b> : TreeTableEvent(treeTable, item, child)<br> * <div>Fires before a item is removed. Listeners can cancel the action by * calling {@link BaseEvent#setCancelled(boolean)}.</div> * <ul> * <li>treeTable : this</li> * <li>item : this</li> * <li>child : the item being removed</li> * </ul> * </dd> * * <dd><b>BeforeExpand</b> : TreeTableEvent(treeTable, item)<br> * <div>Fires before a item is expanded. Listeners can cancel the action by * calling {@link BaseEvent#setCancelled(boolean)}.</div> * <ul> * <li>treeTable : this</li> * <li>item : this</li> * </ul> * </dd> * * <dd><b>BeforeCollapse</b> : TreeTableEvent(treeTable, item)<br> * <div>Fires before a item is collapsed. Listeners can cancel the action by * calling {@link BaseEvent#setCancelled(boolean)}.</div> * <ul> * <li>treeTable : this</li> * <li>item : this</li> * </ul> * </dd> * * <dd><b>Add</b> : TreeTableEvent(treeTable, item, index)<br> * <div>Fires after a item has been added or inserted.</div> * <ul> * <li>treeTable : the tree table</li> * <li>item : this</li> * <li>child : the item that was added</li> * <li>index : the index at which the item will be added</li> * </ul> * </dd> * * <dd><b>Remove</b> : TreeEvent(treeTable, item, child)<br> * <div>Fires after a item has been removed.</div> * <ul> * <li>treeTable : the tree table</li> * <li>item : this</li> * <li>child : the item being removed</li> * </ul> * </dd> * * <dd><b>Expand</b> : TreeEvent(treeTable, item)<br> * <div>Fires after a item has been expanded.</div> * <ul> * <li>item : the item being expanded</li> * </ul> * </dd> * * <dd><b>Collapse</b> : TreeEvent(treeTable, item)<br> * <div>Fires after a item is collapsed.</div> * <ul> * <li>treeTable : the tree table</li> * <li>item : this</li> * </ul> * </dd> * * <dd><b>CheckChange</b> : TreeTableEvent(treeTable, item)<br> * <div>Fires after a check state change.</div> * <ul> * <li>treeTable : the tree table</li> * <li>item : this</li> * </ul> * </dd> * * <dd><b>CellClick</b> : TreeTableEvent(treeTable, item, columnIndex)<br> * <div>Fires after a cell has been clicked.</div> * <ul> * <li>treeTable : the tree table</li> * <li>item : this</li> * <li>columnIndex : cell column index</li> * </ul> * </dd> * * <dd><b>CellDoubleClick</b> : RowDoubleClick(treeTable, item, columnIndex)<br> * <div>Fires after a cell has been double clicked.</div> * <ul> * <li>treeTable : the tree table</li> * <li>item : this</li> * <li>columnIndex : cell column index</li> * </ul> * </dd> * * <dd><b>RowClick</b> : (treeTable, item, index)<br> * <div>Fires after a cell has been clicked.</div> * <ul> * <li>treeTable : the tree table</li> * <li>item : this</li> * <li>columnIndex : cell column index</li> * </ul> * </dd> * * <dd><b>RowDoubleClick</b> : TreeTableEvent(treeTable, item, columnIndex)<br> * <div>Fires after a cell has been double clicked.</div> * <ul> * <li>treeTable : the treet table</li> * <li>item : this</li> * <li>columnIndex : cell column index</li> * </ul> * </dd> * * <dt><b>CSS:</b></dt> * <dd>.my-tree-item (the item itself)</dd> * <dd>.my-tree-item-text span (the tree item text)</dd> * </dl> * * @deprecated see @link {@link TreeGrid} */ public class TreeTableItem extends TreeItem { protected TreeTable treeTable; protected String[] cellStyles; protected boolean cellsRendered; protected Object[] values; protected String[] toolTips; protected ToolTip cellToolTip; protected boolean hasWidgets; /** * Creates a new tree table item. * * @param values the cell values */ public TreeTableItem(Object[] values) { this.values = values; } /** * Creates a new tree table item. * * @param text the text * @param values the values */ public TreeTableItem(String text, Object[] values) { super(text); this.values = values; } /** * Returns the item's cell tooltip. * * @return the tooltip */ public ToolTip getCellToolTip() { return cellToolTip; } /** * Returns the item's tree table. * * @return the tree table */ public TreeTable getTreeTable() { return treeTable; } /** * Returns a cell value. * * @param index the cell index * @return the value */ public Object getValue(int index) { return values[index]; } /** * Returns the item's values. * * @return the values */ public Object[] getValues() { return values; } public void onComponentEvent(ComponentEvent ce) { if (ui != null) { getUI().handleEvent((TreeTableEvent) ce); } switch (ce.getEventTypeInt()) { case Event.ONCLICK: onClick(ce); break; case Event.ONDBLCLICK: onDoubleClick(ce); break; case Event.ONMOUSEOVER: onMouseOver(ce); break; } } /** * Sets the style for a table cell. * * @param index the column index * @param style the new style */ public void setCellStyle(int index, String style) { if (cellStyles == null) cellStyles = new String[values.length]; cellStyles[index] = style; if (isRendered()) { treeTable.getView().setCellStyle(this, index, style); } } /** * Returns the style for the given cell. * * @param index the column index * @return the style */ public String getCellStyle(int index) { if (cellStyles != null) { return cellStyles[index]; } return null; } /** * Sets a cell tooltip. * * @param index the column index * @param text the text of the tool tip */ public void setCellToolTip(int index, String text) { if (toolTips == null) toolTips = new String[values.length]; toolTips[index] = text; } /** * Sets all of the cell tooltips * * @param toolTips the tool tips to use */ public void setCellToolTips(String[] toolTips) { this.toolTips = toolTips; } /** * Sets a cell value. * * @param index the column index * @param text the text */ public void setText(int index, String text) { setValue(index, text); } /** * Sets a cell value. * * @param index the column index * @param value the value */ public void setValue(int index, Object value) { values[index] = value; if (rendered) { treeTable.getView().renderItemValue(this, index, value); } } /** * Sets the item's values. * * @param values the values */ public void setValues(Object[] values) { this.values = values; } protected String[] getRenderedValues() { String[] svalues = new String[values.length]; for (int i = 0; i < values.length; i++) { svalues[i] = treeTable.getRenderedValue(this, i, values[i]); } return svalues; } /** * Subclasses may override. * * @return the ui */ @Override protected TreeItemUI getTreeItemUI() { return new TreeTableItemUI(this); } protected void onRender(Element target, int index) { ui = getTreeItemUI(); //TODO fix ((TreeTableItemUI)ui).render(target, index); } protected void init(TreeTable treeTable) { this.tree = treeTable; this.treeTable = treeTable; } public void setElement(Element elem) { super.setElement(elem); } protected void onMouseOver(ComponentEvent ce) { onCellMouseOver(ce); } protected void onCellMouseOver(ComponentEvent ce) { Element target = ce.getTarget(); int index = treeTable.getView().getCellIndex(target); if (index == Style.DEFAULT) { return; } } @Override protected void renderChildren() { int count = getItemCount(); for (int i = 0; i < count; i++) { getItem(i).render(getContainer(), i); } childrenRendered = true; } protected void onClick(ComponentEvent ce) { treeTable.fireEvent(Events.CellClick, ce); treeTable.fireEvent(Events.RowClick, ce); } protected void onDoubleClick(ComponentEvent ce) { treeTable.fireEvent(Events.CellDoubleClick, ce); treeTable.fireEvent(Events.RowDoubleClick, ce); } protected void setTree(Tree tree) { super.setTree(tree); treeTable = (TreeTable) tree; } }