Upgrade to ExtJS 3.0.3 - Released 10/11/2009
[extjs.git] / src / widgets / tree / TreeDragZone.js
1 /*!
2  * Ext JS Library 3.0.3
3  * Copyright(c) 2006-2009 Ext JS, LLC
4  * licensing@extjs.com
5  * http://www.extjs.com/license
6  */
7 /**\r
8  * @class Ext.tree.TreeDragZone\r
9  * @extends Ext.dd.DragZone\r
10  * @constructor\r
11  * @param {String/HTMLElement/Element} tree The {@link Ext.tree.TreePanel} for which to enable dragging\r
12  * @param {Object} config\r
13  */\r
14 if(Ext.dd.DragZone){\r
15 Ext.tree.TreeDragZone = function(tree, config){\r
16     Ext.tree.TreeDragZone.superclass.constructor.call(this, tree.innerCt, config);\r
17     /**\r
18     * The TreePanel for this drag zone\r
19     * @type Ext.tree.TreePanel\r
20     * @property\r
21     */\r
22     this.tree = tree;\r
23 };\r
24 \r
25 Ext.extend(Ext.tree.TreeDragZone, Ext.dd.DragZone, {\r
26     /**\r
27      * @cfg {String} ddGroup\r
28      * A named drag drop group to which this object belongs.  If a group is specified, then this object will only\r
29      * interact with other drag drop objects in the same group (defaults to 'TreeDD').\r
30      */\r
31     ddGroup : "TreeDD",\r
32 \r
33     // private\r
34     onBeforeDrag : function(data, e){\r
35         var n = data.node;\r
36         return n && n.draggable && !n.disabled;\r
37     },\r
38 \r
39     // private\r
40     onInitDrag : function(e){\r
41         var data = this.dragData;\r
42         this.tree.getSelectionModel().select(data.node);\r
43         this.tree.eventModel.disable();\r
44         this.proxy.update("");\r
45         data.node.ui.appendDDGhost(this.proxy.ghost.dom);\r
46         this.tree.fireEvent("startdrag", this.tree, data.node, e);\r
47     },\r
48 \r
49     // private\r
50     getRepairXY : function(e, data){\r
51         return data.node.ui.getDDRepairXY();\r
52     },\r
53 \r
54     // private\r
55     onEndDrag : function(data, e){\r
56         this.tree.eventModel.enable.defer(100, this.tree.eventModel);\r
57         this.tree.fireEvent("enddrag", this.tree, data.node, e);\r
58     },\r
59 \r
60     // private\r
61     onValidDrop : function(dd, e, id){\r
62         this.tree.fireEvent("dragdrop", this.tree, this.dragData.node, dd, e);\r
63         this.hideProxy();\r
64     },\r
65 \r
66     // private\r
67     beforeInvalidDrop : function(e, id){\r
68         // this scrolls the original position back into view\r
69         var sm = this.tree.getSelectionModel();\r
70         sm.clearSelections();\r
71         sm.select(this.dragData.node);\r
72     },\r
73     \r
74     // private\r
75     afterRepair : function(){\r
76         if (Ext.enableFx && this.tree.hlDrop) {\r
77             Ext.Element.fly(this.dragData.ddel).highlight(this.hlColor || "c3daf9");\r
78         }\r
79         this.dragging = false;\r
80     }\r
81 });\r
82 }