root / trunk / web / dojo / dojox / grid / enhanced / plugins / IndirectSelection.js
History | View | Annotate | Download (10.1 KB)
1 | 9 | andrej.cim | /*
|
---|---|---|---|
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 | } |