fix attribute
[roojs1] / examples / grid / edit-grid.js
index 24f302f..5858f01 100644 (file)
@@ -112,17 +112,67 @@ Roo.onReady(function(){
         enableColLock:false,
         multiSort : true,
         enableDragDrop : true,
-        dropTarget : Roo.factory({
-                  xtype: 'DropTarget',
-                  xns: Roo.dd,
+       
+    });
+    
+   
+
+    var layout = Roo.BorderLayout.create({
+        center: {
+            margins:{left:3,top:3,right:3,bottom:3},
+            panels: [new Roo.GridPanel(grid)]
+        }
+    }, 'grid-panel');
+
+
+    // render it
+    grid.render();
+
+    
+      grid.dropTarget = new Roo.dd.DropTarget(grid.view.el,  { 
                   listeners : {
                       drop : function (source, e, data)
                       {
-                           Roo.log("DROP");
+                           //Roo.log("DROP");
+                           var t = Roo.lib.Event.getTarget(e); 
+                           var ri = grid.view.findRowIndex(t);
+                           //Roo.log(e);
+                           //Roo.log(data);
+                            var dp = this.getDropPoint(e,data);
+                          // at this point should have above or below..
+                            var os = grid.selModel.getSelectedCell()
+                            grid.ds.remove(data.selections[0]);
+                            grid.ds.insert(ri + (dp == 'below' ? 1 : 0) , data.selections);
+                            grid.selModel.select(ri + (dp == 'below' ? 1 : 0), os[1])
+                            this.expandRow(false);
+                            
                              
                       },
                       over : function (source, e, data)
                       {
+                          //
+                          // if drag point == drop point...
+                           var t = Roo.lib.Event.getTarget(e); 
+                           var ri = grid.view.findRowIndex(t);
+                           var dp = this.getDropPoint(e,data);
+                           Roo.log(dp);
+                           //Roo.log(JSON.stringify({ dp: dp,  ri: ri, src_ri: data.rowIndex}));
+                           if(ri == data.rowIndex ||
+                                (dp == 'above' && ri-1 == data.rowIndex) ||
+                                (dp == 'below' && ri+1 == data.rowIndex) 
+                             ) {
+                               this.expandRow(false);
+                          
+                                this.valid = false;
+                                return;
+                           }
+                           this.expandRow(ri, dp);
+                           
+                         
+                          this.valid = 'ok-add'; 
+                          //Roo.log("SET VALID TO: " + this.valid)
+                          //Roo.log([source,e,data]);
+                          
                           // Roo.log("dragover");
                            
                           //Roo.log(e);
@@ -139,27 +189,70 @@ Roo.onReady(function(){
                           var s = _this.grid.getSelectionModel().getSelections();
                            */  
                           //if (!isFromGroup && isToGroup) {
-                          this.valid = 'ok-add';
+                          //this.valid = 'ok-add';
                           
                       }
                   },
-                  ddGroup : 'GridDD'
-
-                  
-              })
-    });
-
-    var layout = Roo.BorderLayout.create({
-        center: {
-            margins:{left:3,top:3,right:3,bottom:3},
-            panels: [new Roo.GridPanel(grid)]
-        }
-    }, 'grid-panel');
-
-
-    // render it
-    grid.render();
-
+                  ddGroup : 'GridDD',
+                  activeDom : false,
+                  expandRow : function(ri,pos)
+                  {
+                        var dom = grid.view.getRow(ri);
+                        //Roo.log(dom);
+                        //if (this.activeDom == dom) {
+                        //    return;
+                        //}
+                        if (this.activeDom) {
+                            Roo.get(this.activeDom).removeClass('x-grid-dd-above');
+                            Roo.get(this.activeDom).removeClass('x-grid-dd-below');
+                            
+                            this.activeDom = false;
+                        }
+                        
+                        if (ri === false) {
+                            return;
+                        }
+                        Roo.get(dom).addClass('x-grid-dd-' + pos);
+                         
+                        this.activeDom = dom;
+                    
+                    
+                  },
+                  getDropPoint : function(e, data)
+                    {
+                        //var tn = n.node;
+                       // data is from griddragzone
+                       
+                        var te = Roo.lib.Event.getTarget(e); 
+                        var ri =  Roo.fly(te).findParent("td", 6);
+                            
+                       
+                        var dragEl = ri;
+                        var t = Roo.lib.Dom.getY(dragEl),
+                            b = t + dragEl.offsetHeight;
+                        var y = Roo.lib.Event.getPageY(e);
+                        //var noAppend = tn.allowChildren === false || tn.isLeaf();
+                        
+                        // we may drop nodes anywhere, as long as allowChildren has not been set to false..
+                        
+                          
+                        var q = (b - t) / 2;
+                        
+                        
+                        if(y >= t && y < (t + q)){
+                            return "above";
+                        }
+                        if(y >= b-q && y <= b){
+                            return "below";
+                        }
+                        Roo.log( JSON.stringify( {pos: y, dragtop : t, mid : q, drabgot: b }));
+                        
+                        
+                        return false;
+                    },                  
+              });
+      
+    
     
     var gridHead = grid.getView().getHeaderPanel(true);
     var tb = new Roo.Toolbar(gridHead, [{