/* * 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.binder; import java.util.List; import com.extjs.gxt.ui.client.data.ModelData; import com.extjs.gxt.ui.client.event.Events; import com.extjs.gxt.ui.client.store.TreeStore; import com.extjs.gxt.ui.client.widget.Component; import com.extjs.gxt.ui.client.widget.tree.TreeItem; import com.extjs.gxt.ui.client.widget.treegrid.TreeGrid; import com.extjs.gxt.ui.client.widget.treetable.TreeTable; import com.extjs.gxt.ui.client.widget.treetable.TreeTableItem; /** * A <code>StoreBinder</code> implementation for <code>TreeTable</code>. * * @param <M> the model type * * @deprecated see @link {@link TreeGrid} */ public class TreeTableBinder<M extends ModelData> extends TreeBinder<M> { protected TreeTable treeTable; /** * Creates a new tree table binder. * * @param treeTable the tree table * @param store the store */ public TreeTableBinder(TreeTable treeTable, TreeStore<M> store) { super(treeTable, store); this.treeTable = treeTable; } @Override public Component findItem(M model) { for (TreeItem item : treeTable.getAllItems()) { if (store.getModelComparer().equals(item.<M>getModel(), model)) { return item; } } return null; } @Override protected void createAll() { TreeTableItem root = (TreeTableItem) treeTable.getRootItem(); root.removeAll(); List<M> list = store.getRootItems(); for (M element : list) { TreeItem item = null; if (store.isFiltered()) { if (isOrDecendantSelected(null, element)) { item = createItem(element); } } else { item = createItem(element); } treeTable.getRootItem().add(item); if (autoLoad && item != null) { item.setData("force", true); loadChildren(item, false); } } fireEvent(Events.Refresh); } protected TreeItem createItem(M model) { int cols = treeTable.getColumnCount(); TreeTableItem item = new TreeTableItem(new Object[cols]); setModel(item, model); updateItemValues(item); updateItemStyles(item); String txt = getTextValue(model, displayProperty); if (txt == null && displayProperty != null) { txt = model.get(displayProperty); } else { txt = model.toString(); } String icon = getIconValue(model, displayProperty); item.setIconStyle(icon); item.setText(txt); if (loader != null) { item.setLeaf(!loader.hasChildren(model)); } else { item.setLeaf(!hasChildren(model)); } return item; } protected String getColumnId(int column) { return treeTable.getColumn(column).getId(); } protected boolean hasChildren(M parent) { return store.getChildCount(parent) != 0; } @Override protected void update(M model) { TreeTableItem item = (TreeTableItem) findItem(model); if (item != null) { setModel(item, model); updateItemValues(item); updateItemStyles(item); String icon = getIconValue(model, displayProperty); String style = (styleProvider == null) ? null : styleProvider.getStringValue(model, displayProperty); item.setTextStyle(style); item.setIconStyle(icon); } } private void filterItems(TreeItem item) { if (item.isRoot() || isOrDecendantSelected(null, item.<M>getModel())) { item.setVisible(true); int count = item.getItemCount(); for (int i = 0; i < count; i++) { filterItems(item.getItem(i)); } } else { item.setVisible(false); } } private boolean isOrDecendantSelected(M parent, M model) { if (!isFiltered(parent, model)) { return true; } TreeItem item = (TreeItem) findItem(model); if (item != null) { for (TreeItem child : item.getItems()) { boolean result = isOrDecendantSelected(model, child.<M>getModel()); if (result) { return true; } } } return false; } private void updateItemStyles(TreeTableItem item) { M model = item.<M>getModel(); int cols = treeTable.getColumnCount(); for (int i = 0; i < cols; i++) { String id = getColumnId(i); String style = (styleProvider == null) ? null : styleProvider.getStringValue(model, id); item.setCellStyle(i, style == null ? "" : style); } } private void updateItemValues(TreeTableItem item) { M model = item.<M>getModel(); int cols = treeTable.getColumnCount(); for (int j = 0; j < cols; j++) { String id = getColumnId(j); Object val = getTextValue(model, id); if (val == null) val = model.get(id); item.setValue(j, val); } } }