ColumnDD.js
上传用户:dawnssy
上传日期:2022-08-06
资源大小:9345k
文件大小:6k
源码类别:

JavaScript

开发平台:

JavaScript

  1. /*!  * Ext JS Library 3.1.0  * Copyright(c) 2006-2009 Ext JS, LLC  * licensing@extjs.com  * http://www.extjs.com/license  */ // private
  2. // This is a support class used internally by the Grid components
  3. Ext.grid.HeaderDragZone = Ext.extend(Ext.dd.DragZone, {
  4.     maxDragWidth: 120,
  5.     
  6.     constructor : function(grid, hd, hd2){
  7.         this.grid = grid;
  8.         this.view = grid.getView();
  9.         this.ddGroup = "gridHeader" + this.grid.getGridEl().id;
  10.         Ext.grid.HeaderDragZone.superclass.constructor.call(this, hd);
  11.         if(hd2){
  12.             this.setHandleElId(Ext.id(hd));
  13.             this.setOuterHandleElId(Ext.id(hd2));
  14.         }
  15.         this.scroll = false;
  16.     },
  17.     
  18.     getDragData : function(e){
  19.         var t = Ext.lib.Event.getTarget(e);
  20.         var h = this.view.findHeaderCell(t);
  21.         if(h){
  22.             return {ddel: h.firstChild, header:h};
  23.         }
  24.         return false;
  25.     },
  26.     onInitDrag : function(e){
  27.         this.view.headersDisabled = true;
  28.         var clone = this.dragData.ddel.cloneNode(true);
  29.         clone.id = Ext.id();
  30.         clone.style.width = Math.min(this.dragData.header.offsetWidth,this.maxDragWidth) + "px";
  31.         this.proxy.update(clone);
  32.         return true;
  33.     },
  34.     afterValidDrop : function(){
  35.         var v = this.view;
  36.         setTimeout(function(){
  37.             v.headersDisabled = false;
  38.         }, 50);
  39.     },
  40.     afterInvalidDrop : function(){
  41.         var v = this.view;
  42.         setTimeout(function(){
  43.             v.headersDisabled = false;
  44.         }, 50);
  45.     }
  46. });
  47. // private
  48. // This is a support class used internally by the Grid components
  49. Ext.grid.HeaderDropZone = Ext.extend(Ext.dd.DropZone, {
  50.     proxyOffsets : [-4, -9],
  51.     fly: Ext.Element.fly,
  52.     
  53.     constructor : function(grid, hd, hd2){
  54.         this.grid = grid;
  55.         this.view = grid.getView();
  56.         // split the proxies so they don't interfere with mouse events
  57.         this.proxyTop = Ext.DomHelper.append(document.body, {
  58.             cls:"col-move-top", html:" "
  59.         }, true);
  60.         this.proxyBottom = Ext.DomHelper.append(document.body, {
  61.             cls:"col-move-bottom", html:" "
  62.         }, true);
  63.         this.proxyTop.hide = this.proxyBottom.hide = function(){
  64.             this.setLeftTop(-100,-100);
  65.             this.setStyle("visibility", "hidden");
  66.         };
  67.         this.ddGroup = "gridHeader" + this.grid.getGridEl().id;
  68.         // temporarily disabled
  69.         //Ext.dd.ScrollManager.register(this.view.scroller.dom);
  70.         Ext.grid.HeaderDropZone.superclass.constructor.call(this, grid.getGridEl().dom);
  71.     },
  72.     getTargetFromEvent : function(e){
  73.         var t = Ext.lib.Event.getTarget(e);
  74.         var cindex = this.view.findCellIndex(t);
  75.         if(cindex !== false){
  76.             return this.view.getHeaderCell(cindex);
  77.         }
  78.     },
  79.     nextVisible : function(h){
  80.         var v = this.view, cm = this.grid.colModel;
  81.         h = h.nextSibling;
  82.         while(h){
  83.             if(!cm.isHidden(v.getCellIndex(h))){
  84.                 return h;
  85.             }
  86.             h = h.nextSibling;
  87.         }
  88.         return null;
  89.     },
  90.     prevVisible : function(h){
  91.         var v = this.view, cm = this.grid.colModel;
  92.         h = h.prevSibling;
  93.         while(h){
  94.             if(!cm.isHidden(v.getCellIndex(h))){
  95.                 return h;
  96.             }
  97.             h = h.prevSibling;
  98.         }
  99.         return null;
  100.     },
  101.     positionIndicator : function(h, n, e){
  102.         var x = Ext.lib.Event.getPageX(e);
  103.         var r = Ext.lib.Dom.getRegion(n.firstChild);
  104.         var px, pt, py = r.top + this.proxyOffsets[1];
  105.         if((r.right - x) <= (r.right-r.left)/2){
  106.             px = r.right+this.view.borderWidth;
  107.             pt = "after";
  108.         }else{
  109.             px = r.left;
  110.             pt = "before";
  111.         }
  112.         if(this.grid.colModel.isFixed(this.view.getCellIndex(n))){
  113.             return false;
  114.         }
  115.         px +=  this.proxyOffsets[0];
  116.         this.proxyTop.setLeftTop(px, py);
  117.         this.proxyTop.show();
  118.         if(!this.bottomOffset){
  119.             this.bottomOffset = this.view.mainHd.getHeight();
  120.         }
  121.         this.proxyBottom.setLeftTop(px, py+this.proxyTop.dom.offsetHeight+this.bottomOffset);
  122.         this.proxyBottom.show();
  123.         return pt;
  124.     },
  125.     onNodeEnter : function(n, dd, e, data){
  126.         if(data.header != n){
  127.             this.positionIndicator(data.header, n, e);
  128.         }
  129.     },
  130.     onNodeOver : function(n, dd, e, data){
  131.         var result = false;
  132.         if(data.header != n){
  133.             result = this.positionIndicator(data.header, n, e);
  134.         }
  135.         if(!result){
  136.             this.proxyTop.hide();
  137.             this.proxyBottom.hide();
  138.         }
  139.         return result ? this.dropAllowed : this.dropNotAllowed;
  140.     },
  141.     onNodeOut : function(n, dd, e, data){
  142.         this.proxyTop.hide();
  143.         this.proxyBottom.hide();
  144.     },
  145.     onNodeDrop : function(n, dd, e, data){
  146.         var h = data.header;
  147.         if(h != n){
  148.             var cm = this.grid.colModel;
  149.             var x = Ext.lib.Event.getPageX(e);
  150.             var r = Ext.lib.Dom.getRegion(n.firstChild);
  151.             var pt = (r.right - x) <= ((r.right-r.left)/2) ? "after" : "before";
  152.             var oldIndex = this.view.getCellIndex(h);
  153.             var newIndex = this.view.getCellIndex(n);
  154.             if(pt == "after"){
  155.                 newIndex++;
  156.             }
  157.             if(oldIndex < newIndex){
  158.                 newIndex--;
  159.             }
  160.             cm.moveColumn(oldIndex, newIndex);
  161.             return true;
  162.         }
  163.         return false;
  164.     }
  165. });
  166. Ext.grid.GridView.ColumnDragZone = Ext.extend(Ext.grid.HeaderDragZone, {
  167.     
  168.     constructor : function(grid, hd){
  169.         Ext.grid.GridView.ColumnDragZone.superclass.constructor.call(this, grid, hd, null);
  170.         this.proxy.el.addClass('x-grid3-col-dd');
  171.     },
  172.     
  173.     handleMouseDown : function(e){
  174.     },
  175.     callHandleMouseDown : function(e){
  176.         Ext.grid.GridView.ColumnDragZone.superclass.handleMouseDown.call(this, e);
  177.     }
  178. });