1 <html><head><title>Roo/tree/TreeSelectionModel.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.DefaultSelectionModel
15 * @extends Roo.util.Observable
16 * The default single selection for a TreePanel.
17 * @param {Object} cfg Configuration
19 </span><span class="jsdoc-var">Roo.tree.DefaultSelectionModel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cfg</span><span class="jsdoc-syntax">){
20 </span><span class="jsdoc-var">this.selNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">;
24 </span><span class="jsdoc-var">this.addEvents</span><span class="jsdoc-syntax">({
25 </span><span class="jsdoc-comment">/**
26 * @event selectionchange
27 * Fires when the selected node changes
28 * @param {DefaultSelectionModel} this
29 * @param {TreeNode} node the new selection
31 </span><span class="jsdoc-string">"selectionchange" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
33 </span><span class="jsdoc-comment">/**
35 * Fires before the selected node changes, return false to cancel the change
36 * @param {DefaultSelectionModel} this
37 * @param {TreeNode} node the new selection
38 * @param {TreeNode} node the old selection
40 </span><span class="jsdoc-string">"beforeselect" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true
41 </span><span class="jsdoc-syntax">});
43 </span><span class="jsdoc-var">Roo.tree.DefaultSelectionModel.superclass.constructor.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">cfg</span><span class="jsdoc-syntax">);
46 </span><span class="jsdoc-var">Roo.extend</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.tree.DefaultSelectionModel</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.util.Observable</span><span class="jsdoc-syntax">, {
47 </span><span class="jsdoc-var">init </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tree</span><span class="jsdoc-syntax">){
48 </span><span class="jsdoc-var">this.tree </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">tree</span><span class="jsdoc-syntax">;
49 </span><span class="jsdoc-var">tree.getTreeEl</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"keydown"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.onKeyDown</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
50 </span><span class="jsdoc-var">tree.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"click"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.onNodeClick</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
53 </span><span class="jsdoc-var">onNodeClick </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">, </span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
54 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e.ctrlKey </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">this.selNode </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">) {
55 </span><span class="jsdoc-var">this.unselect</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
56 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
58 </span><span class="jsdoc-var">this.select</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
61 </span><span class="jsdoc-comment">/**
63 * @param {TreeNode} node The node to select
64 * @return {TreeNode} The selected node
66 </span><span class="jsdoc-var">select </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">){
67 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">last </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.selNode</span><span class="jsdoc-syntax">;
68 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">last </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'beforeselect'</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">, </span><span class="jsdoc-var">last</span><span class="jsdoc-syntax">) !== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">){
69 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">last</span><span class="jsdoc-syntax">){
70 </span><span class="jsdoc-var">last.ui.onSelectedChange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
72 </span><span class="jsdoc-var">this.selNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">;
73 </span><span class="jsdoc-var">node.ui.onSelectedChange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
74 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"selectionchange"</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">, </span><span class="jsdoc-var">last</span><span class="jsdoc-syntax">);
76 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">;
79 </span><span class="jsdoc-comment">/**
81 * @param {TreeNode} node The node to unselect
83 </span><span class="jsdoc-var">unselect </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">){
84 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.selNode </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">){
85 </span><span class="jsdoc-var">this.clearSelections</span><span class="jsdoc-syntax">();
89 </span><span class="jsdoc-comment">/**
90 * Clear all selections
92 </span><span class="jsdoc-var">clearSelections </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
93 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">n </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.selNode</span><span class="jsdoc-syntax">;
94 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">){
95 </span><span class="jsdoc-var">n.ui.onSelectedChange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
96 </span><span class="jsdoc-var">this.selNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">;
97 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"selectionchange"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">);
99 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">;
102 </span><span class="jsdoc-comment">/**
103 * Get the selected node
104 * @return {TreeNode} The selected node
106 </span><span class="jsdoc-var">getSelectedNode </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
107 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.selNode</span><span class="jsdoc-syntax">;
110 </span><span class="jsdoc-comment">/**
111 * Returns true if the node is selected
112 * @param {TreeNode} node The node to check
115 </span><span class="jsdoc-var">isSelected </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">){
116 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.selNode </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">;
119 </span><span class="jsdoc-comment">/**
120 * Selects the node above the selected node in the tree, intelligently walking the nodes
121 * @return TreeNode The new selection
123 </span><span class="jsdoc-var">selectPrevious </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
124 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">s </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.selNode </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this.lastSelNode</span><span class="jsdoc-syntax">;
125 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">){
126 </span><span class="jsdoc-keyword">return null</span><span class="jsdoc-syntax">;
128 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ps </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">s.previousSibling</span><span class="jsdoc-syntax">;
129 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ps</span><span class="jsdoc-syntax">){
130 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">ps.isExpanded</span><span class="jsdoc-syntax">() || </span><span class="jsdoc-var">ps.childNodes.length </span><span class="jsdoc-syntax">< 1){
131 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.select</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ps</span><span class="jsdoc-syntax">);
132 } </span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
133 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">lc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">ps.lastChild</span><span class="jsdoc-syntax">;
134 </span><span class="jsdoc-keyword">while</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">lc </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">lc.isExpanded</span><span class="jsdoc-syntax">() && </span><span class="jsdoc-var">lc.childNodes.length </span><span class="jsdoc-syntax">> 0){
135 </span><span class="jsdoc-var">lc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">lc.lastChild</span><span class="jsdoc-syntax">;
137 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.select</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">lc</span><span class="jsdoc-syntax">);
139 } </span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.parentNode </span><span class="jsdoc-syntax">&& (</span><span class="jsdoc-var">this.tree.rootVisible </span><span class="jsdoc-syntax">|| !</span><span class="jsdoc-var">s.parentNode.isRoot</span><span class="jsdoc-syntax">)){
140 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.select</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.parentNode</span><span class="jsdoc-syntax">);
142 </span><span class="jsdoc-keyword">return null</span><span class="jsdoc-syntax">;
145 </span><span class="jsdoc-comment">/**
146 * Selects the node above the selected node in the tree, intelligently walking the nodes
147 * @return TreeNode The new selection
149 </span><span class="jsdoc-var">selectNext </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
150 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">s </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.selNode </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this.lastSelNode</span><span class="jsdoc-syntax">;
151 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">){
152 </span><span class="jsdoc-keyword">return null</span><span class="jsdoc-syntax">;
154 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.firstChild </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">s.isExpanded</span><span class="jsdoc-syntax">()){
155 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.select</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.firstChild</span><span class="jsdoc-syntax">);
156 }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.nextSibling</span><span class="jsdoc-syntax">){
157 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.select</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.nextSibling</span><span class="jsdoc-syntax">);
158 }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.parentNode</span><span class="jsdoc-syntax">){
159 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">newS </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">;
160 </span><span class="jsdoc-var">s.parentNode.bubble</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
161 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.nextSibling</span><span class="jsdoc-syntax">){
162 </span><span class="jsdoc-var">newS </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getOwnerTree</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.selModel.select</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.nextSibling</span><span class="jsdoc-syntax">);
163 </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
166 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">newS</span><span class="jsdoc-syntax">;
168 </span><span class="jsdoc-keyword">return null</span><span class="jsdoc-syntax">;
171 </span><span class="jsdoc-var">onKeyDown </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
172 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">s </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.selNode </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this.lastSelNode</span><span class="jsdoc-syntax">;
173 </span><span class="jsdoc-comment">// undesirable, but required
174 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">sm </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
175 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">){
176 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
178 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">k </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">e.getKey</span><span class="jsdoc-syntax">();
179 </span><span class="jsdoc-keyword">switch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">k</span><span class="jsdoc-syntax">){
180 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-var">e.DOWN</span><span class="jsdoc-syntax">:
181 </span><span class="jsdoc-var">e.stopEvent</span><span class="jsdoc-syntax">();
182 </span><span class="jsdoc-var">this.selectNext</span><span class="jsdoc-syntax">();
183 </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
184 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-var">e.UP</span><span class="jsdoc-syntax">:
185 </span><span class="jsdoc-var">e.stopEvent</span><span class="jsdoc-syntax">();
186 </span><span class="jsdoc-var">this.selectPrevious</span><span class="jsdoc-syntax">();
187 </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
188 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-var">e.RIGHT</span><span class="jsdoc-syntax">:
189 </span><span class="jsdoc-var">e.preventDefault</span><span class="jsdoc-syntax">();
190 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.hasChildNodes</span><span class="jsdoc-syntax">()){
191 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">s.isExpanded</span><span class="jsdoc-syntax">()){
192 </span><span class="jsdoc-var">s.expand</span><span class="jsdoc-syntax">();
193 }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.firstChild</span><span class="jsdoc-syntax">){
194 </span><span class="jsdoc-var">this.select</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.firstChild</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">);
197 </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
198 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-var">e.LEFT</span><span class="jsdoc-syntax">:
199 </span><span class="jsdoc-var">e.preventDefault</span><span class="jsdoc-syntax">();
200 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.hasChildNodes</span><span class="jsdoc-syntax">() && </span><span class="jsdoc-var">s.isExpanded</span><span class="jsdoc-syntax">()){
201 </span><span class="jsdoc-var">s.collapse</span><span class="jsdoc-syntax">();
202 }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.parentNode </span><span class="jsdoc-syntax">&& (</span><span class="jsdoc-var">this.tree.rootVisible </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">s.parentNode </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-var">this.tree.getRootNode</span><span class="jsdoc-syntax">())){
203 </span><span class="jsdoc-var">this.select</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.parentNode</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">);
205 </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
210 </span><span class="jsdoc-comment">/**
211 * @class Roo.tree.MultiSelectionModel
212 * @extends Roo.util.Observable
213 * Multi selection for a TreePanel.
214 * @param {Object} cfg Configuration
216 </span><span class="jsdoc-var">Roo.tree.MultiSelectionModel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
217 </span><span class="jsdoc-var">this.selNodes </span><span class="jsdoc-syntax">= [];
218 </span><span class="jsdoc-var">this.selMap </span><span class="jsdoc-syntax">= {};
219 </span><span class="jsdoc-var">this.addEvents</span><span class="jsdoc-syntax">({
220 </span><span class="jsdoc-comment">/**
221 * @event selectionchange
222 * Fires when the selected nodes change
223 * @param {MultiSelectionModel} this
224 * @param {Array} nodes Array of the selected nodes
226 </span><span class="jsdoc-string">"selectionchange" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true
227 </span><span class="jsdoc-syntax">});
228 </span><span class="jsdoc-var">Roo.tree.MultiSelectionModel.superclass.constructor.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">cfg</span><span class="jsdoc-syntax">);
232 </span><span class="jsdoc-var">Roo.extend</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.tree.MultiSelectionModel</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.util.Observable</span><span class="jsdoc-syntax">, {
233 </span><span class="jsdoc-var">init </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tree</span><span class="jsdoc-syntax">){
234 </span><span class="jsdoc-var">this.tree </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">tree</span><span class="jsdoc-syntax">;
235 </span><span class="jsdoc-var">tree.getTreeEl</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"keydown"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.onKeyDown</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
236 </span><span class="jsdoc-var">tree.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"click"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.onNodeClick</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
239 </span><span class="jsdoc-var">onNodeClick </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">, </span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
240 </span><span class="jsdoc-var">this.select</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">e.ctrlKey</span><span class="jsdoc-syntax">);
243 </span><span class="jsdoc-comment">/**
245 * @param {TreeNode} node The node to select
246 * @param {EventObject} e (optional) An event associated with the selection
247 * @param {Boolean} keepExisting True to retain existing selections
248 * @return {TreeNode} The selected node
250 </span><span class="jsdoc-var">select </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">, </span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">keepExisting</span><span class="jsdoc-syntax">){
251 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">keepExisting </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">){
252 </span><span class="jsdoc-var">this.clearSelections</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
254 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.isSelected</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">)){
255 </span><span class="jsdoc-var">this.lastSelNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">;
256 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">;
258 </span><span class="jsdoc-var">this.selNodes.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
259 </span><span class="jsdoc-var">this.selMap</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">node.id</span><span class="jsdoc-syntax">] = </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">;
260 </span><span class="jsdoc-var">this.lastSelNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">;
261 </span><span class="jsdoc-var">node.ui.onSelectedChange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
262 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"selectionchange"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.selNodes</span><span class="jsdoc-syntax">);
263 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">;
266 </span><span class="jsdoc-comment">/**
268 * @param {TreeNode} node The node to unselect
270 </span><span class="jsdoc-var">unselect </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">){
271 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.selMap</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">node.id</span><span class="jsdoc-syntax">]){
272 </span><span class="jsdoc-var">node.ui.onSelectedChange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
273 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">sn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.selNodes</span><span class="jsdoc-syntax">;
274 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">index </span><span class="jsdoc-syntax">= -1;
275 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sn.indexOf</span><span class="jsdoc-syntax">){
276 </span><span class="jsdoc-var">index </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sn.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
277 }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
278 </span><span class="jsdoc-keyword">for</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">= 0, </span><span class="jsdoc-var">len </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sn.length</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">< </span><span class="jsdoc-var">len</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
279 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sn</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">] == </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">){
280 </span><span class="jsdoc-var">index </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">;
281 </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
285 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">index </span><span class="jsdoc-syntax">!= -1){
286 </span><span class="jsdoc-var">this.selNodes.splice</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">, 1);
288 </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">this.selMap</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">node.id</span><span class="jsdoc-syntax">];
289 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"selectionchange"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.selNodes</span><span class="jsdoc-syntax">);
293 </span><span class="jsdoc-comment">/**
294 * Clear all selections
296 </span><span class="jsdoc-var">clearSelections </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">suppressEvent</span><span class="jsdoc-syntax">){
297 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">sn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.selNodes</span><span class="jsdoc-syntax">;
298 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sn.length </span><span class="jsdoc-syntax">> 0){
299 </span><span class="jsdoc-keyword">for</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">= 0, </span><span class="jsdoc-var">len </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sn.length</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">< </span><span class="jsdoc-var">len</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
300 </span><span class="jsdoc-var">sn</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.ui.onSelectedChange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
302 </span><span class="jsdoc-var">this.selNodes </span><span class="jsdoc-syntax">= [];
303 </span><span class="jsdoc-var">this.selMap </span><span class="jsdoc-syntax">= {};
304 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">suppressEvent </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">){
305 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"selectionchange"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.selNodes</span><span class="jsdoc-syntax">);
310 </span><span class="jsdoc-comment">/**
311 * Returns true if the node is selected
312 * @param {TreeNode} node The node to check
315 </span><span class="jsdoc-var">isSelected </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">){
316 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.selMap</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">node.id</span><span class="jsdoc-syntax">] ? </span><span class="jsdoc-keyword">true </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
319 </span><span class="jsdoc-comment">/**
320 * Returns an array of the selected nodes
323 </span><span class="jsdoc-var">getSelectedNodes </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
324 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.selNodes</span><span class="jsdoc-syntax">;
327 </span><span class="jsdoc-var">onKeyDown </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">Roo.tree.DefaultSelectionModel.prototype.onKeyDown</span><span class="jsdoc-syntax">,
329 </span><span class="jsdoc-var">selectNext </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">Roo.tree.DefaultSelectionModel.prototype.selectNext</span><span class="jsdoc-syntax">,
331 </span><span class="jsdoc-var">selectPrevious </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">Roo.tree.DefaultSelectionModel.prototype.selectPrevious
332 </span><span class="jsdoc-syntax">});</span></code></body></html>