--- /dev/null
+<html>\r
+<head>\r
+ <title>The source code</title>\r
+ <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />\r
+ <script type="text/javascript" src="../resources/prettify/prettify.js"></script>\r
+</head>\r
+<body onload="prettyPrint();">\r
+ <pre class="prettyprint lang-js">// private\r
+// This is a support class used internally by the Grid components\r
+Ext.grid.HeaderDragZone = function(grid, hd, hd2){\r
+ this.grid = grid;\r
+ this.view = grid.getView();\r
+ this.ddGroup = "gridHeader" + this.grid.getGridEl().id;\r
+ Ext.grid.HeaderDragZone.superclass.constructor.call(this, hd);\r
+ if(hd2){\r
+ this.setHandleElId(Ext.id(hd));\r
+ this.setOuterHandleElId(Ext.id(hd2));\r
+ }\r
+ this.scroll = false;\r
+};\r
+Ext.extend(Ext.grid.HeaderDragZone, Ext.dd.DragZone, {\r
+ maxDragWidth: 120,\r
+ getDragData : function(e){\r
+ var t = Ext.lib.Event.getTarget(e);\r
+ var h = this.view.findHeaderCell(t);\r
+ if(h){\r
+ return {ddel: h.firstChild, header:h};\r
+ }\r
+ return false;\r
+ },\r
+\r
+ onInitDrag : function(e){\r
+ this.view.headersDisabled = true;\r
+ var clone = this.dragData.ddel.cloneNode(true);\r
+ clone.id = Ext.id();\r
+ clone.style.width = Math.min(this.dragData.header.offsetWidth,this.maxDragWidth) + "px";\r
+ this.proxy.update(clone);\r
+ return true;\r
+ },\r
+\r
+ afterValidDrop : function(){\r
+ var v = this.view;\r
+ setTimeout(function(){\r
+ v.headersDisabled = false;\r
+ }, 50);\r
+ },\r
+\r
+ afterInvalidDrop : function(){\r
+ var v = this.view;\r
+ setTimeout(function(){\r
+ v.headersDisabled = false;\r
+ }, 50);\r
+ }\r
+});\r
+\r
+// private\r
+// This is a support class used internally by the Grid components\r
+Ext.grid.HeaderDropZone = function(grid, hd, hd2){\r
+ this.grid = grid;\r
+ this.view = grid.getView();\r
+ // split the proxies so they don't interfere with mouse events\r
+ this.proxyTop = Ext.DomHelper.append(document.body, {\r
+ cls:"col-move-top", html:" "\r
+ }, true);\r
+ this.proxyBottom = Ext.DomHelper.append(document.body, {\r
+ cls:"col-move-bottom", html:" "\r
+ }, true);\r
+ this.proxyTop.hide = this.proxyBottom.hide = function(){\r
+ this.setLeftTop(-100,-100);\r
+ this.setStyle("visibility", "hidden");\r
+ };\r
+ this.ddGroup = "gridHeader" + this.grid.getGridEl().id;\r
+ // temporarily disabled\r
+ //Ext.dd.ScrollManager.register(this.view.scroller.dom);\r
+ Ext.grid.HeaderDropZone.superclass.constructor.call(this, grid.getGridEl().dom);\r
+};\r
+Ext.extend(Ext.grid.HeaderDropZone, Ext.dd.DropZone, {\r
+ proxyOffsets : [-4, -9],\r
+ fly: Ext.Element.fly,\r
+\r
+ getTargetFromEvent : function(e){\r
+ var t = Ext.lib.Event.getTarget(e);\r
+ var cindex = this.view.findCellIndex(t);\r
+ if(cindex !== false){\r
+ return this.view.getHeaderCell(cindex);\r
+ }\r
+ },\r
+\r
+ nextVisible : function(h){\r
+ var v = this.view, cm = this.grid.colModel;\r
+ h = h.nextSibling;\r
+ while(h){\r
+ if(!cm.isHidden(v.getCellIndex(h))){\r
+ return h;\r
+ }\r
+ h = h.nextSibling;\r
+ }\r
+ return null;\r
+ },\r
+\r
+ prevVisible : function(h){\r
+ var v = this.view, cm = this.grid.colModel;\r
+ h = h.prevSibling;\r
+ while(h){\r
+ if(!cm.isHidden(v.getCellIndex(h))){\r
+ return h;\r
+ }\r
+ h = h.prevSibling;\r
+ }\r
+ return null;\r
+ },\r
+\r
+ positionIndicator : function(h, n, e){\r
+ var x = Ext.lib.Event.getPageX(e);\r
+ var r = Ext.lib.Dom.getRegion(n.firstChild);\r
+ var px, pt, py = r.top + this.proxyOffsets[1];\r
+ if((r.right - x) <= (r.right-r.left)/2){\r
+ px = r.right+this.view.borderWidth;\r
+ pt = "after";\r
+ }else{\r
+ px = r.left;\r
+ pt = "before";\r
+ }\r
+\r
+ if(this.grid.colModel.isFixed(this.view.getCellIndex(n))){\r
+ return false;\r
+ }\r
+\r
+ px += this.proxyOffsets[0];\r
+ this.proxyTop.setLeftTop(px, py);\r
+ this.proxyTop.show();\r
+ if(!this.bottomOffset){\r
+ this.bottomOffset = this.view.mainHd.getHeight();\r
+ }\r
+ this.proxyBottom.setLeftTop(px, py+this.proxyTop.dom.offsetHeight+this.bottomOffset);\r
+ this.proxyBottom.show();\r
+ return pt;\r
+ },\r
+\r
+ onNodeEnter : function(n, dd, e, data){\r
+ if(data.header != n){\r
+ this.positionIndicator(data.header, n, e);\r
+ }\r
+ },\r
+\r
+ onNodeOver : function(n, dd, e, data){\r
+ var result = false;\r
+ if(data.header != n){\r
+ result = this.positionIndicator(data.header, n, e);\r
+ }\r
+ if(!result){\r
+ this.proxyTop.hide();\r
+ this.proxyBottom.hide();\r
+ }\r
+ return result ? this.dropAllowed : this.dropNotAllowed;\r
+ },\r
+\r
+ onNodeOut : function(n, dd, e, data){\r
+ this.proxyTop.hide();\r
+ this.proxyBottom.hide();\r
+ },\r
+\r
+ onNodeDrop : function(n, dd, e, data){\r
+ var h = data.header;\r
+ if(h != n){\r
+ var cm = this.grid.colModel;\r
+ var x = Ext.lib.Event.getPageX(e);\r
+ var r = Ext.lib.Dom.getRegion(n.firstChild);\r
+ var pt = (r.right - x) <= ((r.right-r.left)/2) ? "after" : "before";\r
+ var oldIndex = this.view.getCellIndex(h);\r
+ var newIndex = this.view.getCellIndex(n);\r
+ if(pt == "after"){\r
+ newIndex++;\r
+ }\r
+ if(oldIndex < newIndex){\r
+ newIndex--;\r
+ }\r
+ cm.moveColumn(oldIndex, newIndex);\r
+ this.grid.fireEvent("columnmove", oldIndex, newIndex);\r
+ return true;\r
+ }\r
+ return false;\r
+ }\r
+});\r
+\r
+\r
+Ext.grid.GridView.ColumnDragZone = function(grid, hd){\r
+ Ext.grid.GridView.ColumnDragZone.superclass.constructor.call(this, grid, hd, null);\r
+ this.proxy.el.addClass('x-grid3-col-dd');\r
+};\r
+\r
+Ext.extend(Ext.grid.GridView.ColumnDragZone, Ext.grid.HeaderDragZone, {\r
+ handleMouseDown : function(e){\r
+\r
+ },\r
+\r
+ callHandleMouseDown : function(e){\r
+ Ext.grid.GridView.ColumnDragZone.superclass.handleMouseDown.call(this, e);\r
+ }\r
+});</pre> \r
+</body>\r
+</html>
\ No newline at end of file