IndirectSelection.js 9.8 KB

12345678
  1. /*
  2. Copyright (c) 2004-2009, 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. if(!dojo._hasResource["dojox.grid.enhanced.plugins.IndirectSelection"]){dojo._hasResource["dojox.grid.enhanced.plugins.IndirectSelection"]=true;dojo.provide("dojox.grid.enhanced.plugins.IndirectSelection");dojo.require("dojox.grid.cells.dijit");dojo.require("dojox.grid.cells._base");dojo.declare("dojox.grid.enhanced.plugins.IndirectSelection",null,{constructor:function(_1){this.grid=_1;dojo.connect(_1.layout,"setStructure",dojo.hitch(_1.layout,this.addRowSelectCell));},addRowSelectCell:function(){if(!this.grid.indirectSelection||this.grid.selectionMode=="none"){return;}var _2=false,_3=["get","formatter","field","fields"],_4={type:dojox.grid.cells.DijitMultipleRowSelector,name:"",editable:true,width:"30px",styles:"text-align: center;"};dojo.forEach(this.structure,dojo.hitch(this,function(_5){var _6=_5.cells;if(_6&&_6.length>0&&!_2){var _7=_6[0];if(_7[0]&&_7[0]["isRowSelector"]){_2=true;return;}var _8,_9=this.grid.selectionMode=="single"?dojox.grid.cells.DijitSingleRowSelector:dojox.grid.cells.DijitMultipleRowSelector;if(!dojo.isObject(this.grid.indirectSelection)){_8=dojo.mixin(_4,{type:_9});}else{_8=dojo.mixin(_4,this.grid.indirectSelection,{type:_9,editable:true});dojo.forEach(_3,function(_a){if(_a in _8){delete _8[_a];}});}_6.length>1&&(_8["rowSpan"]=_6.length);dojo.forEach(this.cells,function(_b,i){if(_b.index>=0){_b.index+=1;}else{}});var _c=this.addCellDef(0,0,_8);_c.index=0;_7.unshift(_c);this.cells.unshift(_c);this.grid.rowSelectCell=_c;_2=true;}}));this.cellCount=this.cells.length;}});dojo.declare("dojox.grid.cells._SingleRowSelectorMixin",null,{alwaysEditing:true,widgetMap:{},widget:null,isRowSelector:true,defaultValue:false,formatEditing:function(_d,_e){this.needFormatNode(_d,_e);},_formatNode:function(_f,_10){this.formatNode(_f,_10);},setValue:function(_11,_12){return;},get:function(_13){var _14=this.widgetMap[this.view.id]?this.widgetMap[this.view.id][_13]:null;var _15=_14?_14.attr("checked"):"";return _15;},_fireSelectionChanged:function(){dojo.publish(this.grid.rowSelectionChangedTopic,[this]);},_selectionChanged:function(obj){if(obj==this){return;}for(var i in this.widgetMap[this.view.id]){var idx=new Number(i);var _16=this.widgetMap[this.view.id][idx];var _17=!!this.grid.selection.selected[idx];_16.attr("checked",_17);}this.defaultValue=false;this.grid.edit.isEditing()&&this.grid.edit.apply();},_toggleSingleRow:function(idx,_18){var _19;dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[_18?"addToSelection":"deselect"])(idx);if(this.widgetMap[this.view.id]&&(_19=this.widgetMap[this.view.id][idx])){_19.attr("checked",_18);}this._fireSelectionChanged();},inIndirectSelectionMode:function(){},toggleAllSelection:function(){}});dojo.declare("dojox.grid.cells._MultipleRowSelectorMixin",null,{swipeStartRowIndex:-1,swipeMinRowIndex:-1,swipeMaxRowIndex:-1,toSelect:false,lastClickRowIdx:-1,toggleAllTrigerred:false,_inDndSelection:false,domousedown:function(e){if(e.target.tagName=="INPUT"){this._startSelection(e.rowIndex);}dojo.stopEvent(e);},domousemove:function(e){this._updateSelection(e,0);},onRowMouseOver:function(e){this._updateSelection(e,0);if(this.grid.dnd){this._inDndSelection=this.grid.select.isInSelectingMode("row");}},domouseup:function(e){dojo.isIE&&this.view.content.decorateEvent(e);var _1a=e.cellIndex>=0&&(this.inIndirectSelectionMode()||this._inDndSelection)&&!this.grid.edit.isEditRow(e.rowIndex);_1a&&this._focusEndingCell(e.rowIndex,e.cellIndex);this._finisheSelect();},dokeyup:function(e){if(!e.shiftKey){this._finisheSelect();}},_startSelection:function(_1b){this.swipeStartRowIndex=this.swipeMinRowIndex=this.swipeMaxRowIndex=_1b;this.toSelect=!this.widgetMap[this.view.id][_1b].attr("checked");},_updateSelection:function(e,_1c){if(this.swipeStartRowIndex<0){return;}var _1d=_1c!=0;var _1e=e.rowIndex-this.swipeStartRowIndex+_1c;_1e>0&&(this.swipeMaxRowIndex<e.rowIndex+_1c)&&(this.swipeMaxRowIndex=e.rowIndex+_1c);_1e<0&&(this.swipeMinRowIndex>e.rowIndex+_1c)&&(this.swipeMinRowIndex=e.rowIndex+_1c);if(this.swipeMinRowIndex!=this.swipeMaxRowIndex){for(var i in this.widgetMap[this.view.id]){var idx=new Number(i);var _1f=(idx>=(_1e>0?this.swipeStartRowIndex:e.rowIndex+_1c)&&idx<=(_1e>0?e.rowIndex+_1c:this.swipeStartRowIndex));var _20=(idx>=this.swipeMinRowIndex&&idx<=this.swipeMaxRowIndex);if(_1f&&!(_1e==0&&!this.toSelect)){(this.widgetMap[this.view.id][idx]).attr("checked",this.toSelect);dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[this.toSelect?"addToSelection":"deselect"])(idx);}else{if(_20&&!_1d){(this.widgetMap[this.view.id][idx]).attr("checked",!this.toSelect);dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[!this.toSelect?"addToSelection":"deselect"])(idx);}}}}this._fireSelectionChanged();},swipeSelectionByKey:function(e,_21){if(this.swipeStartRowIndex<0){this.swipeStartRowIndex=e.rowIndex;if(_21>0){this.swipeMaxRowIndex=e.rowIndex+_21;this.swipeMinRowIndex=e.rowIndex;}else{this.swipeMinRowIndex=e.rowIndex+_21;this.swipeMaxRowIndex=e.rowIndex;}this.toSelect=this.widgetMap[this.view.id][e.rowIndex].attr("checked");}this._updateSelection(e,_21);},_finisheSelect:function(){this.swipeStartRowIndex=-1;this.swipeMinRowIndex=-1;this.swipeMaxRowIndex=-1;this.toSelect=false;},inIndirectSelectionMode:function(){return this.swipeStartRowIndex>=0;},toggleAllSelection:function(_22){for(var i in this.widgetMap[this.view.id]){var idx=new Number(i);var _23=this.widgetMap[this.view.id][idx];_23.attr("checked",_22);dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[_22?"addToSelection":"deselect"])(idx);}!_22&&this.grid.selection.deselectAll();this.defaultValue=_22;this.toggleAllTrigerred=true;this._fireSelectionChanged();}});dojo.declare("dojox.grid.cells.DijitSingleRowSelector",[dojox.grid.cells._Widget,dojox.grid.cells._SingleRowSelectorMixin],{widgetClass:dijit.form.RadioButton,constructor:function(){dojo.subscribe(this.grid.rowSelectionChangedTopic,this,this._selectionChanged);dojo.subscribe(this.grid.sortRowSelectionChangedTopic,this,this._selectionChanged);this.grid.indirectSelector=this;},formatNode:function(_24,_25){if(!this.widgetClass){return _24;}!this.widgetMap[this.view.id]&&(this.widgetMap[this.view.id]={});var _26=this.widgetMap[this.view.id][_25];var _27=this.getNode(_25);if(!_27){return;}var _28=!_27.firstChild||(_26&&_26.domNode!=_27.firstChild);var _29=_28&&!_27.firstChild?_27.appendChild(dojo.create("div")):_27.firstChild;if(!_26||dojo.isIE){!this.widgetProps&&(this.widgetProps={});this.widgetProps.name="select_"+this.view.id;var _2a=this.getDefaultValue(_26,_25);this.widget=_26=this.createWidget(_29,_24,_25);this.widgetMap[this.view.id][_25]=_26;this.widget.attr("checked",_2a);dojo.connect(_26,"_onClick",dojo.hitch(this,function(e){this._selectRow(e,_25);}));dojo.connect(_26.domNode,"onkeyup",dojo.hitch(this,function(e){e.keyCode==dojo.keys.SPACE&&this._selectRow(e,_25,true);}));dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[_2a?"addToSelection":"deselect"])(_25);}else{this.widget=_26;dojo.addClass(this.widget.domNode,"dojoxGridWidgetHidden");_28&&this.attachWidget(_29,_24,_25);}this.grid.rowHeightChanged(_25);dojo.removeClass(this.widget.domNode,"dojoxGridWidgetHidden");(_25==this.grid.lastRenderingRowIdx)&&dojo.removeClass(this.grid.domNode,"dojoxGridSortInProgress");},getDefaultValue:function(_2b,_2c){var _2d=_2b?_2b.attr("checked"):this.defaultValue;if(!_2b){if(this.grid.nestedSorting){_2d=_2d||this.grid.getStoreSelectedValue(_2c);}_2d=this.grid.selection.isSelected(_2c)?true:_2d;}return _2d;},focus:function(_2e){var _2f=this.widgetMap[this.view.id][_2e];if(_2f){setTimeout(dojo.hitch(_2f,function(){dojox.grid.util.fire(this,"focus");}),0);}},_focusEndingCell:function(_30,_31){var _32=this.grid.getCell(_31);this.grid.focus.setFocusCell(_32,_30);this.grid.isDndSelectEnable&&this.grid.focus._blurRowBar();},_selectRow:function(e,_33,_34){if(dojo.isMoz&&_34){return;}dojo.stopEvent(e);this._focusEndingCell(_33,0);var _35=!this.grid.selection.selected[_33];this.grid.selection.deselectAll();this.grid.selection.addToSelection(_33);if(!dojo.isMoz){var _36=this.widgetMap[this.view.id][_33];_36.attr("checked",true);}this._fireSelectionChanged();},toggleRow:function(idx,_37){var _38=dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype.getFirstSelected)();if(idx!=_38&&!_37||idx==_38&&_37){return;}var _39;if(idx!=_38&&_37&&this.widgetMap[this.view.id]&&(_39=this.widgetMap[this.view.id][_38])){_39.attr("checked",false);}this.grid.selection.deselectAll();this._toggleSingleRow(idx,_37);},setDisabled:function(idx,_3a){if(this.widgetMap[this.view.id]){var _3b=this.widgetMap[this.view.id][idx];_3b&&_3b.attr("disabled",_3a);}}});dojo.declare("dojox.grid.cells.DijitMultipleRowSelector",[dojox.grid.cells.DijitSingleRowSelector,dojox.grid.cells._MultipleRowSelectorMixin],{widgetClass:dijit.form.CheckBox,constructor:function(){dojo.connect(dojo.doc,"onmouseup",this,"domouseup");this.grid.indirectSelector=this;},_selectRow:function(e,_3c,_3d){dojo.stopEvent(e);this._focusEndingCell(_3c,0);var _3e=_3c-this.lastClickRowIdx;if(this.lastClickRowIdx>=0&&!e.ctrlKey&&!e.altKey&&e.shiftKey){var _3f=this.widgetMap[this.view.id][_3c].attr("checked");_3f=_3d?!_3f:_3f;for(var i in this.widgetMap[this.view.id]){var idx=new Number(i);var _40=(idx>=(_3e>0?this.lastClickRowIdx:_3c)&&idx<=(_3e>0?_3c:this.lastClickRowIdx));if(_40){var _41=this.widgetMap[this.view.id][idx];_41.attr("checked",_3f);dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[_3f?"addToSelection":"deselect"])(idx);}}}else{var _42=!this.grid.selection.selected[_3c];var _41=this.widgetMap[this.view.id][_3c];_41.attr("checked",_42);dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[_42?"addToSelection":"deselect"])(_3c);}this.lastClickRowIdx=_3c;this._fireSelectionChanged();},toggleRow:function(idx,_43){this._toggleSingleRow(idx,_43);}});}