_DndSelectingManager.js 10 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.dnd._DndSelectingManager"]){dojo._hasResource["dojox.grid.enhanced.dnd._DndSelectingManager"]=true;dojo.provide("dojox.grid.enhanced.dnd._DndSelectingManager");dojo.require("dojox.grid.util");dojo.require("dojox.grid._Builder");dojo.require("dojox.grid.enhanced.dnd._DndGrid");dojo.require("dojox.grid.enhanced.dnd._DndBuilder");dojo.require("dojox.grid.enhanced.dnd._DndRowSelector");dojo.require("dojox.grid.enhanced.dnd._DndFocusManager");dojo.declare("dojox.grid.enhanced.dnd._DndSelectingManager",null,{typeSelectingMode:[],selectingDisabledTypes:[],drugSelectionStart:null,drugCurrentPoint:null,drugMode:null,keepState:false,extendSelect:false,headerNodes:null,selectedCells:null,selectedColumns:[],selectedClass:"dojoxGridRowSelected",autoScrollRate:1000,constructor:function(_1){this.grid=_1;this.typeSelectingMode=[];this.selectingDisabledTypes=[];this.selectedColumns=[];this.drugSelectionStart=new Object();this.drugCurrentPoint=new Object();this.resetStartPoint();this.extendGridForDnd(_1);this.selectedCells=[];dojo.connect(this.grid,"_onFetchComplete",dojo.hitch(this,"refreshColumnSelection"));dojo.connect(this.grid.scroller,"scroll",dojo.hitch(this,"refreshColumnSelection"));dojo.subscribe(this.grid.rowSelectionChangedTopic,dojo.hitch(this,function(_2){try{if(_2.grid==this.grid&&_2!=this){this.cleanCellSelection();}}catch(e){}}));},extendGridForDnd:function(_3){var _4=_3.constructor;_3.mixin(_3,dojo.hitch(new dojox.grid.enhanced.dnd._DndGrid(this)));_3.constructor=_4;_3.mixin(_3.focus,new dojox.grid.enhanced.dnd._DndFocusManager());_3.mixin(_3.selection,{clickSelect:function(){}});dojo.forEach(_3.views.views,function(_5){_3.mixin(_5.content,new dojox.grid.enhanced.dnd._DndBuilder());_3.mixin(_5.header,new dojox.grid.enhanced.dnd._DndHeaderBuilder());if(_5.declaredClass=="dojox.grid._RowSelector"){_3.mixin(_5,new dojox.grid.enhanced.dnd._DndRowSelector());}dojox.grid.util.funnelEvents(_5.contentNode,_5,"doContentEvent",["mouseup"]);dojox.grid.util.funnelEvents(_5.headerNode,_5,"doHeaderEvent",["mouseup"]);});dojo.forEach(this.grid.dndDisabledTypes,function(_6){this.disableSelecting(_6);},this);this.disableFeatures();},disableFeatures:function(){if(this.selectingDisabledTypes["cell"]){this.cellClick=function(){};this.drugSelectCell=function(){};}if(this.selectingDisabledTypes["row"]){this.drugSelectRow=function(){};}if(this.selectingDisabledTypes["col"]){this.selectColumn=function(){};this.drugSelectColumn=function(){};}},disableSelecting:function(_7){this.selectingDisabledTypes[_7]=true;},isInSelectingMode:function(_8){return !!this.typeSelectingMode[_8];},setInSelectingMode:function(_9,_a){this.typeSelectingMode[_9]=_a;},getSelectedRegionInfo:function(){var _b=[],_c="";if(this.selectedColumns.length>0){_c="col";dojo.forEach(this.selectedColumns,function(_d,_e){!!_d&&_b.push(_e);});}else{if(this.grid.selection.getSelectedCount()>0){_c="row";_b=dojox.grid.Selection.prototype.getSelected.call(this.grid.selection);}}return {"selectionType":_c,"selectedIdx":_b};},clearInSelectingMode:function(){this.typeSelectingMode=[];},getHeaderNodes:function(){return this.headerNodes==null?dojo.query("[role*='columnheader']",this.grid.viewsHeaderNode):this.headerNode;},_range:function(_f,_10,_11){var s=(_f>=0?_f:_10),e=_10;if(s>e){e=s;s=_10;}for(var i=s;i<=e;i++){_11(i);}},cellClick:function(_12,_13){if(_12>this.exceptColumnsTo){this.grid.selection.clear();this.publishRowChange();var _14=this.getCellNode(_12,_13);this.cleanAll();this.addCellToSelection(_14);}},setDrugStartPoint:function(_15,_16){this.drugSelectionStart.colIndex=_15;this.drugSelectionStart.rowIndex=_16;this.drugCurrentPoint.colIndex=_15;this.firstOut=true;var _17=dojo.connect(dojo.doc,"onmousemove",dojo.hitch(this,function(e){this.outRangeValue=e.clientY-dojo.coords(this.grid.domNode).y-this.grid.domNode.offsetHeight;if(this.outRangeValue>0){if(this.drugSelectionStart.colIndex==-1){if(!this.outRangeY){this.autoRowScrollDrug(e);}}else{if(this.drugSelectionStart.rowIndex==-1){}else{this.autoCellScrollDrug(e);}}}else{this.firstOut=true;this.outRangeY=false;}}));var _18=dojo.connect(dojo.doc,"onmouseup",dojo.hitch(this,function(e){this.outRangeY=false;dojo.disconnect(_18);dojo.disconnect(_17);this.grid.onMouseUp(e);}));},autoRowScrollDrug:function(e){this.outRangeY=true;this.autoSelectNextRow();},autoSelectNextRow:function(){if(this.grid.select.outRangeY){this.grid.scrollToRow(this.grid.scroller.firstVisibleRow+1);this.drugSelectRow(this.drugCurrentPoint.rowIndex+1);setTimeout(dojo.hitch(this,"autoSelectNextRow",this.drugCurrentPoint.rowIndex+1),this.getAutoScrollRate());}},autoCellScrollDrug:function(e){var _19=null;dojo.forEach(this.getHeaderNodes(),function(_1a){var _1b=dojo.coords(_1a);if(e.clientX>=_1b.x&&e.clientX<=_1b.x+_1b.w){_19=Number(_1a.attributes.getNamedItem("idx").value);}});if(_19!=this.drugCurrentPoint.colIndex||this.firstOut){if(!this.firstOut){this.colChanged=true;this.drugCurrentPoint.colIndex=_19;}this.firstOut=false;this.outRangeY=true;dojo.hitch(this,"autoSelectCellInNextRow")();}},autoSelectCellInNextRow:function(){if(this.grid.select.outRangeY){this.grid.scrollToRow(this.grid.scroller.firstVisibleRow+1);this.drugSelectCell(this.drugCurrentPoint.colIndex,this.drugCurrentPoint.rowIndex+1);if(this.grid.select.colChanged){this.grid.select.colChanged=false;}else{setTimeout(dojo.hitch(this,"autoSelectCellInNextRow",this.drugCurrentPoint.rowIndex+1),this.getAutoScrollRate());}}},getAutoScrollRate:function(){return this.autoScrollRate;},resetStartPoint:function(){if(this.drugSelectionStart.colIndex==-1&&this.drugSelectionStart.rowIndex==-1){return;}this.lastDrugSelectionStart=dojo.clone(this.drugSelectionStart);this.drugSelectionStart.colIndex=-1;this.drugSelectionStart.rowIndex=-1;},restorLastDragPoint:function(){this.drugSelectionStart=dojo.clone(this.lastDrugSelectionStart);},drugSelectCell:function(_1c,_1d){this.cleanAll();this.drugCurrentPoint.columnIndex=_1c;this.drugCurrentPoint.rowIndex=_1d;var _1e,_1f,_20,_21;if(_1d<this.drugSelectionStart.rowIndex){_1e=_1d;_1f=this.drugSelectionStart.rowIndex;}else{_1e=this.drugSelectionStart.rowIndex;_1f=_1d;}if(_1c<this.drugSelectionStart.colIndex){_20=_1c;_21=this.drugSelectionStart.colIndex;}else{_20=this.drugSelectionStart.colIndex;_21=_1c;}for(var i=_20;i<=_21;i++){this.addColumnRangeToSelection(i,_1e,_1f);}},selectColumn:function(_22){this.addColumnToSelection(_22);},drugSelectColumn:function(_23){this.selectColumnRange(this.drugSelectionStart.colIndex,_23);},drugSelectColumnToMax:function(dir){if(dir=="left"){this.selectColumnRange(this.drugSelectionStart.colIndex,0);}else{this.selectColumnRange(this.drugSelectionStart.colIndex,this.getHeaderNodes().length-1);}},selectColumnRange:function(_24,_25){if(!this.keepState){this.cleanAll();}this._range(_24,_25,dojo.hitch(this,"addColumnToSelection"));},addColumnToSelection:function(_26){this.selectedColumns[_26]=true;dojo.toggleClass(this.getHeaderNodes()[_26],"dojoxGridHeaderSelected",true);this._rangCellsInColumn(_26,-1,Number.POSITIVE_INFINITY,this.addCellToSelection);},addColumnRangeToSelection:function(_27,_28,to){var _29=this.grid.views;var _2a=[];var _2b=this;dojo.forEach(_29.views,function(_2c){dojo.forEach(this.getViewRowNodes(_2c.rowNodes),function(_2d,_2e){if(!_2d){return;}if(_2e>=_28&&_2e<=to){dojo.forEach(_2d.firstChild.rows[0].cells,function(_2f){if(_2f&&_2f.attributes&&(idx=_2f.attributes.getNamedItem("idx"))&&Number(idx.value)==_27){_2b.addCellToSelection(_2f);}});}},this);},this);},_rangCellsInColumn:function(_30,_31,to,_32){var _33=this.grid.views;var _34=[];var _35=this;dojo.forEach(_33.views,function(_36){dojo.forEach(this.getViewRowNodes(_36.rowNodes),function(_37,_38){if(!_37){return;}if(_38>=_31&&_38<=to){dojo.forEach(_37.firstChild.rows[0].cells,function(_39){if(_39&&_39.attributes&&(idx=_39.attributes.getNamedItem("idx"))&&Number(idx.value)==_30){_32(_39,_35);}});}},this);},this);},drugSelectRow:function(_3a){this.drugCurrentPoint.rowIndex=_3a;this.cleanCellSelection();this.clearDrugDivs();var _3b=this.grid.selection;_3b._beginUpdate();if(!this.keepState){_3b.deselectAll();}_3b.selectRange(this.drugSelectionStart.rowIndex,_3a);_3b._endUpdate();this.publishRowChange();},drugSelectRowToMax:function(dir){if(dir=="up"){this.drugSelectRow(0);}else{this.drugSelectRow(this.grid.rowCount);}},getCellNode:function(_3c,_3d){var _3e=[],_3f=null;var _40=this.grid.views;for(var i=0,v,n;(v=_40.views[i])&&(n=v.getRowNode(_3d));i++){_3e.push(n);}dojo.forEach(_3e,dojo.hitch(function(_41,_42){if(_3f){return;}var _43=dojo.query("[idx='"+_3c+"']",_41);if(_43&&_43[0]){_3f=_43[0];}}));return _3f;},addCellToSelection:function(_44,_45){if(!_45){_45=this;}_45.selectedCells[_45.selectedCells.length]=_44;dojo.toggleClass(_44,_45.selectedClass,true);},isColSelected:function(_46){return this.selectedColumns[_46];},isRowSelected:function(_47){return this.grid.selection.selected[_47];},isContinuousSelection:function(_48){var _49=-1;for(var i=0;i<_48.length;i++){if(!_48[i]){continue;}if(_49<0||i-_49==1){_49=i;}else{if(i-_49>=2){return false;}}}return _49>=0?true:false;},cleanCellSelection:function(){dojo.forEach(this.selectedCells,dojo.hitch(this,"removeCellSelectedState"));this.selectedCells=[];dojo.forEach(this.selectedColumns,function(_4a,_4b){if(_4a){dojo.toggleClass(this.getHeaderNodes()[_4b],"dojoxGridHeaderSelected",false);}},this);this.selectedColumns=[];this.grid.edit.isEditing()&&this.grid.edit.apply();},removeCellSelectedState:function(_4c){dojo.toggleClass(_4c,this.selectedClass,false);},cleanAll:function(){this.cleanCellSelection();this.grid.selection.clear();this.publishRowChange();},refreshColumnSelection:function(){dojo.forEach(this.selectedColumns,dojo.hitch(this,function(_4d,_4e){if(_4d){this.grid.select.addColumnToSelection(_4e);}}));},inSelectedArea:function(_4f,_50){return this.selectedColumns[_4f]||this.gird.selection.selecteded[_50];},publishRowChange:function(){dojo.publish(this.grid.rowSelectionChangedTopic,[this]);},getViewRowNodes:function(_51){var _52=[];for(i in _51){_52.push(_51[i]);}return _52;},getFirstSelected:function(){return dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype.getFirstSelected)();},getLastSelected:function(){var _53=this.grid.selection.selected;for(var i=_53.length-1;i>=0;i--){if(_53[i]){return i;}}return -1;}});}