/*
* Ext GWT 2.2.4 - Ext for GWT
* Copyright(c) 2007-2010, Ext JS, LLC.
* licensing@extjs.com
*
* http://extjs.com/license
*/
package com.extjs.gxt.ui.client.widget.treegrid;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.event.GridEvent;
import com.extjs.gxt.ui.client.store.TreeStore;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
@SuppressWarnings({"unchecked","rawtypes"})
public class TreeGridSelectionModel<M extends ModelData> extends GridSelectionModel<M> {
protected TreeGrid tree;
protected TreeStore<M> treeStore;
@Override
public void bindGrid(Grid grid) {
tree = null;
treeStore = null;
super.bindGrid(grid);
if (grid != null) {
tree = (TreeGrid) grid;
treeStore = tree.getTreeStore();
}
}
@Override
protected void handleMouseClick(GridEvent<M> e) {
if (!tree.getTreeView().isSelectableTarget(e.getModel(), e.getTarget())) {
return;
}
super.handleMouseClick(e);
}
@Override
protected void handleMouseDown(GridEvent<M> e) {
if (!tree.getTreeView().isSelectableTarget(e.getModel(), e.getTarget())) {
return;
}
super.handleMouseDown(e);
}
@Override
protected void onKeyLeft(GridEvent<M> ce) {
super.onKeyLeft(ce);
ce.preventDefault();
if (selectedHeader == null) {
boolean leaf = tree.isLeaf(getLastFocused());
if (!leaf && tree.isExpanded(getLastFocused())) {
tree.setExpanded(getLastFocused(), false);
} else if (!leaf) {
M parent = treeStore.getParent(getLastFocused());
if (parent != null) {
select(parent, false);
}
} else if (leaf) {
M parent = treeStore.getParent(getLastFocused());
if (parent != null) {
select(parent, false);
}
}
}
}
@Override
protected void onKeyRight(GridEvent<M> ce) {
super.onKeyRight(ce);
ce.preventDefault();
if (selectedHeader == null && !tree.isLeaf(getLastFocused()) && !tree.isExpanded(getLastFocused())) {
tree.setExpanded(getLastFocused(), true);
}
}
}