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);
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, [{