| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 | 
							- /*
 
- 	Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
 
- 	Available via Academic Free License >= 2.1 OR the modified BSD license.
 
- 	see: http://dojotoolkit.org/license for details
 
- */
 
- if(!dojo._hasResource['dojox.grid.Selection']){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 
- dojo._hasResource['dojox.grid.Selection'] = true;
 
- dojo.provide('dojox.grid.Selection');
 
- dojo.declare("dojox.grid.Selection", null, {
 
- 	// summary:
 
- 	//		Manages row selection for grid. Owned by grid and used internally
 
- 	//		for selection. Override to implement custom selection.
 
- 	constructor: function(inGrid){
 
- 		this.grid = inGrid;
 
- 		this.selected = [];
 
- 		this.setMode(inGrid.selectionMode);
 
- 	},
 
- 	mode: 'extended',
 
- 	selected: null,
 
- 	updating: 0,
 
- 	selectedIndex: -1,
 
- 	rangeStartIndex: -1,
 
- 	setMode: function(mode){
 
- 		if(this.selected.length){
 
- 			this.deselectAll();
 
- 		}
 
- 		if(mode != 'extended' && mode != 'multiple' && mode != 'single' && mode != 'none'){
 
- 			this.mode = 'extended';
 
- 		}else{
 
- 			this.mode = mode;
 
- 		}
 
- 	},
 
- 	onCanSelect: function(inIndex){
 
- 		return this.grid.onCanSelect(inIndex);
 
- 	},
 
- 	onCanDeselect: function(inIndex){
 
- 		return this.grid.onCanDeselect(inIndex);
 
- 	},
 
- 	onSelected: function(inIndex){
 
- 	},
 
- 	onDeselected: function(inIndex){
 
- 	},
 
- 	//onSetSelected: function(inIndex, inSelect) { };
 
- 	onChanging: function(){
 
- 	},
 
- 	onChanged: function(){
 
- 	},
 
- 	isSelected: function(inIndex){
 
- 		if(this.mode == 'none'){
 
- 			return false;
 
- 		}
 
- 		return this.selected[inIndex];
 
- 	},
 
- 	getFirstSelected: function(){
 
- 		if(!this.selected.length||this.mode == 'none'){ return -1; }
 
- 		for(var i=0, l=this.selected.length; i<l; i++){
 
- 			if(this.selected[i]){
 
- 				return i;
 
- 			}
 
- 		}
 
- 		return -1;
 
- 	},
 
- 	getNextSelected: function(inPrev){
 
- 		if(this.mode == 'none'){ return -1; }
 
- 		for(var i=inPrev+1, l=this.selected.length; i<l; i++){
 
- 			if(this.selected[i]){
 
- 				return i;
 
- 			}
 
- 		}
 
- 		return -1;
 
- 	},
 
- 	getSelected: function(){
 
- 		var result = [];
 
- 		for(var i=0, l=this.selected.length; i<l; i++){
 
- 			if(this.selected[i]){
 
- 				result.push(i);
 
- 			}
 
- 		}
 
- 		return result;
 
- 	},
 
- 	getSelectedCount: function(){
 
- 		var c = 0;
 
- 		for(var i=0; i<this.selected.length; i++){
 
- 			if(this.selected[i]){
 
- 				c++;
 
- 			}
 
- 		}
 
- 		return c;
 
- 	},
 
- 	_beginUpdate: function(){
 
- 		if(this.updating === 0){
 
- 			this.onChanging();
 
- 		}
 
- 		this.updating++;
 
- 	},
 
- 	_endUpdate: function(){
 
- 		this.updating--;
 
- 		if(this.updating === 0){
 
- 			this.onChanged();
 
- 		}
 
- 	},
 
- 	select: function(inIndex){
 
- 		if(this.mode == 'none'){ return; }
 
- 		if(this.mode != 'multiple'){
 
- 			this.deselectAll(inIndex);
 
- 			this.addToSelection(inIndex);
 
- 		}else{
 
- 			this.toggleSelect(inIndex);
 
- 		}
 
- 	},
 
- 	addToSelection: function(inIndex){
 
- 		if(this.mode == 'none'){ return; }
 
- 		if(dojo.isArray(inIndex)){
 
- 			dojo.forEach(inIndex, this.addToSelection, this);
 
- 			return;
 
- 		}
 
- 		inIndex = Number(inIndex);
 
- 		if(this.selected[inIndex]){
 
- 			this.selectedIndex = inIndex;
 
- 		}else{
 
- 			if(this.onCanSelect(inIndex) !== false){
 
- 				this.selectedIndex = inIndex;
 
- 				var rowNode = this.grid.getRowNode(inIndex);
 
- 				if(rowNode){
 
- 					dojo.attr(rowNode,"aria-selected","true");
 
- 				}
 
- 				this._beginUpdate();
 
- 				this.selected[inIndex] = true;
 
- 				//this.grid.onSelected(inIndex);
 
- 				this.onSelected(inIndex);
 
- 				//this.onSetSelected(inIndex, true);
 
- 				this._endUpdate();
 
- 			}
 
- 		}
 
- 	},
 
- 	deselect: function(inIndex){
 
- 		if(this.mode == 'none'){ return; }
 
- 		if(dojo.isArray(inIndex)){
 
- 			dojo.forEach(inIndex, this.deselect, this);
 
- 			return;
 
- 		}
 
- 		inIndex = Number(inIndex);
 
- 		if(this.selectedIndex == inIndex){
 
- 			this.selectedIndex = -1;
 
- 		}
 
- 		if(this.selected[inIndex]){
 
- 			if(this.onCanDeselect(inIndex) === false){
 
- 				return;
 
- 			}
 
- 			var rowNode = this.grid.getRowNode(inIndex);
 
- 			if(rowNode){
 
- 				dojo.attr(rowNode,"aria-selected","false");
 
- 			}
 
- 			this._beginUpdate();
 
- 			delete this.selected[inIndex];
 
- 			//this.grid.onDeselected(inIndex);
 
- 			this.onDeselected(inIndex);
 
- 			//this.onSetSelected(inIndex, false);
 
- 			this._endUpdate();
 
- 		}
 
- 	},
 
- 	setSelected: function(inIndex, inSelect){
 
- 		this[(inSelect ? 'addToSelection' : 'deselect')](inIndex);
 
- 	},
 
- 	toggleSelect: function(inIndex){
 
- 		if(dojo.isArray(inIndex)){
 
- 			dojo.forEach(inIndex, this.toggleSelect, this);
 
- 			return;
 
- 		}
 
- 		this.setSelected(inIndex, !this.selected[inIndex]);
 
- 	},
 
- 	_range: function(inFrom, inTo, func){
 
- 		var s = (inFrom >= 0 ? inFrom : inTo), e = inTo;
 
- 		if(s > e){
 
- 			e = s;
 
- 			s = inTo;
 
- 		}
 
- 		for(var i=s; i<=e; i++){
 
- 			func(i);
 
- 		}
 
- 	},
 
- 	selectRange: function(inFrom, inTo){
 
- 		this._range(inFrom, inTo, dojo.hitch(this, "addToSelection"));
 
- 	},
 
- 	deselectRange: function(inFrom, inTo){
 
- 		this._range(inFrom, inTo, dojo.hitch(this, "deselect"));
 
- 	},
 
- 	insert: function(inIndex){
 
- 		this.selected.splice(inIndex, 0, false);
 
- 		if(this.selectedIndex >= inIndex){
 
- 			this.selectedIndex++;
 
- 		}
 
- 	},
 
- 	remove: function(inIndex){
 
- 		this.selected.splice(inIndex, 1);
 
- 		if(this.selectedIndex >= inIndex){
 
- 			this.selectedIndex--;
 
- 		}
 
- 	},
 
- 	deselectAll: function(inExcept){
 
- 		for(var i in this.selected){
 
- 			if((i!=inExcept)&&(this.selected[i]===true)){
 
- 				this.deselect(i);
 
- 			}
 
- 		}
 
- 	},
 
- 	clickSelect: function(inIndex, inCtrlKey, inShiftKey){
 
- 		if(this.mode == 'none'){ return; }
 
- 		this._beginUpdate();
 
- 		if(this.mode != 'extended'){
 
- 			this.select(inIndex);
 
- 		}else{
 
- 			if(!inShiftKey || this.rangeStartIndex < 0){
 
- 				this.rangeStartIndex = inIndex;
 
- 			}
 
- 			if(!inCtrlKey){
 
- 				this.deselectAll(inIndex);
 
- 			}
 
- 			if(inShiftKey){
 
- 				this.selectRange(this.rangeStartIndex, inIndex);
 
- 			}else if(inCtrlKey){
 
- 				this.toggleSelect(inIndex);
 
- 			}else{
 
- 				this.addToSelection(inIndex);
 
- 			}
 
- 		}
 
- 		this._endUpdate();
 
- 	},
 
- 	clickSelectEvent: function(e){
 
- 		this.clickSelect(e.rowIndex, dojo.isCopyKey(e), e.shiftKey);
 
- 	},
 
- 	clear: function(){
 
- 		this._beginUpdate();
 
- 		this.deselectAll();
 
- 		this._endUpdate();
 
- 	}
 
- });
 
- }
 
 
  |