/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { Iterator, ISequence } from 'vs/base/common/iterator'; import { AbstractTree, IAbstractTreeOptions } from 'vs/base/browser/ui/tree/abstractTree'; import { ISpliceable } from 'vs/base/common/sequence'; import { ITreeNode, ITreeModel, ITreeElement, ITreeRenderer, ITreeSorter, ICollapseStateChangeEvent } from 'vs/base/browser/ui/tree/tree'; import { IListVirtualDelegate } from 'vs/base/browser/ui/list/list'; import { Event } from 'vs/base/common/event'; import { CompressedTreeModel, ICompressedTreeNode } from 'vs/base/browser/ui/tree/compressedObjectTreeModel'; export interface IObjectTreeOptions extends IAbstractTreeOptions { sorter?: ITreeSorter; } export class CompressedObjectTree, TFilterData = void> extends AbstractTree | null, TFilterData, T | null> { protected model!: CompressedTreeModel; get onDidChangeCollapseState(): Event | null, TFilterData>> { return this.model.onDidChangeCollapseState; } constructor( container: HTMLElement, delegate: IListVirtualDelegate>, renderers: ITreeRenderer, TFilterData, any>[], options: IObjectTreeOptions, TFilterData> = {} ) { super(container, delegate, renderers, options); } setChildren( element: T | null, children?: ISequence> ): Iterator> { return this.model.setChildren(element, children); } rerender(element?: T): void { if (element === undefined) { this.view.rerender(); return; } this.model.rerender(element); } resort(element: T, recursive = true): void { this.model.resort(element, recursive); } protected createModel(view: ISpliceable, TFilterData>>, options: IObjectTreeOptions, TFilterData>): ITreeModel | null, TFilterData, T | null> { return new CompressedTreeModel(view, options); } }