/*--------------------------------------------------------------------------------------------- * 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'; 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 revealedCount: number; 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; }