Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(583)

Unified Diff: third_party/WebKit/Source/devtools/front_end/ui_lazy/FilteredListWidget.js

Issue 2592433003: [DevTools] Replace ViewportControl with ListControl. (Closed)
Patch Set: different api Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/devtools/front_end/ui_lazy/FilteredListWidget.js
diff --git a/third_party/WebKit/Source/devtools/front_end/ui_lazy/FilteredListWidget.js b/third_party/WebKit/Source/devtools/front_end/ui_lazy/FilteredListWidget.js
index 7cb25afe43d69abeea683fee6793bab7e874db82..80e158c603c3ed858dfb1bd8a2362f8cfbcf41bb 100644
--- a/third_party/WebKit/Source/devtools/front_end/ui_lazy/FilteredListWidget.js
+++ b/third_party/WebKit/Source/devtools/front_end/ui_lazy/FilteredListWidget.js
@@ -4,7 +4,6 @@
* found in the LICENSE file.
*/
/**
- * @implements {UI.ViewportControl.Provider}
* @unrestricted
*/
UI.FilteredListWidget = class extends UI.VBox {
@@ -35,9 +34,11 @@ UI.FilteredListWidget = class extends UI.VBox {
this._progressElement = this.contentElement.createChild('div', 'filtered-list-widget-progress');
this._progressBarElement = this._progressElement.createChild('div', 'filtered-list-widget-progress-bar');
+ /** @type {!Array<number>} */
this._filteredItems = [];
- this._viewportControl = new UI.ViewportControl(this);
- this._itemElementsContainer = this._viewportControl.element;
+ /** @type {!UI.ViewportControl<{index: number}>} */
+ this._viewport = new UI.ViewportControl(this._createItemElement.bind(this));
+ this._itemElementsContainer = this._viewport.element;
this._itemElementsContainer.classList.add('container');
this._itemElementsContainer.addEventListener('click', this._onClick.bind(this), false);
this.contentElement.appendChild(this._itemElementsContainer);
@@ -48,10 +49,6 @@ UI.FilteredListWidget = class extends UI.VBox {
this._delegate.setRefreshCallback(this._itemsLoaded.bind(this));
this._itemsLoaded();
this._updateShowMatchingItems();
- this._viewportControl.refresh();
-
- /** @typedef {!Array.<!Element>} */
- this._elements = [];
}
/**
@@ -92,6 +89,7 @@ UI.FilteredListWidget = class extends UI.VBox {
* @override
*/
willHide() {
+ this._rowHeight = 0;
this._delegate.dispose();
if (this._filterTimer)
clearTimeout(this._filterTimer);
@@ -111,7 +109,8 @@ UI.FilteredListWidget = class extends UI.VBox {
// Detach dialog before allowing delegate to override focus.
if (this._dialog)
this._dialog.detach();
- this._delegate.selectItemWithQuery(selectedIndex, this._value());
+ if (selectedIndex !== null)
+ this._delegate.selectItemWithQuery(selectedIndex, this._value());
}
_itemsLoaded() {
@@ -126,10 +125,11 @@ UI.FilteredListWidget = class extends UI.VBox {
}
/**
- * @param {number} index
+ * @param {{index: number}} item
* @return {!Element}
*/
- _createItemElement(index) {
+ _createItemElement(item) {
+ var index = item.index;
var itemElement = createElement('div');
itemElement.className = 'filtered-list-widget-item ' + (this._renderAsTwoRows ? 'two-rows' : 'one-row');
itemElement._titleElement = itemElement.createChild('div', 'filtered-list-widget-title');
@@ -269,9 +269,15 @@ UI.FilteredListWidget = class extends UI.VBox {
break;
}
}
- this._elements = [];
- this._viewportControl.refresh();
- this._updateSelection(this._selectedIndexInFiltered, false);
+ var items = new Array(this._filteredItems.length);
+ for (var i = 0; i < this._filteredItems.length; i++)
+ items[i] = {index: this._filteredItems[i]};
+ this._viewport.replaceAllItems(items);
+ if (!this._rowHeight && this._viewport.length()) {
+ this._rowHeight = UI.measurePreferredSize(this._viewport.elementAtIndex(0), this._itemElementsContainer).height;
+ this._viewport.setFixedHeight(this._rowHeight);
+ }
+ this._updateSelection(this._selectedIndexInFiltered);
this._itemsFilteredForTest();
}
@@ -296,7 +302,7 @@ UI.FilteredListWidget = class extends UI.VBox {
* @return {number}
*/
_rowsPerViewport() {
- return Math.floor(this._viewportControl.element.clientHeight / this._rowHeight);
+ return this._rowHeight ? Math.floor(this._viewport.element.clientHeight / this._rowHeight) : 0;
}
_onKeyDown(event) {
@@ -306,23 +312,23 @@ UI.FilteredListWidget = class extends UI.VBox {
case UI.KeyboardShortcut.Keys.Down.code:
if (++newSelectedIndex >= this._filteredItems.length)
newSelectedIndex = 0;
- this._updateSelection(newSelectedIndex, true);
+ this._updateSelection(newSelectedIndex);
event.consume(true);
break;
case UI.KeyboardShortcut.Keys.Up.code:
if (--newSelectedIndex < 0)
newSelectedIndex = this._filteredItems.length - 1;
- this._updateSelection(newSelectedIndex, false);
+ this._updateSelection(newSelectedIndex);
event.consume(true);
break;
case UI.KeyboardShortcut.Keys.PageDown.code:
newSelectedIndex = Math.min(newSelectedIndex + this._rowsPerViewport(), this._filteredItems.length - 1);
- this._updateSelection(newSelectedIndex, true);
+ this._updateSelection(newSelectedIndex);
event.consume(true);
break;
case UI.KeyboardShortcut.Keys.PageUp.code:
newSelectedIndex = Math.max(newSelectedIndex - this._rowsPerViewport(), 0);
- this._updateSelection(newSelectedIndex, false);
+ this._updateSelection(newSelectedIndex);
event.consume(true);
break;
case UI.KeyboardShortcut.Keys.Enter.code:
@@ -343,16 +349,15 @@ UI.FilteredListWidget = class extends UI.VBox {
/**
* @param {number} index
- * @param {boolean} makeLast
*/
- _updateSelection(index, makeLast) {
+ _updateSelection(index) {
if (!this._filteredItems.length)
return;
if (this._selectedElement)
this._selectedElement.classList.remove('selected');
- this._viewportControl.scrollItemIntoView(index, makeLast);
+ this._viewport.scrollItemAtIndexIntoView(index);
this._selectedIndexInFiltered = index;
- this._selectedElement = this._elements[index];
+ this._selectedElement = this._viewport.elementAtIndex(index);
if (this._selectedElement)
this._selectedElement.classList.add('selected');
}
@@ -367,39 +372,6 @@ UI.FilteredListWidget = class extends UI.VBox {
this._dialog.detach();
this._delegate.selectItemWithQuery(itemElement._index, this._value());
}
-
- /**
- * @override
- * @return {number}
- */
- itemCount() {
- return this._filteredItems.length;
- }
-
- /**
- * @override
- * @param {number} index
- * @return {number}
- */
- fastItemHeight(index) {
- if (!this._rowHeight) {
- var delegateIndex = this._filteredItems[index];
- var element = this._createItemElement(delegateIndex);
- this._rowHeight = UI.measurePreferredSize(element, this._itemElementsContainer).height;
- }
- return this._rowHeight;
- }
-
- /**
- * @override
- * @param {number} index
- * @return {!Element}
- */
- itemElement(index) {
- if (!this._elements[index])
- this._elements[index] = this._createItemElement(this._filteredItems[index]);
- return this._elements[index];
- }
};

Powered by Google App Engine
This is Rietveld 408576698