|
| 1 | +/*--------------------------------------------------------------------------------------------- |
| 2 | + * Copyright (c) Microsoft Corporation. All rights reserved. |
| 3 | + * Licensed under the MIT License. See License.txt in the project root for license information. |
| 4 | + *--------------------------------------------------------------------------------------------*/ |
| 5 | + |
| 6 | +import { Iterator, ISequence } from 'vs/base/common/iterator'; |
| 7 | +import { AbstractTree, IAbstractTreeOptions } from 'vs/base/browser/ui/tree/abstractTree'; |
| 8 | +import { ISpliceable } from 'vs/base/common/sequence'; |
| 9 | +import { ITreeNode, ITreeModel, ITreeElement, ITreeRenderer, ITreeSorter, ICollapseStateChangeEvent } from 'vs/base/browser/ui/tree/tree'; |
| 10 | +import { IListVirtualDelegate } from 'vs/base/browser/ui/list/list'; |
| 11 | +import { Event } from 'vs/base/common/event'; |
| 12 | +import { ICompressedTreeNode, CompressedObjectTreeModel } from 'vs/base/browser/ui/tree/compressedObjectTreeModel'; |
| 13 | + |
| 14 | +export interface ICompressedObjectTreeOptions<T, TFilterData = void> extends IAbstractTreeOptions<ICompressedTreeNode<T>, TFilterData> { |
| 15 | + sorter?: ITreeSorter<ICompressedTreeNode<T>>; |
| 16 | +} |
| 17 | + |
| 18 | +export class CompressedObjectTree<T extends NonNullable<any>, TFilterData = void> extends AbstractTree<ICompressedTreeNode<T> | null, TFilterData, T | null> { |
| 19 | + |
| 20 | + protected model: CompressedObjectTreeModel<T, TFilterData>; |
| 21 | + |
| 22 | + get onDidChangeCollapseState(): Event<ICollapseStateChangeEvent<ICompressedTreeNode<T>, TFilterData>> { return this.model.onDidChangeCollapseState; } |
| 23 | + |
| 24 | + constructor( |
| 25 | + container: HTMLElement, |
| 26 | + delegate: IListVirtualDelegate<ICompressedTreeNode<T>>, |
| 27 | + renderers: ITreeRenderer<any /* TODO@joao */, TFilterData, any>[], |
| 28 | + options: ICompressedObjectTreeOptions<T, TFilterData> = {} |
| 29 | + ) { |
| 30 | + super(container, delegate, renderers, options); |
| 31 | + } |
| 32 | + |
| 33 | + setChildren( |
| 34 | + element: T | null, |
| 35 | + children?: ISequence<ITreeElement<T>>, |
| 36 | + onDidCreateNode?: (node: ITreeNode<ICompressedTreeNode<T>, TFilterData>) => void, |
| 37 | + onDidDeleteNode?: (node: ITreeNode<ICompressedTreeNode<T>, TFilterData>) => void |
| 38 | + ): Iterator<ITreeElement<T | null>> { |
| 39 | + return this.model.setChildren(element, children, onDidCreateNode, onDidDeleteNode); |
| 40 | + } |
| 41 | + |
| 42 | + rerender(element?: T): void { |
| 43 | + if (element === undefined) { |
| 44 | + this.view.rerender(); |
| 45 | + return; |
| 46 | + } |
| 47 | + |
| 48 | + this.model.rerender(element); |
| 49 | + } |
| 50 | + |
| 51 | + resort(element: T, recursive = true): void { |
| 52 | + this.model.resort(element, recursive); |
| 53 | + } |
| 54 | + |
| 55 | + protected createModel(view: ISpliceable<ITreeNode<ICompressedTreeNode<T>, TFilterData>>, options: ICompressedObjectTreeOptions<T, TFilterData>): ITreeModel<ICompressedTreeNode<T> | null, TFilterData, T | null> { |
| 56 | + return new CompressedObjectTreeModel(view, options); |
| 57 | + } |
| 58 | +} |
0 commit comments