OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 /** | |
6 * @fileoverview This is a multiple selection model for table | |
7 */ | |
8 cr.define('cr.ui.table', function() { | |
9 const ListSelectionModel = cr.ui.ListSelectionModel; | |
10 | |
11 /** | |
12 * Creates a new selection model that is to be used with tables. | |
13 * This implementation supports multiple selection. | |
14 * Selected items are stored, not indexes, so selections are preserved | |
15 * after items reordering (e.g. because of sort). | |
16 * @param {number=} opt_length The number of items in the selection. | |
17 * @constructor | |
18 * @extends {!cr.EventTarget} | |
19 */ | |
20 function TableSelectionModel(opt_length) { | |
21 ListSelectionModel.apply(this, arguments); | |
22 } | |
23 | |
24 TableSelectionModel.prototype = { | |
25 __proto__: ListSelectionModel.prototype, | |
26 | |
27 | |
28 /** | |
29 * Adjusts the selection after reordering of items in the table. | |
30 * @param {!Array.<number>} permutation The reordering permutation. | |
31 */ | |
32 adjustToReordering: function(permutation) { | |
33 var oldLeadIndex = this.leadIndex; | |
34 | |
35 var oldSelectedIndexes = this.selectedIndexes; | |
36 this.selectedIndexes = oldSelectedIndexes.map(function(oldIndex) { | |
37 return permutation[oldIndex]; | |
38 }).filter(function(index) { | |
39 return index != -1; | |
40 }); | |
41 | |
42 if (oldLeadIndex != -1) | |
43 this.leadIndex = permutation[oldLeadIndex]; | |
44 }, | |
45 | |
46 /** | |
47 * Adjust the selection by adding or removing a certain numbers of items. | |
48 * This should be called by the owner of the selection model as items are | |
49 * added and removed from the underlying data model. | |
50 * This implementation updates selection model length only. The actual | |
51 * selected indexes changes are processed in adjustToReordering. | |
52 * @param {number} index The index of the first change. | |
53 * @param {number} itemsRemoved Number of items removed. | |
54 * @param {number} itemsAdded Number of items added. | |
55 */ | |
56 adjust: function(index, itemsRemoved, itemsAdded) { | |
57 ListSelectionModel.prototype.adjust.call( | |
58 this, this.length, itemsRemoved, itemsAdded); | |
59 } | |
60 }; | |
61 | |
62 return { | |
63 TableSelectionModel: TableSelectionModel | |
64 }; | |
65 }); | |
OLD | NEW |