| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // require: list_selection_model.js | 5 // require: list_selection_model.js |
| 6 // require: list_selection_controller.js | 6 // require: list_selection_controller.js |
| 7 // require: list.js | 7 // require: list.js |
| 8 | 8 |
| 9 /** | 9 /** |
| 10 * @fileoverview This implements a grid control. Grid contains a bunch of | 10 * @fileoverview This implements a grid control. Grid contains a bunch of |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 columns_: 0, | 62 columns_: 0, |
| 63 | 63 |
| 64 /** | 64 /** |
| 65 * Function used to create grid items. | 65 * Function used to create grid items. |
| 66 * @type {function(): !GridItem} | 66 * @type {function(): !GridItem} |
| 67 * @override | 67 * @override |
| 68 */ | 68 */ |
| 69 itemConstructor_: GridItem, | 69 itemConstructor_: GridItem, |
| 70 | 70 |
| 71 /** | 71 /** |
| 72 * In the case of multiple columns lead item must have the same height | 72 * Whether or not the rows on list have various heights. |
| 73 * as a regular item. | 73 * Shows a warning at the setter because cr.ui.Grid does not support this. |
| 74 * @type {number} | 74 * @type {boolean} |
| 75 * @override | |
| 76 */ | 75 */ |
| 77 get leadItemHeight() { | 76 get fixedHeight() { |
| 78 return this.getItemHeight_(); | 77 return true; |
| 79 }, | 78 }, |
| 80 set leadItemHeight(height) { | 79 set fixedHeight(fixedHeight) { |
| 81 // Lead item height cannot be set. | 80 if (!fixedHeight) |
| 81 console.warn('cr.ui.Grid does not support fixedHeight = false'); |
| 82 }, | 82 }, |
| 83 | 83 |
| 84 /** | 84 /** |
| 85 * @return {number} The number of columns determined by width of the grid | 85 * @return {number} The number of columns determined by width of the grid |
| 86 * and width of the items. | 86 * and width of the items. |
| 87 * @private | 87 * @private |
| 88 */ | 88 */ |
| 89 getColumnCount_: function() { | 89 getColumnCount_: function() { |
| 90 var size = this.getItemSize_(); | 90 var size = this.getDefaultItemSize_(); |
| 91 var width = size.width + size.marginHorizontal; // Uncollapse margin. | 91 var width = size.width + size.marginHorizontal; // Uncollapse margin. |
| 92 return width ? Math.floor(this.clientWidth / width) : 0; | 92 return width ? Math.floor(this.clientWidth / width) : 0; |
| 93 }, | 93 }, |
| 94 | 94 |
| 95 /** | 95 /** |
| 96 * The number of columns in the grid. If not set, determined automatically | 96 * The number of columns in the grid. If not set, determined automatically |
| 97 * as the maximum number of items fitting in the grid width. | 97 * as the maximum number of items fitting in the grid width. |
| 98 * @type {number} | 98 * @type {number} |
| 99 */ | 99 */ |
| 100 get columns() { | 100 get columns() { |
| 101 if (!this.columns_) { | 101 if (!this.columns_) { |
| 102 this.columns_ = this.getColumnCount_(); | 102 this.columns_ = this.getColumnCount_(); |
| 103 } | 103 } |
| 104 return this.columns_ || 1; | 104 return this.columns_ || 1; |
| 105 }, | 105 }, |
| 106 set columns(value) { | 106 set columns(value) { |
| 107 if (value >= 0 && value != this.columns_) { | 107 if (value >= 0 && value != this.columns_) { |
| 108 this.columns_ = value; | 108 this.columns_ = value; |
| 109 this.redraw(); | 109 this.redraw(); |
| 110 } | 110 } |
| 111 }, | 111 }, |
| 112 | 112 |
| 113 /** | 113 /** |
| 114 * @param {number} index The index of the item. | 114 * @param {number} index The index of the item. |
| 115 * @return {number} The top position of the item inside the list, not taking | 115 * @return {number} The top position of the item inside the list, not taking |
| 116 * into account lead item. May vary in the case of multiple columns. | 116 * into account lead item. May vary in the case of multiple columns. |
| 117 * @override | 117 * @override |
| 118 */ | 118 */ |
| 119 getItemTop: function(index) { | 119 getItemTop: function(index) { |
| 120 return Math.floor(index / this.columns) * this.getItemHeight_(); | 120 return Math.floor(index / this.columns) * this.getDefaultItemHeight_(); |
| 121 }, | 121 }, |
| 122 | 122 |
| 123 /** | 123 /** |
| 124 * @param {number} index The index of the item. | 124 * @param {number} index The index of the item. |
| 125 * @return {number} The row of the item. May vary in the case | 125 * @return {number} The row of the item. May vary in the case |
| 126 * of multiple columns. | 126 * of multiple columns. |
| 127 * @override | 127 * @override |
| 128 */ | 128 */ |
| 129 getItemRow: function(index) { | 129 getItemRow: function(index) { |
| 130 return Math.floor(index / this.columns); | 130 return Math.floor(index / this.columns); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 144 * @param {cr.ui.ListSelectionModel} sm The underlying selection model. | 144 * @param {cr.ui.ListSelectionModel} sm The underlying selection model. |
| 145 * @return {!cr.ui.ListSelectionController} The newly created selection | 145 * @return {!cr.ui.ListSelectionController} The newly created selection |
| 146 * controller. | 146 * controller. |
| 147 * @override | 147 * @override |
| 148 */ | 148 */ |
| 149 createSelectionController: function(sm) { | 149 createSelectionController: function(sm) { |
| 150 return new GridSelectionController(sm, this); | 150 return new GridSelectionController(sm, this); |
| 151 }, | 151 }, |
| 152 | 152 |
| 153 /** | 153 /** |
| 154 * Calculates the number of items fitting in viewport given the index of | 154 * Calculates the number of items fitting in the given viewport. |
| 155 * first item and heights. | |
| 156 * @param {number} itemHeight The height of the item. | |
| 157 * @param {number} firstIndex Index of the first item in viewport. | |
| 158 * @param {number} scrollTop The scroll top position. | 155 * @param {number} scrollTop The scroll top position. |
| 159 * @return {number} The number of items in view port. | 156 * @param {number} clientHeight The height of viewport. |
| 157 * @return {{first: number, length: number, last: number}} The index of |
| 158 * first item in view port, The number of items, The item past the last. |
| 160 * @override | 159 * @override |
| 161 */ | 160 */ |
| 162 getItemsInViewPort: function(itemHeight, firstIndex, scrollTop) { | 161 getItemsInViewPort: function(scrollTop, clientHeight) { |
| 162 var itemHeight = this.getDefaultItemHeight_(); |
| 163 var firstIndex = |
| 164 this.autoExpands ? 0 : this.getIndexForListOffset_(scrollTop); |
| 163 var columns = this.columns; | 165 var columns = this.columns; |
| 164 var clientHeight = this.clientHeight; | |
| 165 var count = this.autoExpands_ ? this.dataModel.length : Math.max( | 166 var count = this.autoExpands_ ? this.dataModel.length : Math.max( |
| 166 columns * (Math.ceil(clientHeight / itemHeight) + 1), | 167 columns * (Math.ceil(clientHeight / itemHeight) + 1), |
| 167 this.countItemsInRange_(firstIndex, scrollTop + clientHeight)); | 168 this.countItemsInRange_(firstIndex, scrollTop + clientHeight)); |
| 168 count = columns * Math.ceil(count / columns); | 169 count = columns * Math.ceil(count / columns); |
| 169 count = Math.min(count, this.dataModel.length - firstIndex); | 170 count = Math.min(count, this.dataModel.length - firstIndex); |
| 170 return count; | 171 return count; |
| 171 }, | 172 }, |
| 172 | 173 |
| 173 /** | 174 /** |
| 174 * Adds items to the list and {@code newCachedItems}. | 175 * Adds items to the list and {@code newCachedItems}. |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 291 return index + 1; | 292 return index + 1; |
| 292 } | 293 } |
| 293 }; | 294 }; |
| 294 | 295 |
| 295 return { | 296 return { |
| 296 Grid: Grid, | 297 Grid: Grid, |
| 297 GridItem: GridItem, | 298 GridItem: GridItem, |
| 298 GridSelectionController: GridSelectionController | 299 GridSelectionController: GridSelectionController |
| 299 } | 300 } |
| 300 }); | 301 }); |
| OLD | NEW |