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 });