/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { Event } from 'vs/base/common/event'; import { Iterator } from 'vs/base/common/iterator'; import { IRenderer } from 'vs/base/browser/ui/list/list'; export const enum TreeVisibility { Hidden, Visible, Recurse // TODO@joao come up with a better name } export interface ITreeFilterDataResult { visibility: boolean | TreeVisibility; data: TFilterData; } export type TreeFilterResult = boolean | TreeVisibility | ITreeFilterDataResult; export interface ITreeFilter { filter(element: T): TreeFilterResult; } export interface ITreeOptions { filter?: ITreeFilter; } export interface ITreeElement { readonly element: T; readonly children?: Iterator> | ITreeElement[]; readonly collapsible?: boolean; readonly collapsed?: boolean; } export interface ITreeNode { readonly parent: ITreeNode | undefined; readonly element: T; readonly children: ITreeNode[]; readonly depth: number; readonly collapsible: boolean; readonly collapsed: boolean; readonly renderNodeCount: number; readonly visible: boolean; readonly filterData: TFilterData | undefined; } export interface ITreeModel { readonly onDidChangeCollapseState: Event>; getListIndex(ref: TRef): number; setCollapsed(ref: TRef, collapsed: boolean): boolean; toggleCollapsed(ref: TRef): void; isCollapsed(ref: TRef): boolean; refilter(): void; getNodeLocation(node: ITreeNode): TRef; getParentNodeLocation(location: TRef): TRef | null; getParentElement(location: TRef): T | null; getFirstElementChild(location: TRef): T | null; getLastElementAncestor(location: TRef): T | null; } export interface ITreeRenderElement { readonly element: T; readonly filterData: TFilterData | undefined; } export interface ITreeRenderer extends IRenderer, TTemplateData> { renderTwistie?(element: T, twistieElement: HTMLElement): boolean; onDidChangeTwistieState?: Event; }