aboutsummaryrefslogtreecommitdiff
path: root/includes/js/dojox/grid/_grid/selection.js
diff options
context:
space:
mode:
Diffstat (limited to 'includes/js/dojox/grid/_grid/selection.js')
-rw-r--r--includes/js/dojox/grid/_grid/selection.js215
1 files changed, 215 insertions, 0 deletions
diff --git a/includes/js/dojox/grid/_grid/selection.js b/includes/js/dojox/grid/_grid/selection.js
new file mode 100644
index 0000000..75229c0
--- /dev/null
+++ b/includes/js/dojox/grid/_grid/selection.js
@@ -0,0 +1,215 @@
+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();
+ }
+
+});
+
+}