roojs-core.js
[roojs1] / Roo / grid / CellSelectionModel.js
index 0205a7e..95364f8 100644 (file)
@@ -55,7 +55,15 @@ Roo.grid.CellSelectionModel = function(config){
             * You can use this to trigger add new row.
             * @param {SelectionModel} this
             */
-           "tabend" : true
+           "tabend" : true,
+         /**
+            * @event beforeeditnext
+            * Fires before the next editable sell is made active
+            * You can use this to skip to another cell or fire the tabend
+            *    if you set cell to false
+            * @param {Object} eventdata object : { cell : [ row, col ] } 
+            */
+           "beforeeditnext" : true
     });
     Roo.grid.CellSelectionModel.superclass.constructor.call(this);
 };
@@ -189,7 +197,7 @@ Roo.extend(Roo.grid.CellSelectionModel, Roo.grid.AbstractSelectionModel,  {
             return g.walkCells(row, col, step, sm.isSelectable,  sm);
         };
         var k = e.getKey(), r = s.cell[0], c = s.cell[1];
-        var newCell, forward=false;
+        var newCell;
 
       
 
@@ -203,13 +211,11 @@ Roo.extend(Roo.grid.CellSelectionModel, Roo.grid.AbstractSelectionModel,  {
                     newCell = walk(r, c-1, -1);
                 } else {
                     newCell = walk(r, c+1, 1);
-                    forward = true;
                 }
                 break;
             
             case e.DOWN:
                newCell = walk(r+1, c, 1);
-                forward = true;
                 break;
             
             case e.UP:
@@ -218,7 +224,6 @@ Roo.extend(Roo.grid.CellSelectionModel, Roo.grid.AbstractSelectionModel,  {
             
             case e.RIGHT:
                 newCell = walk(r, c+1, 1);
-                forward = true;
                 break;
             
             case e.LEFT:
@@ -280,21 +285,28 @@ Roo.extend(Roo.grid.CellSelectionModel, Roo.grid.AbstractSelectionModel,  {
             
             e.stopEvent();
             
-        }else if(k == e.ENTER &&  !e.ctrlKey){
+        } else if(k == e.ENTER &&  !e.ctrlKey){
             ed.completeEdit();
             e.stopEvent();
             newCell = g.walkCells(ed.row, ed.col+1, 1, this.acceptsNav, this);
-        }else if(k == e.ESC){
+        
+               } else if(k == e.ESC){
             ed.cancelEdit();
         }
-        
-        
+               
+        if (newCell) {
+            var ecall = { cell : newCell, forward : forward };
+            this.fireEvent('beforeeditnext', ecall );
+            newCell = ecall.cell;
+                       forward = ecall.forward;
+        }
+               
         if(newCell){
             //Roo.log('next cell after edit');
             g.startEditing.defer(100, g, [newCell[0], newCell[1]]);
         } else if (forward) {
             // tabbed past last
-            this.fireEvent('tabend',this);
+            this.fireEvent.defer(100, this, ['tabend',this]);
         }
     }
 });
\ No newline at end of file