1 /**
  2  * All this class does is switch the rowmousedown listener for a custom doRowmousedown,
  3  * which only gets fired under certain conditions.
  4  * @author Andrew
  5  */
  6 Ext.ux.CheckboxSelectionModel = Ext.extend(Ext.grid.CheckboxSelectionModel, {
  7     initEvents : function() {
  8         if(!this.grid.enableDragDrop && !this.grid.enableDrag){
  9             // this.grid.on("rowmousedown", this.handleMouseDown, this);
 10             this.grid.on("doRowmousedown", this.handleMouseDown, this);
 11         }else{ // allow click to work like normal
 12             this.grid.on("rowclick", function(grid, rowIndex, e) {
 13                 if(e.button === 0 && !e.shiftKey && !e.ctrlKey) {
 14                     this.selectRow(rowIndex, false);
 15                     grid.view.focusRow(rowIndex);
 16                 }
 17             }, this);
 18         }
 19 
 20         this.rowNav = new Ext.KeyNav(this.grid.getGridEl(), {
 21             "up" : function(e){
 22                 if(!e.shiftKey){
 23                     this.selectPrevious(e.shiftKey);
 24                 }else if(this.last !== false && this.lastActive !== false){
 25                     var last = this.last;
 26                     this.selectRange(this.last,  this.lastActive-1);
 27                     this.grid.getView().focusRow(this.lastActive);
 28                     if(last !== false){
 29                         this.last = last;
 30                     }
 31                 }else{
 32                     this.selectFirstRow();
 33                 }
 34             },
 35             "down" : function(e){
 36                 if(!e.shiftKey){
 37                     this.selectNext(e.shiftKey);
 38                 }else if(this.last !== false && this.lastActive !== false){
 39                     var last = this.last;
 40                     this.selectRange(this.last,  this.lastActive+1);
 41                     this.grid.getView().focusRow(this.lastActive);
 42                     if(last !== false){
 43                         this.last = last;
 44                     }
 45                 }else{
 46                     this.selectFirstRow();
 47                 }
 48             },
 49             scope: this
 50         });
 51 
 52         var view = this.grid.view;
 53         view.on("refresh", this.onRefresh, this);
 54         view.on("rowupdated", this.onRowUpdated, this);
 55         view.on("rowremoved", this.onRemove, this);
 56         
 57         this.grid.on('render', function(){
 58             var view = this.grid.getView();
 59             view.mainBody.on('mousedown', this.onMouseDown, this);
 60             Ext.fly(view.innerHd).on('mousedown', this.onHdMouseDown, this);
 61 
 62         }, this);
 63     }
 64 });