tree: first sketch

This commit is contained in:
Joao Moreno
2018-06-23 17:54:26 +02:00
parent 51d3769600
commit ad7de10b2b

View File

@@ -0,0 +1,50 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { IDisposable } from 'vs/base/common/lifecycle';
import { IListOptions, List } from 'vs/base/browser/ui/list/listWidget';
import { TreeModel, ITreeListElement, ITreeElement } from 'vs/base/browser/ui/tree/treeModel';
import { IIterator, empty } from 'vs/base/common/iterator';
import { IDelegate, IRenderer } from 'vs/base/browser/ui/list/list';
export interface ITreeOptions<T> extends IListOptions<T> { }
const DefaultOptions: ITreeOptions<any> = {
keyboardSupport: true,
mouseSupport: true,
multipleSelectionSupport: true
};
// export type IDelegate<T> = IListDelegate<ITreeListElement<T>>;
// export type IRenderer<T, TTemplateData> = IListRenderer<ITreeListElement<T>, TTemplateData>;
export class Tree<T> implements IDisposable {
private list: List<ITreeListElement<T>>;
private model: TreeModel<T>;
constructor(
container: HTMLElement,
delegate: IDelegate<T>,
renderers: IRenderer<T, any>[],
options: ITreeOptions<T> = DefaultOptions
) {
// TODO map provided args into these
const listDelegate: IDelegate<ITreeListElement<T>> = undefined;
const listRenderers: IRenderer<ITreeListElement<T>, any>[] = [];
const listOptions: ITreeOptions<ITreeListElement<T>> = undefined;
this.list = new List(container, listDelegate, listRenderers, listOptions);
this.model = new TreeModel<T>(this.list);
}
splice(location: number[], deleteCount: number, toInsert: IIterator<ITreeElement<T>> = empty()): IIterator<ITreeElement<T>> {
return this.model.splice(location, deleteCount, toInsert);
}
dispose(): void {
this.list.dispose();
}
}