root / trunk / web / dojo / dojox / grid / Selection.js @ 9
History | View | Annotate | Download (4.1 KB)
1 |
/*
|
---|---|
2 |
Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
|
3 |
Available via Academic Free License >= 2.1 OR the modified BSD license.
|
4 |
see: http://dojotoolkit.org/license for details
|
5 |
*/
|
6 |
|
7 |
|
8 |
if(!dojo._hasResource["dojox.grid.Selection"]){ |
9 |
dojo._hasResource["dojox.grid.Selection"]=true; |
10 |
dojo.provide("dojox.grid.Selection");
|
11 |
dojo.declare("dojox.grid.Selection",null,{constructor:function(_1){ |
12 |
this.grid=_1;
|
13 |
this.selected=[];
|
14 |
this.setMode(_1.selectionMode);
|
15 |
},mode:"extended",selected:null,updating:0,selectedIndex:-1,setMode:function(_2){ |
16 |
if(this.selected.length){ |
17 |
this.deselectAll();
|
18 |
} |
19 |
if(_2!="extended"&&_2!="multiple"&&_2!="single"&&_2!="none"){ |
20 |
this.mode="extended"; |
21 |
}else{
|
22 |
this.mode=_2;
|
23 |
} |
24 |
},onCanSelect:function(_3){ |
25 |
return this.grid.onCanSelect(_3); |
26 |
},onCanDeselect:function(_4){ |
27 |
return this.grid.onCanDeselect(_4); |
28 |
},onSelected:function(_5){ |
29 |
},onDeselected:function(_6){ |
30 |
},onChanging:function(){ |
31 |
},onChanged:function(){ |
32 |
},isSelected:function(_7){ |
33 |
if(this.mode=="none"){ |
34 |
return false; |
35 |
} |
36 |
return this.selected[_7]; |
37 |
},getFirstSelected:function(){ |
38 |
if(!this.selected.length||this.mode=="none"){ |
39 |
return -1; |
40 |
} |
41 |
for(var i=0,l=this.selected.length;i<l;i++){ |
42 |
if(this.selected[i]){ |
43 |
return i;
|
44 |
} |
45 |
} |
46 |
return -1; |
47 |
},getNextSelected:function(_8){ |
48 |
if(this.mode=="none"){ |
49 |
return -1; |
50 |
} |
51 |
for(var i=_8+1,l=this.selected.length;i<l;i++){ |
52 |
if(this.selected[i]){ |
53 |
return i;
|
54 |
} |
55 |
} |
56 |
return -1; |
57 |
},getSelected:function(){ |
58 |
var _9=[];
|
59 |
for(var i=0,l=this.selected.length;i<l;i++){ |
60 |
if(this.selected[i]){ |
61 |
_9.push(i); |
62 |
} |
63 |
} |
64 |
return _9;
|
65 |
},getSelectedCount:function(){ |
66 |
var c=0; |
67 |
for(var i=0;i<this.selected.length;i++){ |
68 |
if(this.selected[i]){ |
69 |
c++; |
70 |
} |
71 |
} |
72 |
return c;
|
73 |
},_beginUpdate:function(){ |
74 |
if(this.updating===0){ |
75 |
this.onChanging();
|
76 |
} |
77 |
this.updating++;
|
78 |
},_endUpdate:function(){ |
79 |
this.updating--;
|
80 |
if(this.updating===0){ |
81 |
this.onChanged();
|
82 |
} |
83 |
},select:function(_a){ |
84 |
if(this.mode=="none"){ |
85 |
return;
|
86 |
} |
87 |
if(this.mode!="multiple"){ |
88 |
this.deselectAll(_a);
|
89 |
this.addToSelection(_a);
|
90 |
}else{
|
91 |
this.toggleSelect(_a);
|
92 |
} |
93 |
},addToSelection:function(_b){ |
94 |
if(this.mode=="none"){ |
95 |
return;
|
96 |
} |
97 |
if(dojo.isArray(_b)){
|
98 |
dojo.forEach(_b,this.addToSelection,this); |
99 |
return;
|
100 |
} |
101 |
_b=Number(_b); |
102 |
if(this.selected[_b]){ |
103 |
this.selectedIndex=_b;
|
104 |
}else{
|
105 |
if(this.onCanSelect(_b)!==false){ |
106 |
this.selectedIndex=_b;
|
107 |
var _c=this.grid.getRowNode(_b); |
108 |
if(_c){
|
109 |
dojo.attr(_c,"aria-selected","true"); |
110 |
} |
111 |
this._beginUpdate();
|
112 |
this.selected[_b]=true; |
113 |
this.onSelected(_b);
|
114 |
this._endUpdate();
|
115 |
} |
116 |
} |
117 |
},deselect:function(_d){ |
118 |
if(this.mode=="none"){ |
119 |
return;
|
120 |
} |
121 |
if(dojo.isArray(_d)){
|
122 |
dojo.forEach(_d,this.deselect,this); |
123 |
return;
|
124 |
} |
125 |
_d=Number(_d); |
126 |
if(this.selectedIndex==_d){ |
127 |
this.selectedIndex=-1; |
128 |
} |
129 |
if(this.selected[_d]){ |
130 |
if(this.onCanDeselect(_d)===false){ |
131 |
return;
|
132 |
} |
133 |
var _e=this.grid.getRowNode(_d); |
134 |
if(_e){
|
135 |
dojo.attr(_e,"aria-selected","false"); |
136 |
} |
137 |
this._beginUpdate();
|
138 |
delete this.selected[_d]; |
139 |
this.onDeselected(_d);
|
140 |
this._endUpdate();
|
141 |
} |
142 |
},setSelected:function(_f,_10){ |
143 |
this[(_10?"addToSelection":"deselect")](_f); |
144 |
},toggleSelect:function(_11){ |
145 |
if(dojo.isArray(_11)){
|
146 |
dojo.forEach(_11,this.toggleSelect,this); |
147 |
return;
|
148 |
} |
149 |
this.setSelected(_11,!this.selected[_11]); |
150 |
},_range:function(_12,_13,_14){ |
151 |
var s=(_12>=0?_12:_13),e=_13; |
152 |
if(s>e){
|
153 |
e=s; |
154 |
s=_13; |
155 |
} |
156 |
for(var i=s;i<=e;i++){ |
157 |
_14(i); |
158 |
} |
159 |
},selectRange:function(_15,_16){ |
160 |
this._range(_15,_16,dojo.hitch(this,"addToSelection")); |
161 |
},deselectRange:function(_17,_18){ |
162 |
this._range(_17,_18,dojo.hitch(this,"deselect")); |
163 |
},insert:function(_19){ |
164 |
this.selected.splice(_19,0,false); |
165 |
if(this.selectedIndex>=_19){ |
166 |
this.selectedIndex++;
|
167 |
} |
168 |
},remove:function(_1a){ |
169 |
this.selected.splice(_1a,1); |
170 |
if(this.selectedIndex>=_1a){ |
171 |
this.selectedIndex--;
|
172 |
} |
173 |
},deselectAll:function(_1b){ |
174 |
for(var i in this.selected){ |
175 |
if((i!=_1b)&&(this.selected[i]===true)){ |
176 |
this.deselect(i);
|
177 |
} |
178 |
} |
179 |
},clickSelect:function(_1c,_1d,_1e){ |
180 |
if(this.mode=="none"){ |
181 |
return;
|
182 |
} |
183 |
this._beginUpdate();
|
184 |
if(this.mode!="extended"){ |
185 |
this.select(_1c);
|
186 |
}else{
|
187 |
var _1f=this.selectedIndex; |
188 |
if(!_1d){
|
189 |
this.deselectAll(_1c);
|
190 |
} |
191 |
if(_1e){
|
192 |
this.selectRange(_1f,_1c);
|
193 |
}else{
|
194 |
if(_1d){
|
195 |
this.toggleSelect(_1c);
|
196 |
}else{
|
197 |
this.addToSelection(_1c);
|
198 |
} |
199 |
} |
200 |
} |
201 |
this._endUpdate();
|
202 |
},clickSelectEvent:function(e){ |
203 |
this.clickSelect(e.rowIndex,dojo.isCopyKey(e),e.shiftKey);
|
204 |
},clear:function(){ |
205 |
this._beginUpdate();
|
206 |
this.deselectAll();
|
207 |
this._endUpdate();
|
208 |
}}); |
209 |
} |