/**
* @fileOverview
* Copyright (c) 2013 Regione Autonoma della Sardegna
* Published under the GPL license.
* See https://sardegnageoportale.it/webgis/license.txt
* for the full text of the license.
* @version 0.1
*/
/**
* @namespace framework.plugins
*/
Ext.namespace("GeoExt.tree");
/**
* Group node implementation for customizing tree nodes behavior and layout
* @name_ RASGroupNode
* @class Group node implementation.
* @constructor
* @extends Ext.tree.LayerContainer
*/
framework.plugins.RASGroupNode = Ext.extend(GeoExt.tree.LayerContainer,
/**
* @lends framework.plugins.RASGroupNode.prototype
*/
{
/**
* @private
* @param {Object} config configurations object
*/
constructor: function(config) {
framework.plugins.RASGroupNode.superclass.constructor.apply(this, arguments);
this.addEvents(
"childcheckchange"
);
this.addListener("childcheckchange",function(node,checked){
if(checked === true)
this.setCheckBoxForCheckLayer(node);
else
this.setCheckBoxForUncheckLayer(node);
});
},
/**
* @private override
*/
appendChild : function(n){
if(!n.render && !Ext.isArray(n)){
n = this.getLoader().createNode(n);
}
if(n.layer){
var node = Ext.tree.TreeNode.superclass.appendChild.call(this, n);
if(node && this.childrenRendered){
node.render();
}
this.ui.updateExpandIcon();
this.setCheckBoxForAppendChild(node);
return node;
}
},
/**
* @private override
*/
insertBefore : function(node, refNode){
if(!node.render){
node = this.getLoader().createNode(node);
}
var newNode = Ext.tree.TreeNode.superclass.insertBefore.call(this, node, refNode);
if(newNode && refNode && this.childrenRendered){
node.render();
}
this.ui.updateExpandIcon();
this.setCheckBoxForAppendChild(node);
return newNode;
},
/**
* @private override
*/
removeChild : function(node, destroy){
this.setCheckBoxForRemoveChild(node);
this.ownerTree.getSelectionModel().unselect(node);
Ext.tree.TreeNode.superclass.removeChild.apply(this, arguments);
// only update the ui if we're not destroying
if(!destroy){
var rendered = node.ui.rendered;
// if it's been rendered remove dom node
if(rendered){
node.ui.remove();
}
if(rendered && this.childNodes.length < 1){
this.collapse(false, false);
}else{
this.ui.updateExpandIcon();
}
if(!this.firstChild && !this.isHiddenRoot()){
this.childrenRendered = false;
}
}
return node;
},
/**
* @private control for checkbox
*/
setCheckBoxForAppendChild : function(node){
if(node.parentNode.ui.checkbox &&
((node.layer && node.layer.visibility === true) || (node.ui && node.ui.checkbox && node.ui && node.ui.checkbox.checked === true ))){
node.parentNode.ui.checkbox.checked = true;
node.parentNode.ui.checkbox.defaultChecked = true;
}
},
/**
* @private control for checkbox
*/
setCheckBoxForRemoveChild : function(node){
if(node && node.ui.checkbox && node.parentNode.ui.checkbox){
var parent = node.parentNode;
parent.ui.checkbox.checked = false;
parent.ui.checkbox.defaultChecked = false;
for(var child=0;child 0){
for(var child in node.childNodes){
if(node.childNodes[child].ui){
node.childNodes[child].ui.checkbox.checked = checked;
node.childNodes[child].ui.checkbox.defaultChecked = checked;
node.childNodes[child].fireEvent('checkchange', node.childNodes[child], checked);
}
}
}else{
node.ui.checkbox.checked = false;
node.ui.checkbox.defaultChecked = false;
}
}
});
Ext.preg(framework.plugins.RASGroupNode.prototype.ptype, framework.plugins.RASGroupNode);