primolan
26 Nov 2009, 4:10 AM
Hello!
I made some functions to select all children (and its children - recursive) and all parents (and its parents - recursive) when a node is selected.
Here are the functions:
/**
* Select all parents nodes from specified node (recursive, getting parents' parents and keep going till end)
*
* @param Ext.data.node Node
* @return void
*/
var selectParents = (function(node) {
selModel = node.getOwnerTree().getSelectionModel();
if (node.parentNode) {
selModel.select(node.parentNode, null, true);
selectParents(node.parentNode);
}
});
/**
* Unselect all parents nodes from specified node (recursive, getting parents' parents and keep going till end)
*
* @param Ext.data.node Node
* @return void
*/
var unselectParents = (function(node) {
selModel = node.getOwnerTree().getSelectionModel();
if (node.parentNode) {
if (node.parentNode.hasChildNodes()) {
selChild = 0;
node.parentNode.eachChild(function(child){
if (!child.isSelected()) selChild++;
});
if (selChild == node.parentNode.childNodes.length) {
selModel.unselect(node.parentNode);
}
} else {
selModel.unselect(node.parentNode);
}
unselectParents(node.parentNode);
}
});
/**
* Select all children nodes from specified node (recursive, getting children's children and keep going till end)
*
* @param Ext.data.node Node
* @return void
*/
var selectChild = (function(node) {
selModel = node.getOwnerTree().getSelectionModel();
if (node.hasChildNodes) {
node.eachChild(function(child){
selModel.select(child, null, true);
selectChild(child);
});
}
});
/**
* Unselect all children nodes from specified node
*
* @param Ext.data.node Node
* @return void
*/
var unselectChild = (function(node) {
selModel = node.getOwnerTree().getSelectionModel();
if (node.hasChildNodes) {
node.eachChild(function(child){
selModel.unselect(child);
unselectChild(child);
});
}
});
/**
* Select specified node, its parent and children (and forward)
*
* @param Ext.data.node Node
* @return void
*/
var selectNode = (function(node){
selModel = node.getOwnerTree().getSelectionModel();
selModel.select(node, null, true);
selectChild(node);
selectParents(node);
});
/**
* Unselect specified node, its parent and children (and forward)
*
* @param Ext.data.node Node
* @return void
*/
var unselectNode = (function(node){
selModel = node.getOwnerTree().getSelectionModel();
selModel.unselect(node);
unselectChild(node);
unselectParents(node);
});
How to use it? Create a listener to CLICK event on TreePanel:
listeners: {
click: function(node, event) {
selModel = node.getOwnerTree().getSelectionModel();
if (node && node.text != 'rootNode') {
if (node.isSelected()) {
unselectNode(node);
} else {
selectNode(node);
}
return false;
}
},
scope: this
}
I hope that some day, this would be an option in TreePanel, like "selectRelatives: true|false" .. I also hope you guys enjoy it.
And if someone know a better way to do these, please share it!
Cya!
I made some functions to select all children (and its children - recursive) and all parents (and its parents - recursive) when a node is selected.
Here are the functions:
/**
* Select all parents nodes from specified node (recursive, getting parents' parents and keep going till end)
*
* @param Ext.data.node Node
* @return void
*/
var selectParents = (function(node) {
selModel = node.getOwnerTree().getSelectionModel();
if (node.parentNode) {
selModel.select(node.parentNode, null, true);
selectParents(node.parentNode);
}
});
/**
* Unselect all parents nodes from specified node (recursive, getting parents' parents and keep going till end)
*
* @param Ext.data.node Node
* @return void
*/
var unselectParents = (function(node) {
selModel = node.getOwnerTree().getSelectionModel();
if (node.parentNode) {
if (node.parentNode.hasChildNodes()) {
selChild = 0;
node.parentNode.eachChild(function(child){
if (!child.isSelected()) selChild++;
});
if (selChild == node.parentNode.childNodes.length) {
selModel.unselect(node.parentNode);
}
} else {
selModel.unselect(node.parentNode);
}
unselectParents(node.parentNode);
}
});
/**
* Select all children nodes from specified node (recursive, getting children's children and keep going till end)
*
* @param Ext.data.node Node
* @return void
*/
var selectChild = (function(node) {
selModel = node.getOwnerTree().getSelectionModel();
if (node.hasChildNodes) {
node.eachChild(function(child){
selModel.select(child, null, true);
selectChild(child);
});
}
});
/**
* Unselect all children nodes from specified node
*
* @param Ext.data.node Node
* @return void
*/
var unselectChild = (function(node) {
selModel = node.getOwnerTree().getSelectionModel();
if (node.hasChildNodes) {
node.eachChild(function(child){
selModel.unselect(child);
unselectChild(child);
});
}
});
/**
* Select specified node, its parent and children (and forward)
*
* @param Ext.data.node Node
* @return void
*/
var selectNode = (function(node){
selModel = node.getOwnerTree().getSelectionModel();
selModel.select(node, null, true);
selectChild(node);
selectParents(node);
});
/**
* Unselect specified node, its parent and children (and forward)
*
* @param Ext.data.node Node
* @return void
*/
var unselectNode = (function(node){
selModel = node.getOwnerTree().getSelectionModel();
selModel.unselect(node);
unselectChild(node);
unselectParents(node);
});
How to use it? Create a listener to CLICK event on TreePanel:
listeners: {
click: function(node, event) {
selModel = node.getOwnerTree().getSelectionModel();
if (node && node.text != 'rootNode') {
if (node.isSelected()) {
unselectNode(node);
} else {
selectNode(node);
}
return false;
}
},
scope: this
}
I hope that some day, this would be an option in TreePanel, like "selectRelatives: true|false" .. I also hope you guys enjoy it.
And if someone know a better way to do these, please share it!
Cya!