/* * 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.core.El; import com.extjs.gxt.ui.client.core.XDOM; import com.extjs.gxt.ui.client.widget.ComponentHelper; import com.extjs.gxt.ui.client.widget.table.TableColumnModel; import com.extjs.gxt.ui.client.widget.table.TableItem; import com.extjs.gxt.ui.client.widget.treegrid.TreeGrid; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.Event; import com.google.gwt.user.client.ui.Widget; /** * This class encapsulates the user interface of a {@link TreeTable}. * * @deprecated see @link {@link TreeGrid} */ public class TreeTableView { private static String bodyHTML; static { StringBuffer sb = new StringBuffer(); sb.append("<div style='overflow: hidden;'>"); sb.append("<div style='overflow: scroll;'>"); sb.append("<div class='my-treetbl-data'>"); sb.append("<div class='my-treetbl-tree'></div>"); sb.append("</div></div></div>"); bodyHTML = sb.toString(); } // styles protected String baseStyle = "my-tbl-item"; protected String overStyle = baseStyle + "-over"; protected String selStyle = baseStyle + "-sel"; protected String cellStyle = baseStyle + "-" + "cell"; protected String cellOverflowStyle = baseStyle + "-" + "overflow"; protected String textStyle = cellStyle + "-text"; protected String widgetStyle = cellStyle + "-widget"; protected String cellSelector = ".my-treetbl-cell"; protected TableColumnModel cm; protected Element treeDiv; protected El scrollEl, dataEl; protected TreeTable treeTable; protected int scrollBarWidth; private int cellSelectorDepth = 10; /** * Returns the cell. * * @param elem the cell element or any child element * @return the cell or null if not match */ public Element findCell(Element elem) { if (elem == null) { return null; } return El.fly(elem).findParentElement(cellSelector, cellSelectorDepth); } /** * Returns the elements cell index. * * @param elem the row element * @return the cell index or -1 if not match */ public int findCellIndex(Element elem) { Element cell = findCell(elem); if (cell != null) { return getCellIndex(cell); } return -1; } /** * Returns the data element. * * @return the data elemnt */ public El getDataEl() { return dataEl; } /** * Returns the scroll element. * * @return the scroll element */ public El getScrollEl() { return scrollEl; } public void resize() { int width = treeTable.getOffsetWidth(); int headerHeight = treeTable.getTableHeader().getOffsetHeight(); int bodyHeight = treeTable.getOffsetHeight() - headerHeight; int bodyWidth = width; if (treeTable.isAutoHeight()) { scrollEl.setHeight("auto"); dataEl.setHeight("auto"); bodyHeight = dataEl.getHeight(); bodyHeight += treeTable.el().getBorderWidth("tb"); } int columnModelWidth = cm.getTotalWidth(); dataEl.setWidth(columnModelWidth); treeTable.getTableHeader().setWidth(columnModelWidth); bodyHeight -= treeTable.el().getBorderWidth("tb"); bodyWidth -= treeTable.el().getBorderWidth("lr"); scrollEl.setStyleAttribute("overflowY", "auto"); if (treeTable.getHorizontalScroll()) { scrollEl.setStyleAttribute("overflowX", "auto"); if (columnModelWidth < width) { scrollEl.setStyleAttribute("overflowX", "hidden"); treeTable.getTableHeader().el().setLeft(0); } } if (treeTable.isAutoHeight()) { bodyHeight = -1; } scrollEl.setSize(bodyWidth, bodyHeight); } /** * The number of levels to search for cells in event delegation (defaults to * 10). * * @param cellSelectorDepth the cell selector depth */ public void setCellSelectorDepth(int cellSelectorDepth) { this.cellSelectorDepth = cellSelectorDepth; } /** * Returns the cell selector depth. * * @return the cell selector depth */ public int getCellSelectorDepth() { return cellSelectorDepth; } protected void applyCellStyles(TreeTableItem item) { if (item.cellStyles != null) { for (int i = 0; i < item.cellStyles.length; i++) { setCellStyle(item, i, item.cellStyles[i]); } } } protected Element getCell(TableItem item, int cell) { return item.el().select("td.my-treetbl-cell").getItem(cell); } protected int getCellIndex(Element elem) { if (elem != null) { String index = elem.getAttribute("index"); if (index != null && index.length() != 0) { return Integer.parseInt(index); } } return -1; } protected Element getTextCellElement(TreeTableItem item, int cell) { return ((TreeTableItemUI) item.getUI()).getTextCellElement(cell); } protected void init(TreeTable treeTable) { this.treeTable = treeTable; this.cm = treeTable.getColumnModel(); } protected void processRows() { for (int i = 0; i < treeTable.getItems().size(); i++) { treeTable.getItem(i).getElement().setPropertyInt("rowIndex", i); } } protected void render() { scrollBarWidth = XDOM.getScrollBarWidth(); Element div = DOM.createDiv(); DOM.setInnerHTML(div, bodyHTML.toString()); scrollEl = new El(El.fly(div).getSubChild(2)); dataEl = new El(DOM.getFirstChild(scrollEl.dom)); treeDiv = dataEl.firstChild().dom; DOM.appendChild(treeDiv, treeTable.getRootItem().getElement()); DOM.appendChild(treeTable.getElement(), DOM.getFirstChild(div)); treeTable.disableTextSelection(true); DOM.sinkEvents(scrollEl.dom, Event.ONSCROLL); } protected void renderItemValue(TreeTableItem item, int index, Object value) { Element textElem = getTextCellElement(item, index); if (textElem != null) { DOM.setInnerHTML(textElem, ""); if (value instanceof Widget) { Widget widget = (Widget) value; textElem.setClassName(widgetStyle); DOM.appendChild(textElem, widget.getElement()); if (treeTable.isAttached()) { ComponentHelper.doAttach(widget); } } else { String s = treeTable.getRenderedValue(item, index, value); textElem.setInnerHTML(s); } } applyCellStyles(item); } protected void resizeCells(int columnIndex) { TreeTableColumn c = (TreeTableColumn) cm.getColumn(columnIndex); int w = ((TreeTableColumnModel) cm).getWidthInPixels(c.getIndex()); String sel = "." + treeTable.getId() + "-col-" + columnIndex; String rule = "width:" + w + "px;" + (!c.isHidden() ? "" : "display: none;"); treeTable.styleTemplate.set(sel, rule); treeTable.styleTemplate.apply(); } protected void setCellStyle(TreeTableItem item, int index, String style) { if (item.cellsRendered) { Element cell = getTextCellElement(item, index); El.fly(cell).addStyleName(textStyle, style); } } protected void showColumn(int columnIndex, boolean show) { TreeTableColumn c = (TreeTableColumn) cm.getColumn(columnIndex); int w = ((TreeTableColumnModel) cm).getWidthInPixels(c.getIndex()); String sel = "." + treeTable.getId() + "-col-" + columnIndex; String rule = "width:" + w + "px;" + (!c.isHidden() ? "" : "display: none;"); treeTable.styleTemplate.set(sel, rule); treeTable.styleTemplate.apply(); } }