blob: 829a8877557250a30dc67fe5fa36017fd641bbd1 [file] [log] [blame]
/*
Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
if(!dojo._hasResource["dojox.grid.TreeSelection"]){
dojo._hasResource["dojox.grid.TreeSelection"]=true;
dojo.provide("dojox.grid.TreeSelection");
dojo.require("dojox.grid.DataSelection");
dojo.declare("dojox.grid.TreeSelection",dojox.grid.DataSelection,{setMode:function(_1){
this.selected={};
this.sorted_sel=[];
this.sorted_ltos={};
this.sorted_stol={};
dojox.grid.DataSelection.prototype.setMode.call(this,_1);
},addToSelection:function(_2){
if(this.mode=="none"){
return;
}
var _3=null;
if(typeof _2=="number"||typeof _2=="string"){
_3=_2;
}else{
_3=this.grid.getItemIndex(_2);
}
if(this.selected[_3]){
this.selectedIndex=_3;
}else{
if(this.onCanSelect(_3)!==false){
this.selectedIndex=_3;
var _4=dojo.query("tr[dojoxTreeGridPath='"+_3+"']",this.grid.domNode);
if(_4.length){
dojo.attr(_4[0],"aria-selected","true");
}
this._beginUpdate();
this.selected[_3]=true;
this._insertSortedSelection(_3);
this.onSelected(_3);
this._endUpdate();
}
}
},deselect:function(_5){
if(this.mode=="none"){
return;
}
var _6=null;
if(typeof _5=="number"||typeof _5=="string"){
_6=_5;
}else{
_6=this.grid.getItemIndex(_5);
}
if(this.selectedIndex==_6){
this.selectedIndex=-1;
}
if(this.selected[_6]){
if(this.onCanDeselect(_6)===false){
return;
}
var _7=dojo.query("tr[dojoxTreeGridPath='"+_6+"']",this.grid.domNode);
if(_7.length){
dojo.attr(_7[0],"aria-selected","false");
}
this._beginUpdate();
delete this.selected[_6];
this._removeSortedSelection(_6);
this.onDeselected(_6);
this._endUpdate();
}
},getSelected:function(){
var _8=[];
for(var i in this.selected){
if(this.selected[i]){
_8.push(this.grid.getItem(i));
}
}
return _8;
},getSelectedCount:function(){
var c=0;
for(var i in this.selected){
if(this.selected[i]){
c++;
}
}
return c;
},_bsearch:function(v){
var o=this.sorted_sel;
var h=o.length-1,l=0,m;
while(l<=h){
var _9=this._comparePaths(o[m=(l+h)>>1],v);
if(_9<0){
l=m+1;
continue;
}
if(_9>0){
h=m-1;
continue;
}
return m;
}
return _9<0?m-_9:m;
},_comparePaths:function(a,b){
for(var i=0,l=(a.length<b.length?a.length:b.length);i<l;i++){
if(a[i]<b[i]){
return -1;
}
if(a[i]>b[i]){
return 1;
}
}
if(a.length<b.length){
return -1;
}
if(a.length>b.length){
return 1;
}
return 0;
},_insertSortedSelection:function(_a){
_a=String(_a);
var s=this.sorted_sel;
var sl=this.sorted_ltos;
var ss=this.sorted_stol;
var _b=_a.split("/");
_b=dojo.map(_b,function(_c){
return parseInt(_c,10);
});
sl[_b]=_a;
ss[_a]=_b;
if(s.length===0){
s.push(_b);
return;
}
if(s.length==1){
var _d=this._comparePaths(s[0],_b);
if(_d==1){
s.unshift(_b);
}else{
s.push(_b);
}
return;
}
var _e=this._bsearch(_b);
this.sorted_sel.splice(_e,0,_b);
},_removeSortedSelection:function(_f){
_f=String(_f);
var s=this.sorted_sel;
var sl=this.sorted_ltos;
var ss=this.sorted_stol;
if(s.length===0){
return;
}
var _10=ss[_f];
if(!_10){
return;
}
var idx=this._bsearch(_10);
if(idx>-1){
delete sl[_10];
delete ss[_f];
s.splice(idx,1);
}
},getFirstSelected:function(){
if(!this.sorted_sel.length||this.mode=="none"){
return -1;
}
var _11=this.sorted_sel[0];
if(!_11){
return -1;
}
_11=this.sorted_ltos[_11];
if(!_11){
return -1;
}
return _11;
},getNextSelected:function(_12){
if(!this.sorted_sel.length||this.mode=="none"){
return -1;
}
_12=String(_12);
var _13=this.sorted_stol[_12];
if(!_13){
return -1;
}
var idx=this._bsearch(_13);
var _14=this.sorted_sel[idx+1];
if(!_14){
return -1;
}
return this.sorted_ltos[_14];
},_range:function(_15,_16,_17){
if(!dojo.isString(_15)&&_15<0){
_15=_16;
}
var _18=this.grid.layout.cells,_19=this.grid.store,_1a=this.grid;
_15=new dojox.grid.TreePath(String(_15),_1a);
_16=new dojox.grid.TreePath(String(_16),_1a);
if(_15.compare(_16)>0){
var tmp=_15;
_15=_16;
_16=tmp;
}
var _1b=_15._str,_1c=_16._str;
_17(_1b);
var p=_15;
while((p=p.next())){
if(p._str==_1c){
break;
}
_17(p._str);
}
_17(_1c);
}});
}