Skip to content

Commit 8dae1e2

Browse files
committed
list: IVirtualDelegate
1 parent b95486d commit 8dae1e2

18 files changed

Lines changed: 49 additions & 45 deletions

File tree

src/vs/base/browser/ui/list/list.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import { GestureEvent } from 'vs/base/browser/touch';
77

8-
export interface IDelegate<T> {
8+
export interface IVirtualDelegate<T> {
99
getHeight(element: T): number;
1010
getTemplateId(element: T): string;
1111
}

src/vs/base/browser/ui/list/listPaging.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import 'vs/css!./list';
77
import { IDisposable } from 'vs/base/common/lifecycle';
88
import { range } from 'vs/base/common/arrays';
9-
import { IDelegate, IRenderer, IListEvent, IListOpenEvent } from './list';
9+
import { IVirtualDelegate, IRenderer, IListEvent, IListOpenEvent } from './list';
1010
import { List, IListStyles, IListOptions } from './listWidget';
1111
import { IPagedModel } from 'vs/base/common/paging';
1212
import { Event, mapEvent } from 'vs/base/common/event';
@@ -69,12 +69,12 @@ export class PagedList<T> implements IDisposable {
6969

7070
constructor(
7171
container: HTMLElement,
72-
delegate: IDelegate<number>,
72+
virtualDelegate: IVirtualDelegate<number>,
7373
renderers: IPagedRenderer<T, any>[],
7474
options: IListOptions<any> = {}
7575
) {
7676
const pagedRenderers = renderers.map(r => new PagedRenderer<T, ITemplateData<T>>(r, () => this.model));
77-
this.list = new List(container, delegate, pagedRenderers, options);
77+
this.list = new List(container, virtualDelegate, pagedRenderers, options);
7878
}
7979

8080
getHTMLElement(): HTMLElement {

src/vs/base/browser/ui/list/listView.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { domEvent } from 'vs/base/browser/event';
1212
import { ScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement';
1313
import { ScrollEvent, ScrollbarVisibility } from 'vs/base/common/scrollable';
1414
import { RangeMap, IRange, relativeComplement, intersect, shift } from './rangeMap';
15-
import { IDelegate, IRenderer, IListMouseEvent, IListTouchEvent, IListGestureEvent } from './list';
15+
import { IVirtualDelegate, IRenderer, IListMouseEvent, IListTouchEvent, IListGestureEvent } from './list';
1616
import { RowCache, IRow } from './rowCache';
1717
import { isWindows } from 'vs/base/common/platform';
1818
import * as browser from 'vs/base/browser/browser';
@@ -72,7 +72,7 @@ export class ListView<T> implements ISpliceable<T>, IDisposable {
7272

7373
constructor(
7474
container: HTMLElement,
75-
private delegate: IDelegate<T>,
75+
private virtualDelegate: IVirtualDelegate<T>,
7676
renderers: IRenderer<T, any>[],
7777
options: IListViewOptions = DefaultOptions
7878
) {
@@ -156,8 +156,8 @@ export class ListView<T> implements ISpliceable<T>, IDisposable {
156156
const inserted = elements.map<IItem<T>>(element => ({
157157
id: String(this.itemId++),
158158
element,
159-
size: this.delegate.getHeight(element),
160-
templateId: this.delegate.getTemplateId(element),
159+
size: this.virtualDelegate.getHeight(element),
160+
templateId: this.virtualDelegate.getTemplateId(element),
161161
row: null
162162
}));
163163

src/vs/base/browser/ui/list/listWidget.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { KeyCode } from 'vs/base/common/keyCodes';
1515
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
1616
import { Event, Emitter, EventBufferer, chain, mapEvent, anyEvent } from 'vs/base/common/event';
1717
import { domEvent } from 'vs/base/browser/event';
18-
import { IDelegate, IRenderer, IListEvent, IListContextMenuEvent, IListMouseEvent, IListTouchEvent, IListGestureEvent, IListOpenEvent } from './list';
18+
import { IVirtualDelegate, IRenderer, IListEvent, IListContextMenuEvent, IListMouseEvent, IListTouchEvent, IListGestureEvent, IListOpenEvent } from './list';
1919
import { ListView, IListViewOptions } from './listView';
2020
import { Color } from 'vs/base/common/color';
2121
import { mixin } from 'vs/base/common/objects';
@@ -883,7 +883,7 @@ export class List<T> implements ISpliceable<T>, IDisposable {
883883

884884
constructor(
885885
container: HTMLElement,
886-
delegate: IDelegate<T>,
886+
virtualDelegate: IVirtualDelegate<T>,
887887
renderers: IRenderer<T, any>[],
888888
options: IListOptions<T> = DefaultOptions
889889
) {
@@ -894,7 +894,7 @@ export class List<T> implements ISpliceable<T>, IDisposable {
894894

895895
renderers = renderers.map(r => new PipelineRenderer(r.templateId, [this.focus.renderer, this.selection.renderer, r]));
896896

897-
this.view = new ListView(container, delegate, renderers, options);
897+
this.view = new ListView(container, virtualDelegate, renderers, options);
898898
this.view.domNode.setAttribute('role', 'tree');
899899
DOM.addClass(this.view.domNode, this.idPrefix);
900900
this.view.domNode.tabIndex = 0;

src/vs/base/browser/ui/selectBox/selectBoxCustom.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import * as dom from 'vs/base/browser/dom';
1414
import * as arrays from 'vs/base/common/arrays';
1515
import { IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview';
1616
import { List } from 'vs/base/browser/ui/list/listWidget';
17-
import { IDelegate, IRenderer } from 'vs/base/browser/ui/list/list';
17+
import { IVirtualDelegate, IRenderer } from 'vs/base/browser/ui/list/list';
1818
import { domEvent } from 'vs/base/browser/event';
1919
import { ScrollbarVisibility } from 'vs/base/common/scrollable';
2020
import { ISelectBoxDelegate, ISelectBoxOptions, ISelectBoxStyles, ISelectData } from 'vs/base/browser/ui/selectBox/selectBox';
@@ -76,7 +76,7 @@ class SelectListRenderer implements IRenderer<ISelectOptionItem, ISelectListTemp
7676
}
7777
}
7878

79-
export class SelectBoxList implements ISelectBoxDelegate, IDelegate<ISelectOptionItem> {
79+
export class SelectBoxList implements ISelectBoxDelegate, IVirtualDelegate<ISelectOptionItem> {
8080

8181
private static readonly DEFAULT_DROPDOWN_MINIMUM_BOTTOM_MARGIN = 32;
8282

src/vs/base/browser/ui/tree/tree.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
import 'vs/css!./tree';
77
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
88
import { IListOptions, List, IIdentityProvider, IMultipleSelectionController } from 'vs/base/browser/ui/list/listWidget';
9-
import { TreeModel, ITreeNode, ITreeElement, getNodeLocation } from 'vs/base/browser/ui/tree/treeModel';
9+
import { TreeModel, ITreeNode, ITreeElement, getNodeLocation, ISequence } from 'vs/base/browser/ui/tree/treeModel';
1010
import { IIterator, empty } from 'vs/base/common/iterator';
11-
import { IDelegate, IRenderer, IListMouseEvent } from 'vs/base/browser/ui/list/list';
11+
import { IVirtualDelegate, IRenderer, IListMouseEvent } from 'vs/base/browser/ui/list/list';
1212
import { append, $ } from 'vs/base/browser/dom';
1313
import { Event, Relay, chain } from 'vs/base/common/event';
1414
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
@@ -45,9 +45,9 @@ function toTreeListOptions<T>(options?: IListOptions<T>): IListOptions<ITreeNode
4545
};
4646
}
4747

48-
class TreeDelegate<T> implements IDelegate<ITreeNode<T>> {
48+
class TreeDelegate<T> implements IVirtualDelegate<ITreeNode<T>> {
4949

50-
constructor(private delegate: IDelegate<T>) { }
50+
constructor(private delegate: IVirtualDelegate<T>) { }
5151

5252
getHeight(element: ITreeNode<T>): number {
5353
return this.delegate.getHeight(element.element);
@@ -131,6 +131,8 @@ function isInputElement(e: HTMLElement): boolean {
131131
return e.tagName === 'INPUT' || e.tagName === 'TEXTAREA';
132132
}
133133

134+
export interface ITreeOptions<T> extends IListOptions<T> { }
135+
134136
export class Tree<T> implements IDisposable {
135137

136138
private view: List<ITreeNode<T>>;
@@ -139,9 +141,9 @@ export class Tree<T> implements IDisposable {
139141

140142
constructor(
141143
container: HTMLElement,
142-
delegate: IDelegate<T>,
144+
delegate: IVirtualDelegate<T>,
143145
renderers: IRenderer<T, any>[],
144-
options?: IListOptions<T>
146+
options?: ITreeOptions<T>
145147
) {
146148
const treeDelegate = new TreeDelegate(delegate);
147149

@@ -166,7 +168,7 @@ export class Tree<T> implements IDisposable {
166168
onKeyDown.filter(e => e.keyCode === KeyCode.Space).on(this.onSpace, this, this.disposables);
167169
}
168170

169-
splice(location: number[], deleteCount: number, toInsert: IIterator<ITreeElement<T>> = empty()): IIterator<ITreeElement<T>> {
171+
splice(location: number[], deleteCount: number, toInsert: ISequence<ITreeElement<T>> = empty()): IIterator<ITreeElement<T>> {
170172
return this.model.splice(location, deleteCount, toInsert);
171173
}
172174

src/vs/base/browser/ui/tree/treeModel.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ export function getNodeLocation<T>(node: ITreeNode<T>): number[] {
9696
return location.reverse();
9797
}
9898

99+
export type ISequence<T> = IIterator<T> | T[];
100+
99101
export class TreeModel<T> {
100102

101103
private root: IMutableTreeNode<T> = {
@@ -113,7 +115,7 @@ export class TreeModel<T> {
113115

114116
constructor(private list: ISpliceable<ITreeNode<T>>) { }
115117

116-
splice(location: number[], deleteCount: number, toInsert?: IIterator<ITreeElement<T>> | ITreeElement<T>[]): IIterator<ITreeElement<T>> {
118+
splice(location: number[], deleteCount: number, toInsert?: ISequence<ITreeElement<T>>): IIterator<ITreeElement<T>> {
117119
if (location.length === 0) {
118120
throw new Error('Invalid tree location');
119121
}

src/vs/base/test/browser/ui/list/listView.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import * as assert from 'assert';
77
import { ListView } from 'vs/base/browser/ui/list/listView';
8-
import { IDelegate, IRenderer } from 'vs/base/browser/ui/list/list';
8+
import { IVirtualDelegate, IRenderer } from 'vs/base/browser/ui/list/list';
99
import { range } from 'vs/base/common/arrays';
1010

1111
suite('ListView', function () {
@@ -14,7 +14,7 @@ suite('ListView', function () {
1414
element.style.height = '200px';
1515
element.style.width = '200px';
1616

17-
const delegate: IDelegate<number> = {
17+
const delegate: IVirtualDelegate<number> = {
1818
getHeight() { return 20; },
1919
getTemplateId() { return 'template'; }
2020
};

src/vs/editor/contrib/suggest/suggestWidget.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { onUnexpectedError } from 'vs/base/common/errors';
1414
import { IDisposable, dispose, toDisposable } from 'vs/base/common/lifecycle';
1515
import { addClass, append, $, hide, removeClass, show, toggleClass, getDomNodePagePosition, hasClass } from 'vs/base/browser/dom';
1616
import { HighlightedLabel } from 'vs/base/browser/ui/highlightedlabel/highlightedLabel';
17-
import { IDelegate, IListEvent, IRenderer } from 'vs/base/browser/ui/list/list';
17+
import { IVirtualDelegate, IListEvent, IRenderer } from 'vs/base/browser/ui/list/list';
1818
import { List } from 'vs/base/browser/ui/list/listWidget';
1919
import { DomScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement';
2020
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
@@ -352,7 +352,7 @@ export interface ISelectedSuggestion {
352352
model: CompletionModel;
353353
}
354354

355-
export class SuggestWidget implements IContentWidget, IDelegate<ICompletionItem>, IDisposable {
355+
export class SuggestWidget implements IContentWidget, IVirtualDelegate<ICompletionItem>, IDisposable {
356356

357357
private static readonly ID: string = 'editor.widget.suggestWidget';
358358

src/vs/platform/list/browser/listService.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { createDecorator, IInstantiationService } from 'vs/platform/instantiatio
1010
import { IDisposable, toDisposable, combinedDisposable, dispose, Disposable } from 'vs/base/common/lifecycle';
1111
import { IContextKeyService, IContextKey, RawContextKey, ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
1212
import { PagedList, IPagedRenderer } from 'vs/base/browser/ui/list/listPaging';
13-
import { IDelegate, IRenderer, IListMouseEvent, IListTouchEvent } from 'vs/base/browser/ui/list/list';
13+
import { IVirtualDelegate, IRenderer, IListMouseEvent, IListTouchEvent } from 'vs/base/browser/ui/list/list';
1414
import { Tree } from 'vs/base/parts/tree/browser/treeImpl';
1515
import { attachListStyler, defaultListStyles, computeStyles } from 'vs/platform/theme/common/styler';
1616
import { IThemeService } from 'vs/platform/theme/common/themeService';
@@ -208,7 +208,7 @@ export class WorkbenchList<T> extends List<T> {
208208

209209
constructor(
210210
container: HTMLElement,
211-
delegate: IDelegate<T>,
211+
delegate: IVirtualDelegate<T>,
212212
renderers: IRenderer<T, any>[],
213213
options: IListOptions<T>,
214214
@IContextKeyService contextKeyService: IContextKeyService,
@@ -279,7 +279,7 @@ export class WorkbenchPagedList<T> extends PagedList<T> {
279279

280280
constructor(
281281
container: HTMLElement,
282-
delegate: IDelegate<number>,
282+
delegate: IVirtualDelegate<number>,
283283
renderers: IPagedRenderer<T, any>[],
284284
options: IListOptions<T>,
285285
@IContextKeyService contextKeyService: IContextKeyService,

0 commit comments

Comments
 (0)