Upgrade to ExtJS 3.0.0 - Released 07/06/2009
[extjs.git] / src / widgets / tree / TreeDragZone.js
diff --git a/src/widgets/tree/TreeDragZone.js b/src/widgets/tree/TreeDragZone.js
new file mode 100644 (file)
index 0000000..31ac177
--- /dev/null
@@ -0,0 +1,82 @@
+/*!
+ * Ext JS Library 3.0.0
+ * Copyright(c) 2006-2009 Ext JS, LLC
+ * licensing@extjs.com
+ * http://www.extjs.com/license
+ */
+/**\r
+ * @class Ext.tree.TreeDragZone\r
+ * @extends Ext.dd.DragZone\r
+ * @constructor\r
+ * @param {String/HTMLElement/Element} tree The {@link Ext.tree.TreePanel} for which to enable dragging\r
+ * @param {Object} config\r
+ */\r
+if(Ext.dd.DragZone){\r
+Ext.tree.TreeDragZone = function(tree, config){\r
+    Ext.tree.TreeDragZone.superclass.constructor.call(this, tree.innerCt, config);\r
+    /**\r
+    * The TreePanel for this drag zone\r
+    * @type Ext.tree.TreePanel\r
+    * @property\r
+    */\r
+    this.tree = tree;\r
+};\r
+\r
+Ext.extend(Ext.tree.TreeDragZone, Ext.dd.DragZone, {\r
+    /**\r
+     * @cfg {String} ddGroup\r
+     * A named drag drop group to which this object belongs.  If a group is specified, then this object will only\r
+     * interact with other drag drop objects in the same group (defaults to 'TreeDD').\r
+     */\r
+    ddGroup : "TreeDD",\r
+\r
+    // private\r
+    onBeforeDrag : function(data, e){\r
+        var n = data.node;\r
+        return n && n.draggable && !n.disabled;\r
+    },\r
+\r
+    // private\r
+    onInitDrag : function(e){\r
+        var data = this.dragData;\r
+        this.tree.getSelectionModel().select(data.node);\r
+        this.tree.eventModel.disable();\r
+        this.proxy.update("");\r
+        data.node.ui.appendDDGhost(this.proxy.ghost.dom);\r
+        this.tree.fireEvent("startdrag", this.tree, data.node, e);\r
+    },\r
+\r
+    // private\r
+    getRepairXY : function(e, data){\r
+        return data.node.ui.getDDRepairXY();\r
+    },\r
+\r
+    // private\r
+    onEndDrag : function(data, e){\r
+        this.tree.eventModel.enable.defer(100, this.tree.eventModel);\r
+        this.tree.fireEvent("enddrag", this.tree, data.node, e);\r
+    },\r
+\r
+    // private\r
+    onValidDrop : function(dd, e, id){\r
+        this.tree.fireEvent("dragdrop", this.tree, this.dragData.node, dd, e);\r
+        this.hideProxy();\r
+    },\r
+\r
+    // private\r
+    beforeInvalidDrop : function(e, id){\r
+        // this scrolls the original position back into view\r
+        var sm = this.tree.getSelectionModel();\r
+        sm.clearSelections();\r
+        sm.select(this.dragData.node);\r
+    },\r
+    \r
+    // private\r
+    afterRepair : function(){\r
+        if (Ext.enableFx && this.tree.hlDrop) {\r
+            Ext.Element.fly(this.dragData.ddel).highlight(this.hlColor || "c3daf9");\r
+        }\r
+        this.dragging = false;\r
+    }\r
+});\r
+}
\ No newline at end of file