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