Fix #5718 - Change the order / layout of tabs. / new master lists
[roojs1] / docs / src / Roo_tree_TreeSelectionModel.js.html
1 <html><head><title>/home/edward/gitlive/roojs1/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">/*
2  * Based on:
3  * Ext JS Library 1.1.1
4  * Copyright(c) 2006-2007, Ext JS, LLC.
5  *
6  * Originally Released Under LGPL - original licence link has changed is not relivant.
7  *
8  * Fork - LGPL
9  * &lt;script type=&quot;text/javascript&quot;&gt;
10  */
11
12
13 /**
14  * @class Roo.tree.DefaultSelectionModel
15  * @extends Roo.util.Observable
16  * The default single selection for a TreePanel.
17  * @param {Object} cfg Configuration
18  */
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">;
21
22
23
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
30         */
31        </span><span class="jsdoc-string">&quot;selectionchange&quot; </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
32
33        </span><span class="jsdoc-comment">/**
34         * @event beforeselect
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
39         */
40        </span><span class="jsdoc-string">&quot;beforeselect&quot; </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true
41    </span><span class="jsdoc-syntax">});
42
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">);
44 };
45
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">&quot;keydown&quot;</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">&quot;click&quot;</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">);
51     },
52
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">&amp;&amp; </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">;
57         }
58         </span><span class="jsdoc-var">this.select</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
59     },
60
61     </span><span class="jsdoc-comment">/**
62      * Select a node.
63      * @param {TreeNode} node The node to select
64      * @return {TreeNode} The selected node
65      */
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">&amp;&amp; </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">);
71             }
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">&quot;selectionchange&quot;</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">);
75         }
76         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">;
77     },
78
79     </span><span class="jsdoc-comment">/**
80      * Deselect a node.
81      * @param {TreeNode} node The node to unselect
82      */
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">();
86         }
87     },
88
89     </span><span class="jsdoc-comment">/**
90      * Clear all selections
91      */
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">&quot;selectionchange&quot;</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">);
98         }
99         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">;
100     },
101
102     </span><span class="jsdoc-comment">/**
103      * Get the selected node
104      * @return {TreeNode} The selected node
105      */
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">;
108     },
109
110     </span><span class="jsdoc-comment">/**
111      * Returns true if the node is selected
112      * @param {TreeNode} node The node to check
113      * @return {Boolean}
114      */
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">;
117     },
118
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
122      */
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">;
127         }
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">&lt; 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">&amp;&amp; </span><span class="jsdoc-var">lc.isExpanded</span><span class="jsdoc-syntax">() &amp;&amp; </span><span class="jsdoc-var">lc.childNodes.length </span><span class="jsdoc-syntax">&gt; 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">;
136                 }
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">);
138             }
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">&amp;&amp; (</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">);
141         }
142         </span><span class="jsdoc-keyword">return null</span><span class="jsdoc-syntax">;
143     },
144
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
148      */
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">;
153         }
154         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.firstChild </span><span class="jsdoc-syntax">&amp;&amp; </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">;
164                 }
165             });
166             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">newS</span><span class="jsdoc-syntax">;
167          }
168         </span><span class="jsdoc-keyword">return null</span><span class="jsdoc-syntax">;
169     },
170
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">;
177         }
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">);
195                      }
196                  }
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">() &amp;&amp; </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">&amp;&amp; (</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">);
204                  }
205              </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
206         };
207     }
208 });
209
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
215  */
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
225         */
226        </span><span class="jsdoc-string">&quot;selectionchange&quot; </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">);
229
230 };
231
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">&quot;keydown&quot;</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">&quot;click&quot;</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">);
237     },
238
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">);
241     },
242
243     </span><span class="jsdoc-comment">/**
244      * Select a node.
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
249      */
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">);
253         }
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">;
257         }
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">&quot;selectionchange&quot;</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">;
264     },
265
266     </span><span class="jsdoc-comment">/**
267      * Deselect a node.
268      * @param {TreeNode} node The node to unselect
269      */
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">&lt; </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">;
282                     }
283                 }
284             }
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);
287             }
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">&quot;selectionchange&quot;</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">);
290         }
291     },
292
293     </span><span class="jsdoc-comment">/**
294      * Clear all selections
295      */
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">&gt; 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">&lt; </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">);
301             }
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">&quot;selectionchange&quot;</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">);
306             }
307         }
308     },
309
310     </span><span class="jsdoc-comment">/**
311      * Returns true if the node is selected
312      * @param {TreeNode} node The node to check
313      * @return {Boolean}
314      */
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">;
317     },
318
319     </span><span class="jsdoc-comment">/**
320      * Returns an array of the selected nodes
321      * @return {Array}
322      */
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">;
325     },
326
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">,
328
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">,
330
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>