Upgrade to ExtJS 4.0.1 - Released 05/18/2011
[extjs.git] / docs / source / TreeViewDragDrop.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5   <title>The source code</title>
6   <link href="../prettify/prettify.css" type="text/css" rel="stylesheet" />
7   <script type="text/javascript" src="../prettify/prettify.js"></script>
8   <style type="text/css">
9     .highlight { display: block; background-color: #ddd; }
10   </style>
11   <script type="text/javascript">
12     function highlight() {
13       document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
14     }
15   </script>
16 </head>
17 <body onload="prettyPrint(); highlight();">
18   <pre class="prettyprint lang-js"><span id='Ext-tree-ViewDDPlugin'>/**
19 </span> * @class Ext.tree.ViewDDPlugin
20  * @extends Ext.AbstractPlugin
21  * &lt;p&gt;This plugin provides drag and/or drop functionality for a TreeView.&lt;/p&gt;
22  * &lt;p&gt;It creates a specialized instance of {@link Ext.dd.DragZone DragZone} which knows how to drag out of a {@link Ext.tree.View TreeView}
23  * and loads the data object which is passed to a cooperating {@link Ext.dd.DragZone DragZone}'s methods with the following properties:&lt;ul&gt;
24  * &lt;li&gt;copy : Boolean
25  *  &lt;div class=&quot;sub-desc&quot;&gt;The value of the TreeView's &lt;code&gt;copy&lt;/code&gt; property, or &lt;code&gt;true&lt;/code&gt; if the TreeView was configured
26  *  with &lt;code&gt;allowCopy: true&lt;/code&gt; &lt;u&gt;and&lt;/u&gt; the control key was pressed when the drag operation was begun.&lt;/div&gt;&lt;/li&gt;
27  * &lt;li&gt;view : TreeView
28  *  &lt;div class=&quot;sub-desc&quot;&gt;The source TreeView from which the drag originated.&lt;/div&gt;&lt;/li&gt;
29  * &lt;li&gt;ddel : HtmlElement
30  *  &lt;div class=&quot;sub-desc&quot;&gt;The drag proxy element which moves with the mouse&lt;/div&gt;&lt;/li&gt;
31  * &lt;li&gt;item : HtmlElement
32  *  &lt;div class=&quot;sub-desc&quot;&gt;The TreeView node upon which the mousedown event was registered.&lt;/div&gt;&lt;/li&gt;
33  * &lt;li&gt;records : Array
34  *  &lt;div class=&quot;sub-desc&quot;&gt;An Array of {@link Ext.data.Model Model}s representing the selected data being dragged from the source TreeView.&lt;/div&gt;&lt;/li&gt;
35  * &lt;/ul&gt;&lt;/p&gt;
36  * &lt;p&gt;It also creates a specialized instance of {@link Ext.dd.DropZone} which cooperates with other DropZones which are members of the same
37  * ddGroup which processes such data objects.&lt;/p&gt;
38  * &lt;p&gt;Adding this plugin to a view means that two new events may be fired from the client TreeView, &lt;code&gt;{@link #event-beforedrop beforedrop}&lt;/code&gt; and
39  * &lt;code&gt;{@link #event-drop drop}&lt;/code&gt;&lt;/p&gt;
40  */
41 Ext.define('Ext.tree.plugin.TreeViewDragDrop', {
42     extend: 'Ext.AbstractPlugin',
43     alias: 'plugin.treeviewdragdrop',
44
45     uses: [
46         'Ext.tree.ViewDragZone',
47         'Ext.tree.ViewDropZone'
48     ],
49
50 <span id='Ext-tree-ViewDDPlugin-event-beforedrop'>    /**
51 </span>     * @event beforedrop
52      * &lt;p&gt;&lt;b&gt;This event is fired through the TreeView. Add listeners to the TreeView object&lt;/b&gt;&lt;/p&gt;
53      * &lt;p&gt;Fired when a drop gesture has been triggered by a mouseup event in a valid drop position in the TreeView.
54      * @param {HtmlElement} node The TreeView node &lt;b&gt;if any&lt;/b&gt; over which the mouse was positioned.&lt;/p&gt;
55      * &lt;p&gt;Returning &lt;code&gt;false&lt;/code&gt; to this event signals that the drop gesture was invalid, and if the drag proxy
56      * will animate back to the point from which the drag began.&lt;/p&gt;
57      * &lt;p&gt;Returning &lt;code&gt;0&lt;/code&gt; To this event signals that the data transfer operation should not take place, but
58      * that the gesture was valid, and that the repair operation should not take place.&lt;/p&gt;
59      * &lt;p&gt;Any other return value continues with the data transfer operation.&lt;/p&gt;
60      * @param {Object} data The data object gathered at mousedown time by the cooperating {@link Ext.dd.DragZone DragZone}'s
61      * {@link Ext.dd.DragZone#getDragData getDragData} method it contains the following properties:&lt;ul&gt;
62      * &lt;li&gt;copy : Boolean
63      *  &lt;div class=&quot;sub-desc&quot;&gt;The value of the TreeView's &lt;code&gt;copy&lt;/code&gt; property, or &lt;code&gt;true&lt;/code&gt; if the TreeView was configured
64      *  with &lt;code&gt;allowCopy: true&lt;/code&gt; and the control key was pressed when the drag operation was begun&lt;/div&gt;&lt;/li&gt;
65      * &lt;li&gt;view : TreeView
66      *  &lt;div class=&quot;sub-desc&quot;&gt;The source TreeView from which the drag originated.&lt;/div&gt;&lt;/li&gt;
67      * &lt;li&gt;ddel : HtmlElement
68      *  &lt;div class=&quot;sub-desc&quot;&gt;The drag proxy element which moves with the mouse&lt;/div&gt;&lt;/li&gt;
69      * &lt;li&gt;item : HtmlElement
70      *  &lt;div class=&quot;sub-desc&quot;&gt;The TreeView node upon which the mousedown event was registered.&lt;/div&gt;&lt;/li&gt;
71      * &lt;li&gt;records : Array
72      *  &lt;div class=&quot;sub-desc&quot;&gt;An Array of {@link Ext.data.Model Model}s representing the selected data being dragged from the source TreeView.&lt;/div&gt;&lt;/li&gt;
73      * &lt;/ul&gt;
74      * @param {Ext.data.Model} overModel The Model over which the drop gesture took place.
75      * @param {String} dropPosition &lt;code&gt;&quot;before&quot;&lt;/code&gt;, &lt;code&gt;&quot;after&quot;&lt;/code&gt; or &lt;code&gt;&quot;append&quot;&lt;/code&gt; depending on whether the mouse is above or below the midline of the node,
76      * or the node is a branch node which accepts new child nodes.
77      * @param {Function} dropFunction &lt;p&gt;A function to call to complete the data transfer operation and either move or copy Model instances from the source
78      * View's Store to the destination View's Store.&lt;/p&gt;
79      * &lt;p&gt;This is useful when you want to perform some kind of asynchronous processing before confirming
80      * the drop, such as an {@link Ext.window.MessageBox#confirm confirm} call, or an Ajax request.&lt;/p&gt;
81      * &lt;p&gt;Return &lt;code&gt;0&lt;/code&gt; from this event handler, and call the &lt;code&gt;dropFunction&lt;/code&gt; at any time to perform the data transfer.&lt;/p&gt;
82      */
83
84 <span id='Ext-tree-ViewDDPlugin-event-drop'>    /**
85 </span>     * @event drop
86      * &lt;b&gt;This event is fired through the TreeView. Add listeners to the TreeView object&lt;/b&gt;
87      * Fired when a drop operation has been completed and the data has been moved or copied.
88      * @param {HtmlElement} node The TreeView node &lt;b&gt;if any&lt;/b&gt; over which the mouse was positioned.
89      * @param {Object} data The data object gathered at mousedown time by the cooperating {@link Ext.dd.DragZone DragZone}'s
90      * {@link Ext.dd.DragZone#getDragData getDragData} method it contains the following properties:&lt;ul&gt;
91      * &lt;li&gt;copy : Boolean
92      *  &lt;div class=&quot;sub-desc&quot;&gt;The value of the TreeView's &lt;code&gt;copy&lt;/code&gt; property, or &lt;code&gt;true&lt;/code&gt; if the TreeView was configured
93      *  with &lt;code&gt;allowCopy: true&lt;/code&gt; and the control key was pressed when the drag operation was begun&lt;/div&gt;&lt;/li&gt;
94      * &lt;li&gt;view : TreeView
95      *  &lt;div class=&quot;sub-desc&quot;&gt;The source TreeView from which the drag originated.&lt;/div&gt;&lt;/li&gt;
96      * &lt;li&gt;ddel : HtmlElement
97      *  &lt;div class=&quot;sub-desc&quot;&gt;The drag proxy element which moves with the mouse&lt;/div&gt;&lt;/li&gt;
98      * &lt;li&gt;item : HtmlElement
99      *  &lt;div class=&quot;sub-desc&quot;&gt;The TreeView node upon which the mousedown event was registered.&lt;/div&gt;&lt;/li&gt;
100      * &lt;li&gt;records : Array
101      *  &lt;div class=&quot;sub-desc&quot;&gt;An Array of {@link Ext.data.Model Model}s representing the selected data being dragged from the source TreeView.&lt;/div&gt;&lt;/li&gt;
102      * &lt;/ul&gt;
103      * @param {Ext.data.Model} overModel The Model over which the drop gesture took place.
104      * @param {String} dropPosition &lt;code&gt;&quot;before&quot;&lt;/code&gt;, &lt;code&gt;&quot;after&quot;&lt;/code&gt; or &lt;code&gt;&quot;append&quot;&lt;/code&gt; depending on whether the mouse is above or below the midline of the node,
105      * or the node is a branch node which accepts new child nodes.
106      */
107
108     dragText : '{0} selected node{1}',
109
110 <span id='Ext-tree-ViewDDPlugin-cfg-allowParentInsert'>    /**
111 </span>     * @cfg {Boolean} allowParentInsert
112      * Allow inserting a dragged node between an expanded parent node and its first child that will become a
113      * sibling of the parent when dropped (defaults to false)
114      */
115     allowParentInserts: false,
116
117 <span id='Ext-tree-ViewDDPlugin-cfg-allowContainerDrop'>    /**
118 </span>     * @cfg {String} allowContainerDrop
119      * True if drops on the tree container (outside of a specific tree node) are allowed (defaults to false)
120      */
121     allowContainerDrops: false,
122
123 <span id='Ext-tree-ViewDDPlugin-cfg-appendOnly'>    /**
124 </span>     * @cfg {String} appendOnly
125      * True if the tree should only allow append drops (use for trees which are sorted, defaults to false)
126      */
127     appendOnly: false,
128
129 <span id='Ext-tree-ViewDDPlugin-cfg-ddGroup'>    /**
130 </span>     * @cfg {String} ddGroup
131      * A named drag drop group to which this object belongs.  If a group is specified, then both the DragZones and DropZone
132      * used by this plugin will only interact with other drag drop objects in the same group (defaults to 'TreeDD').
133      */
134     ddGroup : &quot;TreeDD&quot;,
135
136 <span id='Ext-tree-ViewDDPlugin-cfg-dragGroup'>    /**
137 </span>     * @cfg {String} dragGroup
138      * &lt;p&gt;The ddGroup to which the DragZone will belong.&lt;/p&gt;
139      * &lt;p&gt;This defines which other DropZones the DragZone will interact with. Drag/DropZones only interact with other Drag/DropZones
140      * which are members of the same ddGroup.&lt;/p&gt;
141      */
142
143 <span id='Ext-tree-ViewDDPlugin-cfg-dropGroup'>    /**
144 </span>     * @cfg {String} dropGroup
145      * &lt;p&gt;The ddGroup to which the DropZone will belong.&lt;/p&gt;
146      * &lt;p&gt;This defines which other DragZones the DropZone will interact with. Drag/DropZones only interact with other Drag/DropZones
147      * which are members of the same ddGroup.&lt;/p&gt;
148      */
149
150 <span id='Ext-tree-ViewDDPlugin-cfg-expandDelay'>    /**
151 </span>     * @cfg {String} expandDelay
152      * The delay in milliseconds to wait before expanding a target tree node while dragging a droppable node
153      * over the target (defaults to 1000)
154      */
155     expandDelay : 1000,
156
157 <span id='Ext-tree-ViewDDPlugin-cfg-enableDrop'>    /**
158 </span>     * @cfg {Boolean} enableDrop
159      * &lt;p&gt;Defaults to &lt;code&gt;true&lt;/code&gt;&lt;/p&gt;
160      * &lt;p&gt;Set to &lt;code&gt;false&lt;/code&gt; to disallow the View from accepting drop gestures&lt;/p&gt;
161      */
162     enableDrop: true,
163
164 <span id='Ext-tree-ViewDDPlugin-cfg-enableDrag'>    /**
165 </span>     * @cfg {Boolean} enableDrag
166      * &lt;p&gt;Defaults to &lt;code&gt;true&lt;/code&gt;&lt;/p&gt;
167      * &lt;p&gt;Set to &lt;code&gt;false&lt;/code&gt; to disallow dragging items from the View &lt;/p&gt;
168      */
169     enableDrag: true,
170     
171 <span id='Ext-tree-ViewDDPlugin-cfg-nodeHighlightColor'>    /**
172 </span>     * @cfg {String} nodeHighlightColor The color to use when visually highlighting the dragged
173      * or dropped node (defaults to 'c3daf9' - light blue). The color must be a 6 digit hex value, without
174      * a preceding '#'. See also {@link #nodeHighlightOnDrop} and {@link #nodeHighlightOnRepair}.
175      */
176     nodeHighlightColor: 'c3daf9',
177     
178 <span id='Ext-tree-ViewDDPlugin-cfg-nodeHighlightOnDrop'>    /**
179 </span>     * @cfg {Boolean} nodeHighlightOnDrop Whether or not to highlight any nodes after they are
180      * successfully dropped on their target. Defaults to the value of `Ext.enableFx`.
181      * See also {@link #nodeHighlightColor} and {@link #nodeHighlightOnRepair}.
182      * @markdown
183      */
184     nodeHighlightOnDrop: Ext.enableFx,
185     
186 <span id='Ext-tree-ViewDDPlugin-cfg-nodeHighlightOnRepair'>    /**
187 </span>     * @cfg {Boolean} nodeHighlightOnRepair Whether or not to highlight any nodes after they are
188      * repaired from an unsuccessful drag/drop. Defaults to the value of `Ext.enableFx`.
189      * See also {@link #nodeHighlightColor} and {@link #nodeHighlightOnDrop}.
190      * @markdown
191      */
192     nodeHighlightOnRepair: Ext.enableFx,
193
194     init : function(view) {
195         view.on('render', this.onViewRender, this, {single: true});
196     },
197
198 <span id='Ext-tree-ViewDDPlugin-method-destroy'>    /**
199 </span>     * @private
200      * AbstractComponent calls destroy on all its plugins at destroy time.
201      */
202     destroy: function() {
203         Ext.destroy(this.dragZone, this.dropZone);
204     },
205
206     onViewRender : function(view) {
207         var me = this;
208
209         if (me.enableDrag) {
210             me.dragZone = Ext.create('Ext.tree.ViewDragZone', {
211                 view: view,
212                 ddGroup: me.dragGroup || me.ddGroup,
213                 dragText: me.dragText,
214                 repairHighlightColor: me.nodeHighlightColor,
215                 repairHighlight: me.nodeHighlightOnRepair
216             });
217         }
218
219         if (me.enableDrop) {
220             me.dropZone = Ext.create('Ext.tree.ViewDropZone', {
221                 view: view,
222                 ddGroup: me.dropGroup || me.ddGroup,
223                 allowContainerDrops: me.allowContainerDrops,
224                 appendOnly: me.appendOnly,
225                 allowParentInserts: me.allowParentInserts,
226                 expandDelay: me.expandDelay,
227                 dropHighlightColor: me.nodeHighlightColor,
228                 dropHighlight: me.nodeHighlightOnDrop
229             });
230         }
231     }
232 });</pre>
233 </body>
234 </html>