1 <html><head><title>Roo/tree/TreePanel.js</title><link rel="stylesheet" type="text/css" href="../../css/highlight-js.css"/></head><body class="highlightpage"><code class="jsdoc-pretty"><span class="jsdoc-comment">/*
4 * Copyright(c) 2006-2007, Ext JS, LLC.
6 * Originally Released Under LGPL - original licence link has changed is not relivant.
9 * <script type="text/javascript">
14 * @class Roo.tree.TreePanel
15 * @extends Roo.data.Tree
16 * @cfg {Roo.tree.TreeNode} root The root node
17 * @cfg {Boolean} rootVisible false to hide the root node (defaults to true)
18 * @cfg {Boolean} lines false to disable tree lines (defaults to true)
19 * @cfg {Boolean} enableDD true to enable drag and drop
20 * @cfg {Boolean} enableDrag true to enable just drag
21 * @cfg {Boolean} enableDrop true to enable just drop
22 * @cfg {Object} dragConfig Custom config to pass to the {@link Roo.tree.TreeDragZone} instance
23 * @cfg {Object} dropConfig Custom config to pass to the {@link Roo.tree.TreeDropZone} instance
24 * @cfg {String} ddGroup The DD group this TreePanel belongs to
25 * @cfg {String} ddAppendOnly True if the tree should only allow append drops (use for trees which are sorted)
26 * @cfg {Boolean} ddScroll true to enable YUI body scrolling
27 * @cfg {Boolean} containerScroll true to register this container with ScrollManager
28 * @cfg {Boolean} hlDrop false to disable node highlight on drop (defaults to the value of Roo.enableFx)
29 * @cfg {String} hlColor The color of the node highlight (defaults to C3DAF9)
30 * @cfg {Boolean} animate true to enable animated expand/collapse (defaults to the value of Roo.enableFx)
31 * @cfg {Boolean} singleExpand true if only 1 node per branch may be expanded
32 * @cfg {Boolean} selModel A tree selection model to use with this TreePanel (defaults to a {@link Roo.tree.DefaultSelectionModel})
33 * @cfg {Roo.tree.TreeLoader} loader A TreeLoader for use with this TreePanel
34 * @cfg {Roo.tree.TreeEditor} editor The TreeEditor to display when clicked.
35 * @cfg {String} pathSeparator The token used to separate sub-paths in path strings (defaults to '/')
36 * @cfg {Function} renderer DEPRECATED - use TreeLoader:create event / Sets the rendering (formatting) function for the nodes. to return HTML markup for the tree view. The render function is called with the following parameters:<ul><li>The {Object} The data for the node.</li></ul>
37 * @cfg {Function} rendererTip DEPRECATED - use TreeLoader:create event / Sets the rendering (formatting) function for the nodes hovertip to return HTML markup for the tree view. The render function is called with the following parameters:<ul><li>The {Object} The data for the node.</li></ul>
40 * @param {String/HTMLElement/Element} el The container element
41 * @param {Object} config
43 </span><span class="jsdoc-var">Roo.tree.TreePanel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">config</span><span class="jsdoc-syntax">){
44 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">root </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
45 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">loader </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
46 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">config.root</span><span class="jsdoc-syntax">) {
47 </span><span class="jsdoc-var">root </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">config.root</span><span class="jsdoc-syntax">;
48 </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">config.root</span><span class="jsdoc-syntax">;
50 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">config.loader</span><span class="jsdoc-syntax">) {
51 </span><span class="jsdoc-var">loader </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">config.loader</span><span class="jsdoc-syntax">;
52 </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">config.loader</span><span class="jsdoc-syntax">;
55 </span><span class="jsdoc-var">Roo.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">config</span><span class="jsdoc-syntax">);
56 </span><span class="jsdoc-var">Roo.tree.TreePanel.superclass.constructor.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
57 </span><span class="jsdoc-var">this.el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">);
58 </span><span class="jsdoc-var">this.el.addClass</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'x-tree'</span><span class="jsdoc-syntax">);
59 </span><span class="jsdoc-comment">//console.log(root);
60 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">root</span><span class="jsdoc-syntax">) {
61 </span><span class="jsdoc-var">this.setRootNode</span><span class="jsdoc-syntax">( </span><span class="jsdoc-var">Roo.factory</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">root</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.tree</span><span class="jsdoc-syntax">));
63 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">loader</span><span class="jsdoc-syntax">) {
64 </span><span class="jsdoc-var">this.loader </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.factory</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">loader</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.tree</span><span class="jsdoc-syntax">);
66 </span><span class="jsdoc-comment">/**
67 * Read-only. The id of the container element becomes this TreePanel's id.
69 </span><span class="jsdoc-var">this.id </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.el.id</span><span class="jsdoc-syntax">;
70 </span><span class="jsdoc-var">this.addEvents</span><span class="jsdoc-syntax">({
71 </span><span class="jsdoc-comment">/**
73 * Fires before a node is loaded, return false to cancel
74 * @param {Node} node The node being loaded
76 </span><span class="jsdoc-string">"beforeload" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
77 </span><span class="jsdoc-comment">/**
79 * Fires when a node is loaded
80 * @param {Node} node The node that was loaded
82 </span><span class="jsdoc-string">"load" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
83 </span><span class="jsdoc-comment">/**
85 * Fires when the text for a node is changed
86 * @param {Node} node The node
87 * @param {String} text The new text
88 * @param {String} oldText The old text
90 </span><span class="jsdoc-string">"textchange" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
91 </span><span class="jsdoc-comment">/**
93 * Fires before a node is expanded, return false to cancel.
94 * @param {Node} node The node
95 * @param {Boolean} deep
96 * @param {Boolean} anim
98 </span><span class="jsdoc-string">"beforeexpand" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
99 </span><span class="jsdoc-comment">/**
100 * @event beforecollapse
101 * Fires before a node is collapsed, return false to cancel.
102 * @param {Node} node The node
103 * @param {Boolean} deep
104 * @param {Boolean} anim
106 </span><span class="jsdoc-string">"beforecollapse" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
107 </span><span class="jsdoc-comment">/**
109 * Fires when a node is expanded
110 * @param {Node} node The node
112 </span><span class="jsdoc-string">"expand" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
113 </span><span class="jsdoc-comment">/**
114 * @event disabledchange
115 * Fires when the disabled status of a node changes
116 * @param {Node} node The node
117 * @param {Boolean} disabled
119 </span><span class="jsdoc-string">"disabledchange" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
120 </span><span class="jsdoc-comment">/**
122 * Fires when a node is collapsed
123 * @param {Node} node The node
125 </span><span class="jsdoc-string">"collapse" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
126 </span><span class="jsdoc-comment">/**
128 * Fires before click processing on a node. Return false to cancel the default action.
129 * @param {Node} node The node
130 * @param {Roo.EventObject} e The event object
132 </span><span class="jsdoc-string">"beforeclick"</span><span class="jsdoc-syntax">:</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
133 </span><span class="jsdoc-comment">/**
135 * Fires when a node with a checkbox's checked property changes
136 * @param {Node} this This node
137 * @param {Boolean} checked
139 </span><span class="jsdoc-string">"checkchange"</span><span class="jsdoc-syntax">:</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
140 </span><span class="jsdoc-comment">/**
142 * Fires when a node is clicked
143 * @param {Node} node The node
144 * @param {Roo.EventObject} e The event object
146 </span><span class="jsdoc-string">"click"</span><span class="jsdoc-syntax">:</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
147 </span><span class="jsdoc-comment">/**
149 * Fires when a node is double clicked
150 * @param {Node} node The node
151 * @param {Roo.EventObject} e The event object
153 </span><span class="jsdoc-string">"dblclick"</span><span class="jsdoc-syntax">:</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
154 </span><span class="jsdoc-comment">/**
156 * Fires when a node is right clicked
157 * @param {Node} node The node
158 * @param {Roo.EventObject} e The event object
160 </span><span class="jsdoc-string">"contextmenu"</span><span class="jsdoc-syntax">:</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
161 </span><span class="jsdoc-comment">/**
162 * @event beforechildrenrendered
163 * Fires right before the child nodes for a node are rendered
164 * @param {Node} node The node
166 </span><span class="jsdoc-string">"beforechildrenrendered"</span><span class="jsdoc-syntax">:</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
167 </span><span class="jsdoc-comment">/**
169 * Fires when a node starts being dragged
170 * @param {Roo.tree.TreePanel} this
171 * @param {Roo.tree.TreeNode} node
172 * @param {event} e The raw browser event
174 </span><span class="jsdoc-string">"startdrag" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
175 </span><span class="jsdoc-comment">/**
177 * Fires when a drag operation is complete
178 * @param {Roo.tree.TreePanel} this
179 * @param {Roo.tree.TreeNode} node
180 * @param {event} e The raw browser event
182 </span><span class="jsdoc-string">"enddrag" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
183 </span><span class="jsdoc-comment">/**
185 * Fires when a dragged node is dropped on a valid DD target
186 * @param {Roo.tree.TreePanel} this
187 * @param {Roo.tree.TreeNode} node
188 * @param {DD} dd The dd it was dropped on
189 * @param {event} e The raw browser event
191 </span><span class="jsdoc-string">"dragdrop" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
192 </span><span class="jsdoc-comment">/**
193 * @event beforenodedrop
194 * Fires when a DD object is dropped on a node in this tree for preprocessing. Return false to cancel the drop. The dropEvent
195 * passed to handlers has the following properties:<br />
196 * <ul style="padding:5px;padding-left:16px;">
197 * <li>tree - The TreePanel</li>
198 * <li>target - The node being targeted for the drop</li>
199 * <li>data - The drag data from the drag source</li>
200 * <li>point - The point of the drop - append, above or below</li>
201 * <li>source - The drag source</li>
202 * <li>rawEvent - Raw mouse event</li>
203 * <li>dropNode - Drop node(s) provided by the source <b>OR</b> you can supply node(s)
204 * to be inserted by setting them on this object.</li>
205 * <li>cancel - Set this to true to cancel the drop.</li>
207 * @param {Object} dropEvent
209 </span><span class="jsdoc-string">"beforenodedrop" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
210 </span><span class="jsdoc-comment">/**
212 * Fires after a DD object is dropped on a node in this tree. The dropEvent
213 * passed to handlers has the following properties:<br />
214 * <ul style="padding:5px;padding-left:16px;">
215 * <li>tree - The TreePanel</li>
216 * <li>target - The node being targeted for the drop</li>
217 * <li>data - The drag data from the drag source</li>
218 * <li>point - The point of the drop - append, above or below</li>
219 * <li>source - The drag source</li>
220 * <li>rawEvent - Raw mouse event</li>
221 * <li>dropNode - Dropped node(s).</li>
223 * @param {Object} dropEvent
225 </span><span class="jsdoc-string">"nodedrop" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
226 </span><span class="jsdoc-comment">/**
227 * @event nodedragover
228 * Fires when a tree node is being targeted for a drag drop, return false to signal drop not allowed. The dragOverEvent
229 * passed to handlers has the following properties:<br />
230 * <ul style="padding:5px;padding-left:16px;">
231 * <li>tree - The TreePanel</li>
232 * <li>target - The node being targeted for the drop</li>
233 * <li>data - The drag data from the drag source</li>
234 * <li>point - The point of the drop - append, above or below</li>
235 * <li>source - The drag source</li>
236 * <li>rawEvent - Raw mouse event</li>
237 * <li>dropNode - Drop node(s) provided by the source.</li>
238 * <li>cancel - Set this to true to signal drop not allowed.</li>
240 * @param {Object} dragOverEvent
242 </span><span class="jsdoc-string">"nodedragover" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
243 </span><span class="jsdoc-comment">/**
245 * Fires when append node to the tree
246 * @param {Roo.tree.TreePanel} this
247 * @param {Roo.tree.TreeNode} node
248 * @param {Number} index The index of the newly appended node
250 </span><span class="jsdoc-string">"appendnode" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true
252 </span><span class="jsdoc-syntax">});
253 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.singleExpand</span><span class="jsdoc-syntax">){
254 </span><span class="jsdoc-var">this.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"beforeexpand"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.restrictExpand</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
256 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.editor</span><span class="jsdoc-syntax">) {
257 </span><span class="jsdoc-var">this.editor.tree </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
258 </span><span class="jsdoc-var">this.editor </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.factory</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.editor</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.tree</span><span class="jsdoc-syntax">);
261 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.selModel</span><span class="jsdoc-syntax">) {
262 </span><span class="jsdoc-var">this.selModel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.factory</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.selModel</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.tree</span><span class="jsdoc-syntax">);
266 </span><span class="jsdoc-var">Roo.extend</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.tree.TreePanel</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.data.Tree</span><span class="jsdoc-syntax">, {
267 </span><span class="jsdoc-var">rootVisible </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
268 </span><span class="jsdoc-var">animate</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">Roo.enableFx</span><span class="jsdoc-syntax">,
269 </span><span class="jsdoc-var">lines </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
270 </span><span class="jsdoc-var">enableDD </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
271 </span><span class="jsdoc-var">hlDrop </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">Roo.enableFx</span><span class="jsdoc-syntax">,
273 </span><span class="jsdoc-var">renderer</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
275 </span><span class="jsdoc-var">rendererTip</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
276 </span><span class="jsdoc-comment">// private
277 </span><span class="jsdoc-var">restrictExpand </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">){
278 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">p </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.parentNode</span><span class="jsdoc-syntax">;
279 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">){
280 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">p.expandedChild </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">p.expandedChild.parentNode </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">){
281 </span><span class="jsdoc-var">p.expandedChild.collapse</span><span class="jsdoc-syntax">();
283 </span><span class="jsdoc-var">p.expandedChild </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">;
287 </span><span class="jsdoc-comment">// private override
288 </span><span class="jsdoc-var">setRootNode </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">){
289 </span><span class="jsdoc-var">Roo.tree.TreePanel.superclass.setRootNode.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
290 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.rootVisible</span><span class="jsdoc-syntax">){
291 </span><span class="jsdoc-var">node.ui </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.tree.RootTreeNodeUI</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
293 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">;
296 </span><span class="jsdoc-comment">/**
297 * Returns the container element for this TreePanel
299 </span><span class="jsdoc-var">getEl </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
300 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.el</span><span class="jsdoc-syntax">;
303 </span><span class="jsdoc-comment">/**
304 * Returns the default TreeLoader for this TreePanel
306 </span><span class="jsdoc-var">getLoader </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
307 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.loader</span><span class="jsdoc-syntax">;
310 </span><span class="jsdoc-comment">/**
313 </span><span class="jsdoc-var">expandAll </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
314 </span><span class="jsdoc-var">this.root.expand</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
317 </span><span class="jsdoc-comment">/**
320 </span><span class="jsdoc-var">collapseAll </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
321 </span><span class="jsdoc-var">this.root.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
324 </span><span class="jsdoc-comment">/**
325 * Returns the selection model used by this TreePanel
327 </span><span class="jsdoc-var">getSelectionModel </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
328 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.selModel</span><span class="jsdoc-syntax">){
329 </span><span class="jsdoc-var">this.selModel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.tree.DefaultSelectionModel</span><span class="jsdoc-syntax">();
331 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.selModel</span><span class="jsdoc-syntax">;
334 </span><span class="jsdoc-comment">/**
335 * Retrieve an array of checked nodes, or an array of a specific attribute of checked nodes (e.g. "id")
336 * @param {String} attribute (optional) Defaults to null (return the actual nodes)
337 * @param {TreeNode} startNode (optional) The node to start from, defaults to the root
340 </span><span class="jsdoc-var">getChecked </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">a</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">startNode</span><span class="jsdoc-syntax">){
341 </span><span class="jsdoc-var">startNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">startNode </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this.root</span><span class="jsdoc-syntax">;
342 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">r </span><span class="jsdoc-syntax">= [];
343 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">f </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
344 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.attributes.checked</span><span class="jsdoc-syntax">){
345 </span><span class="jsdoc-var">r.push</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">a </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">this </span><span class="jsdoc-syntax">: (</span><span class="jsdoc-var">a </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'id' </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">this.id </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.attributes</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">a</span><span class="jsdoc-syntax">]));
348 </span><span class="jsdoc-var">startNode.cascade</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f</span><span class="jsdoc-syntax">);
349 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">;
352 </span><span class="jsdoc-comment">/**
353 * Expands a specified path in this TreePanel. A path can be retrieved from a node with {@link Roo.data.Node#getPath}
354 * @param {String} path
355 * @param {String} attr (optional) The attribute used in the path (see {@link Roo.data.Node#getPath} for more info)
356 * @param {Function} callback (optional) The callback to call when the expand is complete. The callback will be called with
357 * (bSuccess, oLastNode) where bSuccess is if the expand was successful and oLastNode is the last node that was expanded.
359 </span><span class="jsdoc-var">expandPath </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">path</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">attr</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">){
360 </span><span class="jsdoc-var">attr </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">attr </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-string">"id"</span><span class="jsdoc-syntax">;
361 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">keys </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">path.split</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.pathSeparator</span><span class="jsdoc-syntax">);
362 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">curNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.root</span><span class="jsdoc-syntax">;
363 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">curNode.attributes</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">attr</span><span class="jsdoc-syntax">] != </span><span class="jsdoc-var">keys</span><span class="jsdoc-syntax">[1]){ </span><span class="jsdoc-comment">// invalid root
364 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">){
365 </span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">);
367 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
369 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">index </span><span class="jsdoc-syntax">= 1;
370 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">f </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
371 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(++</span><span class="jsdoc-var">index </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">keys.length</span><span class="jsdoc-syntax">){
372 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">){
373 </span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">curNode</span><span class="jsdoc-syntax">);
375 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
377 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">curNode.findChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">attr</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">keys</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">]);
378 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">){
379 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">){
380 </span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">curNode</span><span class="jsdoc-syntax">);
382 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
384 </span><span class="jsdoc-var">curNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">;
385 </span><span class="jsdoc-var">c.expand</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">f</span><span class="jsdoc-syntax">);
387 </span><span class="jsdoc-var">curNode.expand</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">f</span><span class="jsdoc-syntax">);
390 </span><span class="jsdoc-comment">/**
391 * Selects the node in this tree at the specified path. A path can be retrieved from a node with {@link Roo.data.Node#getPath}
392 * @param {String} path
393 * @param {String} attr (optional) The attribute used in the path (see {@link Roo.data.Node#getPath} for more info)
394 * @param {Function} callback (optional) The callback to call when the selection is complete. The callback will be called with
395 * (bSuccess, oSelNode) where bSuccess is if the selection was successful and oSelNode is the selected node.
397 </span><span class="jsdoc-var">selectPath </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">path</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">attr</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">){
398 </span><span class="jsdoc-var">attr </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">attr </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-string">"id"</span><span class="jsdoc-syntax">;
399 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">keys </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">path.split</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.pathSeparator</span><span class="jsdoc-syntax">);
400 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">keys.pop</span><span class="jsdoc-syntax">();
401 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">keys.length </span><span class="jsdoc-syntax">> 0){
402 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">f </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">success</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">){
403 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">success </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">){
404 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">n </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.findChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">attr</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">);
405 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">){
406 </span><span class="jsdoc-var">n.select</span><span class="jsdoc-syntax">();
407 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">){
408 </span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">);
410 }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">){
411 </span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">);
413 }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
414 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">){
415 </span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">);
419 </span><span class="jsdoc-var">this.expandPath</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">keys.join</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.pathSeparator</span><span class="jsdoc-syntax">), </span><span class="jsdoc-var">attr</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">f</span><span class="jsdoc-syntax">);
420 }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
421 </span><span class="jsdoc-var">this.root.select</span><span class="jsdoc-syntax">();
422 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">){
423 </span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.root</span><span class="jsdoc-syntax">);
428 </span><span class="jsdoc-var">getTreeEl </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
429 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.el</span><span class="jsdoc-syntax">;
432 </span><span class="jsdoc-comment">/**
433 * Trigger rendering of this TreePanel
435 </span><span class="jsdoc-var">render </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
436 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.innerCt</span><span class="jsdoc-syntax">) {
437 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// stop it rendering more than once!!
438 </span><span class="jsdoc-syntax">}
440 </span><span class="jsdoc-var">this.innerCt </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.el.createChild</span><span class="jsdoc-syntax">({</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">:</span><span class="jsdoc-string">"ul"</span><span class="jsdoc-syntax">,
441 </span><span class="jsdoc-var">cls</span><span class="jsdoc-syntax">:</span><span class="jsdoc-string">"x-tree-root-ct " </span><span class="jsdoc-syntax">+
442 (</span><span class="jsdoc-var">this.lines </span><span class="jsdoc-syntax">? </span><span class="jsdoc-string">"x-tree-lines" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">"x-tree-no-lines"</span><span class="jsdoc-syntax">)});
444 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.containerScroll</span><span class="jsdoc-syntax">){
445 </span><span class="jsdoc-var">Roo.dd.ScrollManager.register</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.el</span><span class="jsdoc-syntax">);
447 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">((</span><span class="jsdoc-var">this.enableDD </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this.enableDrop</span><span class="jsdoc-syntax">) && !</span><span class="jsdoc-var">this.dropZone</span><span class="jsdoc-syntax">){
448 </span><span class="jsdoc-comment">/**
449 * The dropZone used by this tree if drop is enabled
450 * @type Roo.tree.TreeDropZone
452 </span><span class="jsdoc-var">this.dropZone </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.tree.TreeDropZone</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.dropConfig </span><span class="jsdoc-syntax">|| {
453 </span><span class="jsdoc-var">ddGroup</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.ddGroup </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-string">"TreeDD"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">appendOnly</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.ddAppendOnly </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">true
454 </span><span class="jsdoc-syntax">});
456 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">((</span><span class="jsdoc-var">this.enableDD </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this.enableDrag</span><span class="jsdoc-syntax">) && !</span><span class="jsdoc-var">this.dragZone</span><span class="jsdoc-syntax">){
457 </span><span class="jsdoc-comment">/**
458 * The dragZone used by this tree if drag is enabled
459 * @type Roo.tree.TreeDragZone
461 </span><span class="jsdoc-var">this.dragZone </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.tree.TreeDragZone</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.dragConfig </span><span class="jsdoc-syntax">|| {
462 </span><span class="jsdoc-var">ddGroup</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.ddGroup </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-string">"TreeDD"</span><span class="jsdoc-syntax">,
463 </span><span class="jsdoc-var">scroll</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.ddScroll
464 </span><span class="jsdoc-syntax">});
466 </span><span class="jsdoc-var">this.getSelectionModel</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.init</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
467 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.root</span><span class="jsdoc-syntax">) {
468 </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"ROOT not set in tree"</span><span class="jsdoc-syntax">);
469 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
471 </span><span class="jsdoc-var">this.root.render</span><span class="jsdoc-syntax">();
472 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.rootVisible</span><span class="jsdoc-syntax">){
473 </span><span class="jsdoc-var">this.root.renderChildren</span><span class="jsdoc-syntax">();
475 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
477 });</span></code></body></html>