Home | History | Annotate | Download | only in table
      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 single selection model for table
      7  */
      8 cr.define('cr.ui.table', function() {
      9   const ListSingleSelectionModel = cr.ui.ListSingleSelectionModel;
     10 
     11   /**
     12    * Creates a new selection model that is to be used with tables.
     13    * This implementation supports single selection.
     14    * Selected item is stored, not index, so selection is 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 TableSingleSelectionModel(opt_length) {
     21     ListSingleSelectionModel.apply(this, arguments);
     22   }
     23 
     24   TableSingleSelectionModel.prototype = {
     25     __proto__: ListSingleSelectionModel.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       if (this.leadIndex != -1)
     34         this.leadIndex = permutation[this.leadIndex];
     35 
     36       var oldSelectedIndex = this.selectedIndex;
     37       if (oldSelectedIndex != -1) {
     38         this.selectedIndex = permutation[oldSelectedIndex];
     39       }
     40     },
     41 
     42     /**
     43      * Adjust the selection by adding or removing a certain numbers of items.
     44      * This should be called by the owner of the selection model as items are
     45      * added and removed from the underlying data model.
     46      * @param {number} index The index of the first change.
     47      * @param {number} itemsRemoved Number of items removed.
     48      * @param {number} itemsAdded Number of items added.
     49      */
     50     adjust: function(index, itemsRemoved, itemsAdded) {
     51       ListSingleSelectionModel.prototype.adjust.call(
     52           this, this.length, itemsRemoved, itemsAdded);
     53     }
     54   };
     55 
     56   return {
     57     TableSingleSelectionModel: TableSingleSelectionModel
     58   };
     59 });
     60