root / trunk / web / dojo / dojox / grid / enhanced / plugins / IndirectSelection.js
History | View | Annotate | Download (10.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.enhanced.plugins.IndirectSelection"]){ |
9 |
dojo._hasResource["dojox.grid.enhanced.plugins.IndirectSelection"]=true; |
10 |
dojo.provide("dojox.grid.enhanced.plugins.IndirectSelection");
|
11 |
dojo.require("dojox.grid.cells.dijit");
|
12 |
dojo.require("dojox.grid.cells._base");
|
13 |
dojo.declare("dojox.grid.enhanced.plugins.IndirectSelection",null,{constructor:function(_1){ |
14 |
this.grid=_1;
|
15 |
dojo.connect(_1.layout,"setStructure",dojo.hitch(_1.layout,this.addRowSelectCell)); |
16 |
},addRowSelectCell:function(){ |
17 |
if(!this.grid.indirectSelection||this.grid.selectionMode=="none"){ |
18 |
return;
|
19 |
} |
20 |
var _2=false,_3=["get","formatter","field","fields"],_4={type:dojox.grid.cells.DijitMultipleRowSelector,name:"",editable:true,width:"30px",styles:"text-align: center;"}; |
21 |
dojo.forEach(this.structure,dojo.hitch(this,function(_5){ |
22 |
var _6=_5.cells;
|
23 |
if(_6&&_6.length>0&&!_2){ |
24 |
var _7=_6[0]; |
25 |
if(_7[0]&&_7[0]["isRowSelector"]){ |
26 |
_2=true;
|
27 |
return;
|
28 |
} |
29 |
var _8,_9=this.grid.selectionMode=="single"?dojox.grid.cells.DijitSingleRowSelector:dojox.grid.cells.DijitMultipleRowSelector; |
30 |
if(!dojo.isObject(this.grid.indirectSelection)){ |
31 |
_8=dojo.mixin(_4,{type:_9});
|
32 |
}else{
|
33 |
_8=dojo.mixin(_4,this.grid.indirectSelection,{type:_9,editable:true}); |
34 |
dojo.forEach(_3,function(_a){
|
35 |
if(_a in _8){ |
36 |
delete _8[_a];
|
37 |
} |
38 |
}); |
39 |
} |
40 |
_6.length>1&&(_8["rowSpan"]=_6.length); |
41 |
dojo.forEach(this.cells,function(_b,i){ |
42 |
if(_b.index>=0){ |
43 |
_b.index+=1;
|
44 |
}else{
|
45 |
} |
46 |
}); |
47 |
var _c=this.addCellDef(0,0,_8); |
48 |
_c.index=0;
|
49 |
_7.unshift(_c); |
50 |
this.cells.unshift(_c);
|
51 |
this.grid.rowSelectCell=_c;
|
52 |
_2=true;
|
53 |
} |
54 |
})); |
55 |
this.cellCount=this.cells.length; |
56 |
}}); |
57 |
dojo.declare("dojox.grid.cells._SingleRowSelectorMixin",null,{alwaysEditing:true,widgetMap:{},widget:null,isRowSelector:true,defaultValue:false,formatEditing:function(_d,_e){ |
58 |
this.needFormatNode(_d,_e);
|
59 |
},_formatNode:function(_f,_10){ |
60 |
this.formatNode(_f,_10);
|
61 |
},setValue:function(_11,_12){ |
62 |
return;
|
63 |
},get:function(_13){ |
64 |
var _14=this.widgetMap[this.view.id]?this.widgetMap[this.view.id][_13]:null; |
65 |
var _15=_14?_14.attr("checked"):""; |
66 |
return _15;
|
67 |
},_fireSelectionChanged:function(){ |
68 |
dojo.publish(this.grid.rowSelectionChangedTopic,[this]); |
69 |
},_selectionChanged:function(obj){ |
70 |
if(obj==this||obj.grid&&obj.grid!=this.grid){ |
71 |
return;
|
72 |
} |
73 |
for(var i in this.widgetMap[this.view.id]){ |
74 |
var idx=new Number(i); |
75 |
var _16=this.widgetMap[this.view.id][idx]; |
76 |
var _17=!!this.grid.selection.selected[idx]; |
77 |
_16.attr("checked",_17);
|
78 |
} |
79 |
this.defaultValue=false; |
80 |
this.grid.edit.isEditing()&&this.grid.edit.apply(); |
81 |
},_toggleSingleRow:function(idx,_18){ |
82 |
var _19;
|
83 |
dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[_18?"addToSelection":"deselect"])(idx); |
84 |
if(this.widgetMap[this.view.id]&&(_19=this.widgetMap[this.view.id][idx])){ |
85 |
_19.attr("checked",_18);
|
86 |
} |
87 |
this._fireSelectionChanged();
|
88 |
},inIndirectSelectionMode:function(){ |
89 |
},toggleAllSelection:function(){ |
90 |
}}); |
91 |
dojo.declare("dojox.grid.cells._MultipleRowSelectorMixin",null,{swipeStartRowIndex:-1,swipeMinRowIndex:-1,swipeMaxRowIndex:-1,toSelect:false,lastClickRowIdx:-1,toggleAllTrigerred:false,_inDndSelection:false,domousedown:function(e){ |
92 |
if(e.target.tagName=="INPUT"){ |
93 |
this._startSelection(e.rowIndex);
|
94 |
} |
95 |
dojo.stopEvent(e); |
96 |
},domousemove:function(e){ |
97 |
this._updateSelection(e,0); |
98 |
},onRowMouseOver:function(e){ |
99 |
this._updateSelection(e,0); |
100 |
if(this.grid.dnd){ |
101 |
this._inDndSelection=this.grid.select.isInSelectingMode("row"); |
102 |
} |
103 |
},domouseup:function(e){ |
104 |
dojo.isIE&&this.view.content.decorateEvent(e);
|
105 |
var _1a=e.cellIndex>=0&&(this.inIndirectSelectionMode()||this._inDndSelection)&&!this.grid.edit.isEditRow(e.rowIndex); |
106 |
_1a&&this._focusEndingCell(e.rowIndex,e.cellIndex);
|
107 |
this._finisheSelect();
|
108 |
},dokeyup:function(e){ |
109 |
if(!e.shiftKey){
|
110 |
this._finisheSelect();
|
111 |
} |
112 |
},_startSelection:function(_1b){ |
113 |
this.swipeStartRowIndex=this.swipeMinRowIndex=this.swipeMaxRowIndex=_1b; |
114 |
this.toSelect=!this.widgetMap[this.view.id][_1b].attr("checked"); |
115 |
},_updateSelection:function(e,_1c){ |
116 |
if(this.swipeStartRowIndex<0){ |
117 |
return;
|
118 |
} |
119 |
var _1d=_1c!=0; |
120 |
var _1e=e.rowIndex-this.swipeStartRowIndex+_1c; |
121 |
_1e>0&&(this.swipeMaxRowIndex<e.rowIndex+_1c)&&(this.swipeMaxRowIndex=e.rowIndex+_1c); |
122 |
_1e<0&&(this.swipeMinRowIndex>e.rowIndex+_1c)&&(this.swipeMinRowIndex=e.rowIndex+_1c); |
123 |
if(this.swipeMinRowIndex!=this.swipeMaxRowIndex){ |
124 |
for(var i in this.widgetMap[this.view.id]){ |
125 |
var idx=new Number(i); |
126 |
var _1f=(idx>=(_1e>0?this.swipeStartRowIndex:e.rowIndex+_1c)&&idx<=(_1e>0?e.rowIndex+_1c:this.swipeStartRowIndex)); |
127 |
var _20=(idx>=this.swipeMinRowIndex&&idx<=this.swipeMaxRowIndex); |
128 |
if(_1f&&!(_1e==0&&!this.toSelect)){ |
129 |
(this.widgetMap[this.view.id][idx]).attr("checked",this.toSelect); |
130 |
dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[this.toSelect?"addToSelection":"deselect"])(idx); |
131 |
}else{
|
132 |
if(_20&&!_1d){
|
133 |
(this.widgetMap[this.view.id][idx]).attr("checked",!this.toSelect); |
134 |
dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[!this.toSelect?"addToSelection":"deselect"])(idx); |
135 |
} |
136 |
} |
137 |
} |
138 |
} |
139 |
this._fireSelectionChanged();
|
140 |
},swipeSelectionByKey:function(e,_21){ |
141 |
if(this.swipeStartRowIndex<0){ |
142 |
this.swipeStartRowIndex=e.rowIndex;
|
143 |
if(_21>0){ |
144 |
this.swipeMaxRowIndex=e.rowIndex+_21;
|
145 |
this.swipeMinRowIndex=e.rowIndex;
|
146 |
}else{
|
147 |
this.swipeMinRowIndex=e.rowIndex+_21;
|
148 |
this.swipeMaxRowIndex=e.rowIndex;
|
149 |
} |
150 |
this.toSelect=this.widgetMap[this.view.id][e.rowIndex].attr("checked"); |
151 |
} |
152 |
this._updateSelection(e,_21);
|
153 |
},_finisheSelect:function(){ |
154 |
this.swipeStartRowIndex=-1; |
155 |
this.swipeMinRowIndex=-1; |
156 |
this.swipeMaxRowIndex=-1; |
157 |
this.toSelect=false; |
158 |
},inIndirectSelectionMode:function(){ |
159 |
return this.swipeStartRowIndex>=0; |
160 |
},toggleAllSelection:function(_22){ |
161 |
for(var i in this.widgetMap[this.view.id]){ |
162 |
var idx=new Number(i); |
163 |
var _23=this.widgetMap[this.view.id][idx]; |
164 |
_23.attr("checked",_22);
|
165 |
dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[_22?"addToSelection":"deselect"])(idx); |
166 |
} |
167 |
!_22&&this.grid.selection.deselectAll();
|
168 |
this.defaultValue=_22;
|
169 |
this.toggleAllTrigerred=true; |
170 |
this._fireSelectionChanged();
|
171 |
}}); |
172 |
dojo.declare("dojox.grid.cells.DijitSingleRowSelector",[dojox.grid.cells._Widget,dojox.grid.cells._SingleRowSelectorMixin],{widgetClass:dijit.form.RadioButton,constructor:function(){ |
173 |
dojo.subscribe(this.grid.rowSelectionChangedTopic,this,this._selectionChanged); |
174 |
dojo.subscribe(this.grid.sortRowSelectionChangedTopic,this,this._selectionChanged); |
175 |
this.grid.indirectSelector=this; |
176 |
},formatNode:function(_24,_25){ |
177 |
if(!this.widgetClass){ |
178 |
return _24;
|
179 |
} |
180 |
!this.widgetMap[this.view.id]&&(this.widgetMap[this.view.id]={}); |
181 |
var _26=this.widgetMap[this.view.id][_25]; |
182 |
var _27=this.getNode(_25); |
183 |
if(!_27){
|
184 |
return;
|
185 |
} |
186 |
var _28=!_27.firstChild||(_26&&_26.domNode!=_27.firstChild);
|
187 |
var _29=_28&&!_27.firstChild?_27.appendChild(dojo.create("div")):_27.firstChild; |
188 |
if(!_26||dojo.isIE){
|
189 |
!this.widgetProps&&(this.widgetProps={}); |
190 |
this.widgetProps.name="select_"+this.view.id; |
191 |
var _2a=this.getDefaultValue(_26,_25); |
192 |
this.widget=_26=this.createWidget(_29,_24,_25); |
193 |
this.widgetMap[this.view.id][_25]=_26; |
194 |
this.widget.attr("checked",_2a); |
195 |
dojo.connect(_26,"_onClick",dojo.hitch(this,function(e){ |
196 |
this._selectRow(e,_25);
|
197 |
})); |
198 |
dojo.connect(_26.domNode,"onkeyup",dojo.hitch(this,function(e){ |
199 |
e.keyCode==dojo.keys.SPACE&&this._selectRow(e,_25,true); |
200 |
})); |
201 |
dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[_2a?"addToSelection":"deselect"])(_25); |
202 |
}else{
|
203 |
this.widget=_26;
|
204 |
dojo.addClass(this.widget.domNode,"dojoxGridWidgetHidden"); |
205 |
_28&&this.attachWidget(_29,_24,_25);
|
206 |
} |
207 |
this.grid.rowHeightChanged(_25);
|
208 |
dojo.removeClass(this.widget.domNode,"dojoxGridWidgetHidden"); |
209 |
(_25==this.grid.lastRenderingRowIdx)&&dojo.removeClass(this.grid.domNode,"dojoxGridSortInProgress"); |
210 |
},getDefaultValue:function(_2b,_2c){ |
211 |
var _2d=_2b?_2b.attr("checked"):this.defaultValue; |
212 |
if(!_2b){
|
213 |
if(this.grid.nestedSorting){ |
214 |
_2d=_2d||this.grid.getStoreSelectedValue(_2c);
|
215 |
} |
216 |
_2d=this.grid.selection.isSelected(_2c)?true:_2d; |
217 |
} |
218 |
return _2d;
|
219 |
},focus:function(_2e){ |
220 |
var _2f=this.widgetMap[this.view.id][_2e]; |
221 |
if(_2f){
|
222 |
setTimeout(dojo.hitch(_2f,function(){
|
223 |
dojox.grid.util.fire(this,"focus"); |
224 |
}),0);
|
225 |
} |
226 |
},_focusEndingCell:function(_30,_31){ |
227 |
var _32=this.grid.getCell(_31); |
228 |
this.grid.focus.setFocusCell(_32,_30);
|
229 |
this.grid.isDndSelectEnable&&this.grid.focus._blurRowBar(); |
230 |
},_selectRow:function(e,_33,_34){ |
231 |
if(dojo.isMoz&&_34){
|
232 |
return;
|
233 |
} |
234 |
dojo.stopEvent(e); |
235 |
this._focusEndingCell(_33,0); |
236 |
var _35=!this.grid.selection.selected[_33]; |
237 |
this.grid.selection.deselectAll();
|
238 |
this.grid.selection.addToSelection(_33);
|
239 |
if(!dojo.isMoz){
|
240 |
var _36=this.widgetMap[this.view.id][_33]; |
241 |
_36.attr("checked",true); |
242 |
} |
243 |
this._fireSelectionChanged();
|
244 |
},toggleRow:function(idx,_37){ |
245 |
var _38=dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype.getFirstSelected)(); |
246 |
if(idx!=_38&&!_37||idx==_38&&_37){
|
247 |
return;
|
248 |
} |
249 |
var _39;
|
250 |
if(idx!=_38&&_37&&this.widgetMap[this.view.id]&&(_39=this.widgetMap[this.view.id][_38])){ |
251 |
_39.attr("checked",false); |
252 |
} |
253 |
this.grid.selection.deselectAll();
|
254 |
this._toggleSingleRow(idx,_37);
|
255 |
},setDisabled:function(idx,_3a){ |
256 |
if(this.widgetMap[this.view.id]){ |
257 |
var _3b=this.widgetMap[this.view.id][idx]; |
258 |
_3b&&_3b.attr("disabled",_3a);
|
259 |
} |
260 |
}}); |
261 |
dojo.declare("dojox.grid.cells.DijitMultipleRowSelector",[dojox.grid.cells.DijitSingleRowSelector,dojox.grid.cells._MultipleRowSelectorMixin],{widgetClass:dijit.form.CheckBox,constructor:function(){ |
262 |
dojo.connect(dojo.doc,"onmouseup",this,"domouseup"); |
263 |
this.grid.indirectSelector=this; |
264 |
},_selectRow:function(e,_3c,_3d){ |
265 |
dojo.stopEvent(e); |
266 |
this._focusEndingCell(_3c,0); |
267 |
var _3e=_3c-this.lastClickRowIdx; |
268 |
if(this.lastClickRowIdx>=0&&!e.ctrlKey&&!e.altKey&&e.shiftKey){ |
269 |
var _3f=this.widgetMap[this.view.id][_3c].attr("checked"); |
270 |
_3f=_3d?!_3f:_3f; |
271 |
for(var i in this.widgetMap[this.view.id]){ |
272 |
var idx=new Number(i); |
273 |
var _40=(idx>=(_3e>0?this.lastClickRowIdx:_3c)&&idx<=(_3e>0?_3c:this.lastClickRowIdx)); |
274 |
if(_40){
|
275 |
var _41=this.widgetMap[this.view.id][idx]; |
276 |
_41.attr("checked",_3f);
|
277 |
dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[_3f?"addToSelection":"deselect"])(idx); |
278 |
} |
279 |
} |
280 |
}else{
|
281 |
var _42=!this.grid.selection.selected[_3c]; |
282 |
var _41=this.widgetMap[this.view.id][_3c]; |
283 |
_41.attr("checked",_42);
|
284 |
dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[_42?"addToSelection":"deselect"])(_3c); |
285 |
} |
286 |
this.lastClickRowIdx=_3c;
|
287 |
this._fireSelectionChanged();
|
288 |
},toggleRow:function(idx,_43){ |
289 |
this._toggleSingleRow(idx,_43);
|
290 |
}}); |
291 |
} |