diff options
Diffstat (limited to '')
| -rw-r--r-- | js/dojo-1.6/dojox/grid/Selection.js | 271 |
1 files changed, 271 insertions, 0 deletions
diff --git a/js/dojo-1.6/dojox/grid/Selection.js b/js/dojo-1.6/dojox/grid/Selection.js new file mode 100644 index 0000000..c19e4f8 --- /dev/null +++ b/js/dojo-1.6/dojox/grid/Selection.js @@ -0,0 +1,271 @@ +/*
+ Copyright (c) 2004-2011, 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,
+
+ 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{
+ var lastSelected = this.selectedIndex;
+ if(!inCtrlKey){
+ this.deselectAll(inIndex);
+ }
+ if(inShiftKey){
+ this.selectRange(lastSelected, 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();
+ }
+});
+
+}
|
