216 lines
4.2 KiB
JavaScript
216 lines
4.2 KiB
JavaScript
|
if(!dojo._hasResource['dojox.grid._grid.selection']){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
|
||
|
dojo._hasResource['dojox.grid._grid.selection'] = true;
|
||
|
dojo.provide('dojox.grid._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 = [];
|
||
|
},
|
||
|
|
||
|
multiSelect: true,
|
||
|
selected: null,
|
||
|
updating: 0,
|
||
|
selectedIndex: -1,
|
||
|
|
||
|
onCanSelect: function(inIndex){
|
||
|
return this.grid.onCanSelect(inIndex);
|
||
|
},
|
||
|
|
||
|
onCanDeselect: function(inIndex){
|
||
|
return this.grid.onCanDeselect(inIndex);
|
||
|
},
|
||
|
|
||
|
onSelected: function(inIndex){
|
||
|
return this.grid.onSelected(inIndex);
|
||
|
},
|
||
|
|
||
|
onDeselected: function(inIndex){
|
||
|
return this.grid.onDeselected(inIndex);
|
||
|
},
|
||
|
|
||
|
//onSetSelected: function(inIndex, inSelect) { };
|
||
|
onChanging: function(){
|
||
|
},
|
||
|
|
||
|
onChanged: function(){
|
||
|
return this.grid.onSelectionChanged();
|
||
|
},
|
||
|
|
||
|
isSelected: function(inIndex){
|
||
|
return this.selected[inIndex];
|
||
|
},
|
||
|
|
||
|
getFirstSelected: function(){
|
||
|
for(var i=0, l=this.selected.length; i<l; i++){
|
||
|
if(this.selected[i]){
|
||
|
return i;
|
||
|
}
|
||
|
}
|
||
|
return -1;
|
||
|
},
|
||
|
|
||
|
getNextSelected: function(inPrev){
|
||
|
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){
|
||
|
this.unselectAll(inIndex);
|
||
|
this.addToSelection(inIndex);
|
||
|
},
|
||
|
|
||
|
addToSelection: function(inIndex){
|
||
|
inIndex = Number(inIndex);
|
||
|
if(this.selected[inIndex]){
|
||
|
this.selectedIndex = inIndex;
|
||
|
}else{
|
||
|
if(this.onCanSelect(inIndex) !== false){
|
||
|
this.selectedIndex = inIndex;
|
||
|
this.beginUpdate();
|
||
|
this.selected[inIndex] = true;
|
||
|
this.grid.onSelected(inIndex);
|
||
|
//this.onSelected(inIndex);
|
||
|
//this.onSetSelected(inIndex, true);
|
||
|
this.endUpdate();
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
deselect: function(inIndex){
|
||
|
inIndex = Number(inIndex);
|
||
|
if(this.selectedIndex == inIndex){
|
||
|
this.selectedIndex = -1;
|
||
|
}
|
||
|
if(this.selected[inIndex]){
|
||
|
if(this.onCanDeselect(inIndex) === false){
|
||
|
return;
|
||
|
}
|
||
|
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){
|
||
|
this.setSelected(inIndex, !this.selected[inIndex])
|
||
|
},
|
||
|
|
||
|
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--;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
unselectAll: function(inExcept){
|
||
|
for(var i in this.selected){
|
||
|
if((i!=inExcept)&&(this.selected[i]===true)){
|
||
|
this.deselect(i);
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
shiftSelect: function(inFrom, inTo){
|
||
|
var s = (inFrom >= 0 ? inFrom : inTo), e = inTo;
|
||
|
if(s > e){
|
||
|
e = s;
|
||
|
s = inTo;
|
||
|
}
|
||
|
for(var i=s; i<=e; i++){
|
||
|
this.addToSelection(i);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
clickSelect: function(inIndex, inCtrlKey, inShiftKey){
|
||
|
this.beginUpdate();
|
||
|
if(!this.multiSelect){
|
||
|
this.select(inIndex);
|
||
|
}else{
|
||
|
var lastSelected = this.selectedIndex;
|
||
|
if(!inCtrlKey){
|
||
|
this.unselectAll(inIndex);
|
||
|
}
|
||
|
if(inShiftKey){
|
||
|
this.shiftSelect(lastSelected, inIndex);
|
||
|
}else if(inCtrlKey){
|
||
|
this.toggleSelect(inIndex);
|
||
|
}else{
|
||
|
this.addToSelection(inIndex)
|
||
|
}
|
||
|
}
|
||
|
this.endUpdate();
|
||
|
},
|
||
|
|
||
|
clickSelectEvent: function(e){
|
||
|
this.clickSelect(e.rowIndex, e.ctrlKey, e.shiftKey);
|
||
|
},
|
||
|
|
||
|
clear: function(){
|
||
|
this.beginUpdate();
|
||
|
this.unselectAll();
|
||
|
this.endUpdate();
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
}
|