c408a5474d532414987e5cdb36526f9c62c0e54e
[roojs1] / docs / symbols / src / Roo_grid_RowSelectionModel.js.html
1 <html><head><title>../roojs1/Roo/grid/RowSelectionModel.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  * @extends Roo.grid.AbstractSelectionModel
13  * @class Roo.grid.RowSelectionModel
14  * The default SelectionModel used by {@link Roo.grid.Grid}.
15  * It supports multiple selections and keyboard selection/navigation. 
16  * @constructor
17  * @param {Object} config
18  */
19 </span><span class="jsdoc-var">Roo.grid.RowSelectionModel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">config</span><span class="jsdoc-syntax">){
20     </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">);
21     </span><span class="jsdoc-var">this.selections </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.util.MixedCollection</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">){
22         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">o.id</span><span class="jsdoc-syntax">;
23     });
24
25     </span><span class="jsdoc-var">this.last </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
26     </span><span class="jsdoc-var">this.lastActive </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
27
28     </span><span class="jsdoc-var">this.addEvents</span><span class="jsdoc-syntax">({
29         </span><span class="jsdoc-comment">/**
30              * @event selectionchange
31              * Fires when the selection changes
32              * @param {SelectionModel} this
33              */
34             </span><span class="jsdoc-string">&quot;selectionchange&quot; </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
35         </span><span class="jsdoc-comment">/**
36              * @event afterselectionchange
37              * Fires after the selection changes (eg. by key press or clicking)
38              * @param {SelectionModel} this
39              */
40             </span><span class="jsdoc-string">&quot;afterselectionchange&quot; </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
41         </span><span class="jsdoc-comment">/**
42              * @event beforerowselect
43              * Fires when a row is selected being selected, return false to cancel.
44              * @param {SelectionModel} this
45              * @param {Number} rowIndex The selected index
46              * @param {Boolean} keepExisting False if other selections will be cleared
47              */
48             </span><span class="jsdoc-string">&quot;beforerowselect&quot; </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
49         </span><span class="jsdoc-comment">/**
50              * @event rowselect
51              * Fires when a row is selected.
52              * @param {SelectionModel} this
53              * @param {Number} rowIndex The selected index
54              * @param {Roo.data.Record} r The record
55              */
56             </span><span class="jsdoc-string">&quot;rowselect&quot; </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
57         </span><span class="jsdoc-comment">/**
58              * @event rowdeselect
59              * Fires when a row is deselected.
60              * @param {SelectionModel} this
61              * @param {Number} rowIndex The selected index
62              */
63         </span><span class="jsdoc-string">&quot;rowdeselect&quot; </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true
64     </span><span class="jsdoc-syntax">});
65     </span><span class="jsdoc-var">Roo.grid.RowSelectionModel.superclass.constructor.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
66     </span><span class="jsdoc-var">this.locked </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
67 };
68
69 </span><span class="jsdoc-var">Roo.extend</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.grid.RowSelectionModel</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.grid.AbstractSelectionModel</span><span class="jsdoc-syntax">,  {
70     </span><span class="jsdoc-comment">/**
71      * @cfg {Boolean} singleSelect
72      * True to allow selection of only one row at a time (defaults to false)
73      */
74     </span><span class="jsdoc-var">singleSelect </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
75
76     </span><span class="jsdoc-comment">// private
77     </span><span class="jsdoc-var">initEvents </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
78
79         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.grid.enableDragDrop </span><span class="jsdoc-syntax">&amp;&amp; !</span><span class="jsdoc-var">this.grid.enableDrag</span><span class="jsdoc-syntax">){
80             </span><span class="jsdoc-var">this.grid.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;mousedown&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.handleMouseDown</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
81         }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{ </span><span class="jsdoc-comment">// allow click to work like normal
82             </span><span class="jsdoc-var">this.grid.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;rowclick&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.handleDragableRowClick</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
83         }
84
85         </span><span class="jsdoc-var">this.rowNav </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.KeyNav</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.grid.getGridEl</span><span class="jsdoc-syntax">(), {
86             </span><span class="jsdoc-string">&quot;up&quot; </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">){
87                 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">e.shiftKey</span><span class="jsdoc-syntax">){
88                     </span><span class="jsdoc-var">this.selectPrevious</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e.shiftKey</span><span class="jsdoc-syntax">);
89                 }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.last </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">false </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">this.lastActive </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">){
90                     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">last </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.last</span><span class="jsdoc-syntax">;
91                     </span><span class="jsdoc-var">this.selectRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.last</span><span class="jsdoc-syntax">,  </span><span class="jsdoc-var">this.lastActive</span><span class="jsdoc-syntax">-1);
92                     </span><span class="jsdoc-var">this.grid.getView</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.focusRow</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.lastActive</span><span class="jsdoc-syntax">);
93                     </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-keyword">false</span><span class="jsdoc-syntax">){
94                         </span><span class="jsdoc-var">this.last </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">last</span><span class="jsdoc-syntax">;
95                     }
96                 }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
97                     </span><span class="jsdoc-var">this.selectFirstRow</span><span class="jsdoc-syntax">();
98                 }
99                 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;afterselectionchange&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
100             },
101             </span><span class="jsdoc-string">&quot;down&quot; </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">){
102                 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">e.shiftKey</span><span class="jsdoc-syntax">){
103                     </span><span class="jsdoc-var">this.selectNext</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e.shiftKey</span><span class="jsdoc-syntax">);
104                 }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.last </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">false </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">this.lastActive </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">){
105                     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">last </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.last</span><span class="jsdoc-syntax">;
106                     </span><span class="jsdoc-var">this.selectRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.last</span><span class="jsdoc-syntax">,  </span><span class="jsdoc-var">this.lastActive</span><span class="jsdoc-syntax">+1);
107                     </span><span class="jsdoc-var">this.grid.getView</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.focusRow</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.lastActive</span><span class="jsdoc-syntax">);
108                     </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-keyword">false</span><span class="jsdoc-syntax">){
109                         </span><span class="jsdoc-var">this.last </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">last</span><span class="jsdoc-syntax">;
110                     }
111                 }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
112                     </span><span class="jsdoc-var">this.selectFirstRow</span><span class="jsdoc-syntax">();
113                 }
114                 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;afterselectionchange&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
115             },
116             </span><span class="jsdoc-var">scope</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this
117         </span><span class="jsdoc-syntax">});
118
119         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">view </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.grid.view</span><span class="jsdoc-syntax">;
120         </span><span class="jsdoc-var">view.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;refresh&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.onRefresh</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
121         </span><span class="jsdoc-var">view.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;rowupdated&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.onRowUpdated</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
122         </span><span class="jsdoc-var">view.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;rowremoved&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.onRemove</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
123     },
124
125     </span><span class="jsdoc-comment">// private
126     </span><span class="jsdoc-var">onRefresh </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
127         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ds </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.grid.dataSource</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.grid.view</span><span class="jsdoc-syntax">;
128         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">s </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.selections</span><span class="jsdoc-syntax">;
129         </span><span class="jsdoc-var">s.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">){
130             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">((</span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">ds.indexOfId</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r.id</span><span class="jsdoc-syntax">)) != -1){
131                 </span><span class="jsdoc-var">v.onRowSelect</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">);
132                 </span><span class="jsdoc-var">s.add</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ds.getAt</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">)); </span><span class="jsdoc-comment">// updating the selection relate data
133             </span><span class="jsdoc-syntax">}</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
134                 </span><span class="jsdoc-var">s.remove</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">);
135             }
136         });
137     },
138
139     </span><span class="jsdoc-comment">// private
140     </span><span class="jsdoc-var">onRemove </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">){
141         </span><span class="jsdoc-var">this.selections.remove</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">);
142     },
143
144     </span><span class="jsdoc-comment">// private
145     </span><span class="jsdoc-var">onRowUpdated </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">){
146         </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">r</span><span class="jsdoc-syntax">)){
147             </span><span class="jsdoc-var">v.onRowSelect</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">);
148         }
149     },
150
151     </span><span class="jsdoc-comment">/**
152      * Select records.
153      * @param {Array} records The records to select
154      * @param {Boolean} keepExisting (optional) True to keep existing selections
155      */
156     </span><span class="jsdoc-var">selectRecords </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">records</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">keepExisting</span><span class="jsdoc-syntax">){
157         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">keepExisting</span><span class="jsdoc-syntax">){
158             </span><span class="jsdoc-var">this.clearSelections</span><span class="jsdoc-syntax">();
159         }
160         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ds </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.grid.dataSource</span><span class="jsdoc-syntax">;
161         </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">records.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">++){
162             </span><span class="jsdoc-var">this.selectRow</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ds.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">records</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]), </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
163         }
164     },
165
166     </span><span class="jsdoc-comment">/**
167      * Gets the number of selected rows.
168      * @return {Number}
169      */
170     </span><span class="jsdoc-var">getCount </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
171         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.selections.length</span><span class="jsdoc-syntax">;
172     },
173
174     </span><span class="jsdoc-comment">/**
175      * Selects the first row in the grid.
176      */
177     </span><span class="jsdoc-var">selectFirstRow </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
178         </span><span class="jsdoc-var">this.selectRow</span><span class="jsdoc-syntax">(0);
179     },
180
181     </span><span class="jsdoc-comment">/**
182      * Select the last row.
183      * @param {Boolean} keepExisting (optional) True to keep existing selections
184      */
185     </span><span class="jsdoc-var">selectLastRow </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">keepExisting</span><span class="jsdoc-syntax">){
186         </span><span class="jsdoc-var">this.selectRow</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.grid.dataSource.getCount</span><span class="jsdoc-syntax">() - 1, </span><span class="jsdoc-var">keepExisting</span><span class="jsdoc-syntax">);
187     },
188
189     </span><span class="jsdoc-comment">/**
190      * Selects the row immediately following the last selected row.
191      * @param {Boolean} keepExisting (optional) True to keep existing selections
192      */
193     </span><span class="jsdoc-var">selectNext </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">keepExisting</span><span class="jsdoc-syntax">){
194         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.last </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">false </span><span class="jsdoc-syntax">&amp;&amp; (</span><span class="jsdoc-var">this.last</span><span class="jsdoc-syntax">+1) &lt; </span><span class="jsdoc-var">this.grid.dataSource.getCount</span><span class="jsdoc-syntax">()){
195             </span><span class="jsdoc-var">this.selectRow</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.last</span><span class="jsdoc-syntax">+1, </span><span class="jsdoc-var">keepExisting</span><span class="jsdoc-syntax">);
196             </span><span class="jsdoc-var">this.grid.getView</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.focusRow</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.last</span><span class="jsdoc-syntax">);
197         }
198     },
199
200     </span><span class="jsdoc-comment">/**
201      * Selects the row that precedes the last selected row.
202      * @param {Boolean} keepExisting (optional) True to keep existing selections
203      */
204     </span><span class="jsdoc-var">selectPrevious </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">keepExisting</span><span class="jsdoc-syntax">){
205         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.last</span><span class="jsdoc-syntax">){
206             </span><span class="jsdoc-var">this.selectRow</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.last</span><span class="jsdoc-syntax">-1, </span><span class="jsdoc-var">keepExisting</span><span class="jsdoc-syntax">);
207             </span><span class="jsdoc-var">this.grid.getView</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.focusRow</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.last</span><span class="jsdoc-syntax">);
208         }
209     },
210
211     </span><span class="jsdoc-comment">/**
212      * Returns the selected records
213      * @return {Array} Array of selected records
214      */
215     </span><span class="jsdoc-var">getSelections </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
216         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">[]</span><span class="jsdoc-var">.concat</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.selections.items</span><span class="jsdoc-syntax">);
217     },
218
219     </span><span class="jsdoc-comment">/**
220      * Returns the first selected record.
221      * @return {Record}
222      */
223     </span><span class="jsdoc-var">getSelected </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
224         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.selections.itemAt</span><span class="jsdoc-syntax">(0);
225     },
226
227
228     </span><span class="jsdoc-comment">/**
229      * Clears all selections.
230      */
231     </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">fast</span><span class="jsdoc-syntax">){
232         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.locked</span><span class="jsdoc-syntax">) </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
233         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">fast </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">){
234             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ds </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.grid.dataSource</span><span class="jsdoc-syntax">;
235             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">s </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.selections</span><span class="jsdoc-syntax">;
236             </span><span class="jsdoc-var">s.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">){
237                 </span><span class="jsdoc-var">this.deselectRow</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ds.indexOfId</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r.id</span><span class="jsdoc-syntax">));
238             }, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
239             </span><span class="jsdoc-var">s.clear</span><span class="jsdoc-syntax">();
240         }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
241             </span><span class="jsdoc-var">this.selections.clear</span><span class="jsdoc-syntax">();
242         }
243         </span><span class="jsdoc-var">this.last </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
244     },
245
246
247     </span><span class="jsdoc-comment">/**
248      * Selects all rows.
249      */
250     </span><span class="jsdoc-var">selectAll </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
251         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.locked</span><span class="jsdoc-syntax">) </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
252         </span><span class="jsdoc-var">this.selections.clear</span><span class="jsdoc-syntax">();
253         </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">this.grid.dataSource.getCount</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">++){
254             </span><span class="jsdoc-var">this.selectRow</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
255         }
256     },
257
258     </span><span class="jsdoc-comment">/**
259      * Returns True if there is a selection.
260      * @return {Boolean}
261      */
262     </span><span class="jsdoc-var">hasSelection </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
263         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.selections.length </span><span class="jsdoc-syntax">&gt; 0;
264     },
265
266     </span><span class="jsdoc-comment">/**
267      * Returns True if the specified row is selected.
268      * @param {Number/Record} record The record or index of the record to check
269      * @return {Boolean}
270      */
271     </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">index</span><span class="jsdoc-syntax">){
272         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">r </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">index </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;number&quot; </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">this.grid.dataSource.getAt</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">) : </span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">;
273         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">this.selections.key</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r.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">);
274     },
275
276     </span><span class="jsdoc-comment">/**
277      * Returns True if the specified record id is selected.
278      * @param {String} id The id of record to check
279      * @return {Boolean}
280      */
281     </span><span class="jsdoc-var">isIdSelected </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">id</span><span class="jsdoc-syntax">){
282         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.selections.key</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">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">);
283     },
284
285     </span><span class="jsdoc-comment">// private
286     </span><span class="jsdoc-var">handleMouseDown </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">, </span><span class="jsdoc-var">t</span><span class="jsdoc-syntax">){
287         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">view </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.grid.getView</span><span class="jsdoc-syntax">(), </span><span class="jsdoc-var">rowIndex</span><span class="jsdoc-syntax">;
288         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.isLocked</span><span class="jsdoc-syntax">() || (</span><span class="jsdoc-var">rowIndex </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">view.findRowIndex</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">t</span><span class="jsdoc-syntax">)) === </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">){
289             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
290         };
291         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e.shiftKey </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">this.last </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">){
292             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">last </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.last</span><span class="jsdoc-syntax">;
293             </span><span class="jsdoc-var">this.selectRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">last</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">rowIndex</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">e.ctrlKey</span><span class="jsdoc-syntax">);
294             </span><span class="jsdoc-var">this.last </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">last</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// reset the last
295             </span><span class="jsdoc-var">view.focusRow</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">rowIndex</span><span class="jsdoc-syntax">);
296         }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
297             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">isSelected </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.isSelected</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">rowIndex</span><span class="jsdoc-syntax">);
298             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e.button </span><span class="jsdoc-syntax">!== 0 &amp;&amp; </span><span class="jsdoc-var">isSelected</span><span class="jsdoc-syntax">){
299                 </span><span class="jsdoc-var">view.focusRow</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">rowIndex</span><span class="jsdoc-syntax">);
300             }</span><span class="jsdoc-keyword">else 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">isSelected</span><span class="jsdoc-syntax">){
301                 </span><span class="jsdoc-var">this.deselectRow</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">rowIndex</span><span class="jsdoc-syntax">);
302             }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">isSelected</span><span class="jsdoc-syntax">){
303                 </span><span class="jsdoc-var">this.selectRow</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">rowIndex</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">e.button </span><span class="jsdoc-syntax">=== 0 &amp;&amp; (</span><span class="jsdoc-var">e.ctrlKey </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">e.shiftKey</span><span class="jsdoc-syntax">));
304                 </span><span class="jsdoc-var">view.focusRow</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">rowIndex</span><span class="jsdoc-syntax">);
305             }
306         }
307         </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;afterselectionchange&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
308     },
309     </span><span class="jsdoc-comment">// private
310     </span><span class="jsdoc-var">handleDragableRowClick </span><span class="jsdoc-syntax">:  </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">grid</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">rowIndex</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) 
311     {
312         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e.button </span><span class="jsdoc-syntax">=== 0 &amp;&amp; !</span><span class="jsdoc-var">e.shiftKey </span><span class="jsdoc-syntax">&amp;&amp; !</span><span class="jsdoc-var">e.ctrlKey</span><span class="jsdoc-syntax">) {
313             </span><span class="jsdoc-var">this.selectRow</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">rowIndex</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
314             </span><span class="jsdoc-var">grid.view.focusRow</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">rowIndex</span><span class="jsdoc-syntax">);
315              </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;afterselectionchange&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
316         }
317     },
318     
319     </span><span class="jsdoc-comment">/**
320      * Selects multiple rows.
321      * @param {Array} rows Array of the indexes of the row to select
322      * @param {Boolean} keepExisting (optional) True to keep existing selections
323      */
324     </span><span class="jsdoc-var">selectRows </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">rows</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">keepExisting</span><span class="jsdoc-syntax">){
325         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">keepExisting</span><span class="jsdoc-syntax">){
326             </span><span class="jsdoc-var">this.clearSelections</span><span class="jsdoc-syntax">();
327         }
328         </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">rows.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">++){
329             </span><span class="jsdoc-var">this.selectRow</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">rows</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">], </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
330         }
331     },
332
333     </span><span class="jsdoc-comment">/**
334      * Selects a range of rows. All rows in between startRow and endRow are also selected.
335      * @param {Number} startRow The index of the first row in the range
336      * @param {Number} endRow The index of the last row in the range
337      * @param {Boolean} keepExisting (optional) True to retain existing selections
338      */
339     </span><span class="jsdoc-var">selectRange </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">startRow</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">endRow</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">keepExisting</span><span class="jsdoc-syntax">){
340         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.locked</span><span class="jsdoc-syntax">) </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
341         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">keepExisting</span><span class="jsdoc-syntax">){
342             </span><span class="jsdoc-var">this.clearSelections</span><span class="jsdoc-syntax">();
343         }
344         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">startRow </span><span class="jsdoc-syntax">&lt;= </span><span class="jsdoc-var">endRow</span><span class="jsdoc-syntax">){
345             </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">= </span><span class="jsdoc-var">startRow</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">&lt;= </span><span class="jsdoc-var">endRow</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
346                 </span><span class="jsdoc-var">this.selectRow</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
347             }
348         }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
349             </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">= </span><span class="jsdoc-var">startRow</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">&gt;= </span><span class="jsdoc-var">endRow</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">--){
350                 </span><span class="jsdoc-var">this.selectRow</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
351             }
352         }
353     },
354
355     </span><span class="jsdoc-comment">/**
356      * Deselects a range of rows. All rows in between startRow and endRow are also deselected.
357      * @param {Number} startRow The index of the first row in the range
358      * @param {Number} endRow The index of the last row in the range
359      */
360     </span><span class="jsdoc-var">deselectRange </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">startRow</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">endRow</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">preventViewNotify</span><span class="jsdoc-syntax">){
361         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.locked</span><span class="jsdoc-syntax">) </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
362         </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">= </span><span class="jsdoc-var">startRow</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">&lt;= </span><span class="jsdoc-var">endRow</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
363             </span><span class="jsdoc-var">this.deselectRow</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">preventViewNotify</span><span class="jsdoc-syntax">);
364         }
365     },
366
367     </span><span class="jsdoc-comment">/**
368      * Selects a row.
369      * @param {Number} row The index of the row to select
370      * @param {Boolean} keepExisting (optional) True to keep existing selections
371      */
372     </span><span class="jsdoc-var">selectRow </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">keepExisting</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">preventViewNotify</span><span class="jsdoc-syntax">){
373         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.locked </span><span class="jsdoc-syntax">|| (</span><span class="jsdoc-var">index </span><span class="jsdoc-syntax">&lt; 0 || </span><span class="jsdoc-var">index </span><span class="jsdoc-syntax">&gt;= </span><span class="jsdoc-var">this.grid.dataSource.getCount</span><span class="jsdoc-syntax">())) </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
374         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;beforerowselect&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">keepExisting</span><span class="jsdoc-syntax">) !== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">){
375             </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-var">this.singleSelect</span><span class="jsdoc-syntax">){
376                 </span><span class="jsdoc-var">this.clearSelections</span><span class="jsdoc-syntax">();
377             }
378             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">r </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.grid.dataSource.getAt</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">);
379             </span><span class="jsdoc-var">this.selections.add</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">);
380             </span><span class="jsdoc-var">this.last </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.lastActive </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">;
381             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">preventViewNotify</span><span class="jsdoc-syntax">){
382                 </span><span class="jsdoc-var">this.grid.getView</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.onRowSelect</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">);
383             }
384             </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;rowselect&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">);
385             </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">);
386         }
387     },
388
389     </span><span class="jsdoc-comment">/**
390      * Deselects a row.
391      * @param {Number} row The index of the row to deselect
392      */
393     </span><span class="jsdoc-var">deselectRow </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">preventViewNotify</span><span class="jsdoc-syntax">){
394         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.locked</span><span class="jsdoc-syntax">) </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
395         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.last </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">){
396             </span><span class="jsdoc-var">this.last </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
397         }
398         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.lastActive </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">){
399             </span><span class="jsdoc-var">this.lastActive </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
400         }
401         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">r </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.grid.dataSource.getAt</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">);
402         </span><span class="jsdoc-var">this.selections.remove</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">);
403         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">preventViewNotify</span><span class="jsdoc-syntax">){
404             </span><span class="jsdoc-var">this.grid.getView</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.onRowDeselect</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">);
405         }
406         </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;rowdeselect&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">);
407         </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">);
408     },
409
410     </span><span class="jsdoc-comment">// private
411     </span><span class="jsdoc-var">restoreLast </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
412         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this._last</span><span class="jsdoc-syntax">){
413             </span><span class="jsdoc-var">this.last </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this._last</span><span class="jsdoc-syntax">;
414         }
415     },
416
417     </span><span class="jsdoc-comment">// private
418     </span><span class="jsdoc-var">acceptsNav </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">row</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">col</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">cm</span><span class="jsdoc-syntax">){
419         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">!</span><span class="jsdoc-var">cm.isHidden</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">col</span><span class="jsdoc-syntax">) &amp;&amp; </span><span class="jsdoc-var">cm.isCellEditable</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">col</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">row</span><span class="jsdoc-syntax">);
420     },
421
422     </span><span class="jsdoc-comment">// private
423     </span><span class="jsdoc-var">onEditorKey </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">field</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
424         </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">(), </span><span class="jsdoc-var">newCell</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">g </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.grid</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">ed </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">g.activeEditor</span><span class="jsdoc-syntax">;
425         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">k </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">e.TAB</span><span class="jsdoc-syntax">){
426             </span><span class="jsdoc-var">e.stopEvent</span><span class="jsdoc-syntax">();
427             </span><span class="jsdoc-var">ed.completeEdit</span><span class="jsdoc-syntax">();
428             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e.shiftKey</span><span class="jsdoc-syntax">){
429                 </span><span class="jsdoc-var">newCell </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">g.walkCells</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ed.row</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">ed.col</span><span class="jsdoc-syntax">-1, -1, </span><span class="jsdoc-var">this.acceptsNav</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
430             }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
431                 </span><span class="jsdoc-var">newCell </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">g.walkCells</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ed.row</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">ed.col</span><span class="jsdoc-syntax">+1, 1, </span><span class="jsdoc-var">this.acceptsNav</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
432             }
433         }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">k </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">e.ENTER </span><span class="jsdoc-syntax">&amp;&amp; !</span><span class="jsdoc-var">e.ctrlKey</span><span class="jsdoc-syntax">){
434             </span><span class="jsdoc-var">e.stopEvent</span><span class="jsdoc-syntax">();
435             </span><span class="jsdoc-var">ed.completeEdit</span><span class="jsdoc-syntax">();
436             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e.shiftKey</span><span class="jsdoc-syntax">){
437                 </span><span class="jsdoc-var">newCell </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">g.walkCells</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ed.row</span><span class="jsdoc-syntax">-1, </span><span class="jsdoc-var">ed.col</span><span class="jsdoc-syntax">, -1, </span><span class="jsdoc-var">this.acceptsNav</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
438             }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
439                 </span><span class="jsdoc-var">newCell </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">g.walkCells</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ed.row</span><span class="jsdoc-syntax">+1, </span><span class="jsdoc-var">ed.col</span><span class="jsdoc-syntax">, 1, </span><span class="jsdoc-var">this.acceptsNav</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
440             }
441         }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">k </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">e.ESC</span><span class="jsdoc-syntax">){
442             </span><span class="jsdoc-var">ed.cancelEdit</span><span class="jsdoc-syntax">();
443         }
444         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">newCell</span><span class="jsdoc-syntax">){
445             </span><span class="jsdoc-var">g.startEditing</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">newCell</span><span class="jsdoc-syntax">[0], </span><span class="jsdoc-var">newCell</span><span class="jsdoc-syntax">[1]);
446         }
447     }
448 });</span></code></body></html>