mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-08 09:08:48 +01:00
list: disposeElement
This commit is contained in:
@@ -14,7 +14,7 @@ export interface IRenderer<TElement, TTemplateData> {
|
||||
templateId: string;
|
||||
renderTemplate(container: HTMLElement): TTemplateData;
|
||||
renderElement(element: TElement, index: number, templateData: TTemplateData): void;
|
||||
disposeElement?(element: TElement, index: number, templateData: TTemplateData): void;
|
||||
disposeElement(element: TElement, index: number, templateData: TTemplateData): void;
|
||||
disposeTemplate(templateData: TTemplateData): void;
|
||||
}
|
||||
|
||||
|
||||
@@ -50,6 +50,10 @@ class PagedRenderer<TElement, TTemplateData> implements IRenderer<number, ITempl
|
||||
promise.done(entry => this.renderer.renderElement(entry, index, data.data));
|
||||
}
|
||||
|
||||
disposeElement(): void {
|
||||
// noop
|
||||
}
|
||||
|
||||
disposeTemplate(data: ITemplateData<TTemplateData>): void {
|
||||
data.disposable.dispose();
|
||||
data.disposable = null;
|
||||
|
||||
@@ -68,6 +68,10 @@ class TraitRenderer<T> implements IRenderer<T, ITraitTemplateData>
|
||||
this.trait.renderIndex(index, templateData);
|
||||
}
|
||||
|
||||
disposeElement(): void {
|
||||
// noop
|
||||
}
|
||||
|
||||
splice(start: number, deleteCount: number, insertCount: number): void {
|
||||
const rendered: IRenderedContainer[] = [];
|
||||
|
||||
@@ -807,6 +811,14 @@ class PipelineRenderer<T> implements IRenderer<T, any> {
|
||||
}
|
||||
}
|
||||
|
||||
disposeElement(element: T, index: number, templateData: any[]): void {
|
||||
let i = 0;
|
||||
|
||||
for (const renderer of this.renderers) {
|
||||
renderer.disposeElement(element, index, templateData[i++]);
|
||||
}
|
||||
}
|
||||
|
||||
disposeTemplate(templateData: any[]): void {
|
||||
let i = 0;
|
||||
|
||||
|
||||
@@ -67,6 +67,10 @@ class SelectListRenderer implements IRenderer<ISelectOptionItem, ISelectListTemp
|
||||
}
|
||||
}
|
||||
|
||||
disposeElement(): void {
|
||||
// noop
|
||||
}
|
||||
|
||||
disposeTemplate(templateData: ISelectListTemplateData): void {
|
||||
templateData.disposables = dispose(templateData.disposables);
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import 'vs/css!./tree';
|
||||
import { IDisposable, dispose, Disposable, toDisposable } from 'vs/base/common/lifecycle';
|
||||
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
|
||||
import { IListOptions, List, IIdentityProvider, IMultipleSelectionController } from 'vs/base/browser/ui/list/listWidget';
|
||||
import { TreeModel, ITreeNode, ITreeElement, getNodeLocation } from 'vs/base/browser/ui/tree/treeModel';
|
||||
import { IIterator, empty } from 'vs/base/common/iterator';
|
||||
@@ -60,7 +60,6 @@ class TreeDelegate<T> implements IDelegate<ITreeNode<T>> {
|
||||
|
||||
interface ITreeListTemplateData<T> {
|
||||
twistie: HTMLElement;
|
||||
elementDisposable: IDisposable;
|
||||
templateData: T;
|
||||
}
|
||||
|
||||
@@ -92,14 +91,11 @@ class TreeRenderer<T, TTemplateData> implements IRenderer<ITreeNode<T>, ITreeLis
|
||||
const contents = append(el, $('.tl-contents'));
|
||||
const templateData = this.renderer.renderTemplate(contents);
|
||||
|
||||
return { twistie, elementDisposable: Disposable.None, templateData };
|
||||
return { twistie, templateData };
|
||||
}
|
||||
|
||||
renderElement(node: ITreeNode<T>, index: number, templateData: ITreeListTemplateData<TTemplateData>): void {
|
||||
templateData.elementDisposable.dispose();
|
||||
|
||||
this.renderedNodes.set(node, templateData);
|
||||
templateData.elementDisposable = toDisposable(() => this.renderedNodes.delete(node));
|
||||
|
||||
templateData.twistie.style.width = `${10 + node.depth * 10}px`;
|
||||
renderTwistie(node, templateData.twistie);
|
||||
@@ -107,6 +103,10 @@ class TreeRenderer<T, TTemplateData> implements IRenderer<ITreeNode<T>, ITreeLis
|
||||
this.renderer.renderElement(node.element, index, templateData.templateData);
|
||||
}
|
||||
|
||||
disposeElement(node: ITreeNode<T>): void {
|
||||
this.renderedNodes.delete(node);
|
||||
}
|
||||
|
||||
disposeTemplate(templateData: ITreeListTemplateData<TTemplateData>): void {
|
||||
this.renderer.disposeTemplate(templateData.templateData);
|
||||
}
|
||||
|
||||
@@ -165,6 +165,8 @@ export class TreeModel<T> {
|
||||
node.collapsed = collapsed;
|
||||
|
||||
if (visible) {
|
||||
this._onDidChangeCollapseState.fire(node);
|
||||
|
||||
let visibleCountDiff: number;
|
||||
|
||||
if (collapsed) {
|
||||
@@ -185,8 +187,6 @@ export class TreeModel<T> {
|
||||
mutableNode.visibleCount += visibleCountDiff;
|
||||
mutableNode = mutableNode.parent;
|
||||
}
|
||||
|
||||
this._onDidChangeCollapseState.fire(node);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -25,6 +25,7 @@ suite('ListView', function () {
|
||||
templateId: 'template',
|
||||
renderTemplate() { templatesCount++; },
|
||||
renderElement() { },
|
||||
disposeElement() { },
|
||||
disposeTemplate() { templatesCount--; }
|
||||
};
|
||||
|
||||
|
||||
@@ -173,7 +173,10 @@ class Renderer implements IRenderer<ICompletionItem, ISuggestionTemplateData> {
|
||||
data.readMore.onmousedown = null;
|
||||
data.readMore.onclick = null;
|
||||
}
|
||||
}
|
||||
|
||||
disposeElement(): void {
|
||||
// noop
|
||||
}
|
||||
|
||||
disposeTemplate(templateData: ISuggestionTemplateData): void {
|
||||
|
||||
@@ -278,6 +278,10 @@ export class NotificationRenderer implements IRenderer<INotificationViewItem, IN
|
||||
data.renderer.setInput(notification);
|
||||
}
|
||||
|
||||
disposeElement(): void {
|
||||
// noop
|
||||
}
|
||||
|
||||
disposeTemplate(templateData: INotificationTemplateData): void {
|
||||
templateData.toDispose = dispose(templateData.toDispose);
|
||||
}
|
||||
|
||||
@@ -127,6 +127,10 @@ class ListElementRenderer implements IRenderer<ListElement, IListElementTemplate
|
||||
data.detail.set(element.item.detail, detailHighlights);
|
||||
}
|
||||
|
||||
disposeElement(): void {
|
||||
// noop
|
||||
}
|
||||
|
||||
disposeTemplate(data: IListElementTemplateData): void {
|
||||
data.toDisposeElement = dispose(data.toDisposeElement);
|
||||
data.toDisposeTemplate = dispose(data.toDisposeTemplate);
|
||||
|
||||
@@ -338,6 +338,10 @@ class BreakpointsRenderer implements IRenderer<IBreakpoint, IBreakpointTemplateD
|
||||
}
|
||||
}
|
||||
|
||||
disposeElement(): void {
|
||||
// noop
|
||||
}
|
||||
|
||||
disposeTemplate(templateData: IBreakpointTemplateData): void {
|
||||
dispose(templateData.toDispose);
|
||||
}
|
||||
@@ -383,6 +387,10 @@ class ExceptionBreakpointsRenderer implements IRenderer<IExceptionBreakpoint, IB
|
||||
data.checkbox.checked = exceptionBreakpoint.enabled;
|
||||
}
|
||||
|
||||
disposeElement(): void {
|
||||
// noop
|
||||
}
|
||||
|
||||
disposeTemplate(templateData: IBaseBreakpointTemplateData): void {
|
||||
dispose(templateData.toDispose);
|
||||
}
|
||||
@@ -440,6 +448,10 @@ class FunctionBreakpointsRenderer implements IRenderer<FunctionBreakpoint, IBase
|
||||
}
|
||||
}
|
||||
|
||||
disposeElement(): void {
|
||||
// noop
|
||||
}
|
||||
|
||||
disposeTemplate(templateData: IBaseBreakpointWithIconTemplateData): void {
|
||||
dispose(templateData.toDispose);
|
||||
}
|
||||
@@ -511,6 +523,10 @@ class FunctionBreakpointInputRenderer implements IRenderer<IFunctionBreakpoint,
|
||||
data.inputBox.select();
|
||||
}
|
||||
|
||||
disposeElement(): void {
|
||||
// noop
|
||||
}
|
||||
|
||||
disposeTemplate(templateData: IInputTemplateData): void {
|
||||
dispose(templateData.toDispose);
|
||||
}
|
||||
|
||||
@@ -194,6 +194,10 @@ export class Renderer implements IPagedRenderer<IExtension, ITemplateData> {
|
||||
});
|
||||
}
|
||||
|
||||
disposeElement(): void {
|
||||
// noop
|
||||
}
|
||||
|
||||
private updateRecommendationStatus(extension: IExtension, data: ITemplateData) {
|
||||
const extRecommendations = this.extensionTipsService.getAllRecommendationsWithReason();
|
||||
let ariaLabel = extension.displayName + '. ';
|
||||
|
||||
@@ -369,6 +369,8 @@ export class RuntimeExtensionsEditor extends BaseEditor {
|
||||
}
|
||||
},
|
||||
|
||||
disposeElement: () => null,
|
||||
|
||||
disposeTemplate: (data: IRuntimeExtensionTemplateData): void => {
|
||||
data.disposables = dispose(data.disposables);
|
||||
}
|
||||
|
||||
@@ -594,6 +594,10 @@ class EditorGroupRenderer implements IRenderer<IEditorGroup, IEditorGroupTemplat
|
||||
templateData.actionBar.context = { groupId: editorGroup.id };
|
||||
}
|
||||
|
||||
disposeElement(): void {
|
||||
// noop
|
||||
}
|
||||
|
||||
disposeTemplate(templateData: IEditorGroupTemplateData): void {
|
||||
templateData.actionBar.dispose();
|
||||
dispose(templateData.toDispose);
|
||||
@@ -690,6 +694,10 @@ class OpenEditorRenderer implements IRenderer<OpenEditor, IOpenEditorTemplateDat
|
||||
});
|
||||
}
|
||||
|
||||
disposeElement(): void {
|
||||
// noop
|
||||
}
|
||||
|
||||
disposeTemplate(templateData: IOpenEditorTemplateData): void {
|
||||
templateData.actionBar.dispose();
|
||||
templateData.root.dispose();
|
||||
|
||||
@@ -667,6 +667,9 @@ class KeybindingHeaderRenderer implements IRenderer<IListEntry, any> {
|
||||
renderElement(entry: IListEntry, index: number, template: any): void {
|
||||
}
|
||||
|
||||
disposeElement(): void {
|
||||
}
|
||||
|
||||
disposeTemplate(template: any): void {
|
||||
}
|
||||
}
|
||||
@@ -704,6 +707,8 @@ class KeybindingItemRenderer implements IRenderer<IKeybindingItemEntry, Keybindi
|
||||
template.when.render(keybindingEntry);
|
||||
}
|
||||
|
||||
disposeElement(): void { }
|
||||
|
||||
disposeTemplate(template: KeybindingItemTemplate): void {
|
||||
template.actions.dispose();
|
||||
}
|
||||
|
||||
@@ -190,6 +190,10 @@ class ProviderRenderer implements IRenderer<ISCMRepository, RepositoryTemplateDa
|
||||
templateData.disposable = combinedDisposable(disposables);
|
||||
}
|
||||
|
||||
disposeElement(): void {
|
||||
// noop
|
||||
}
|
||||
|
||||
disposeTemplate(templateData: RepositoryTemplateData): void {
|
||||
templateData.disposable.dispose();
|
||||
templateData.templateDisposable.dispose();
|
||||
@@ -437,6 +441,10 @@ class ResourceGroupRenderer implements IRenderer<ISCMResourceGroup, ResourceGrou
|
||||
template.elementDisposable = combinedDisposable(disposables);
|
||||
}
|
||||
|
||||
disposeElement(): void {
|
||||
// noop
|
||||
}
|
||||
|
||||
disposeTemplate(template: ResourceGroupTemplate): void {
|
||||
template.dispose();
|
||||
}
|
||||
@@ -557,6 +565,10 @@ class ResourceRenderer implements IRenderer<ISCMResource, ResourceTemplate> {
|
||||
template.elementDisposable = combinedDisposable(disposables);
|
||||
}
|
||||
|
||||
disposeElement(): void {
|
||||
// noop
|
||||
}
|
||||
|
||||
disposeTemplate(template: ResourceTemplate): void {
|
||||
template.elementDisposable.dispose();
|
||||
template.dispose();
|
||||
|
||||
Reference in New Issue
Block a user