From 6f4de8b5a0318a16aaa85ee048e71bbc999ba30a Mon Sep 17 00:00:00 2001 From: Pine Wu Date: Tue, 4 Oct 2016 15:08:56 -0700 Subject: [PATCH] Remove isChildrenResolved from ITreeNode --- src/vs/vscode.d.ts | 1 - src/vs/workbench/api/node/extHostExplorers.ts | 2 +- .../workbench/api/node/mainThreadExplorers.ts | 3 ++- .../parts/explorers/browser/views/treeView.ts | 6 ++--- .../explorers/browser/views/treeViewer.ts | 24 ++++++++----------- .../parts/explorers/common/treeViewModel.ts | 23 +++++++++++------- 6 files changed, 30 insertions(+), 29 deletions(-) diff --git a/src/vs/vscode.d.ts b/src/vs/vscode.d.ts index 2f4b56a8a87..1fb1fea6d95 100644 --- a/src/vs/vscode.d.ts +++ b/src/vs/vscode.d.ts @@ -1357,7 +1357,6 @@ declare module 'vscode' { label: string; isExpanded: boolean; children: ITreeNode[]; - isChildrenResolved: boolean; } /** diff --git a/src/vs/workbench/api/node/extHostExplorers.ts b/src/vs/workbench/api/node/extHostExplorers.ts index 4cdd46858d6..fda9fc6ed4f 100644 --- a/src/vs/workbench/api/node/extHostExplorers.ts +++ b/src/vs/workbench/api/node/extHostExplorers.ts @@ -25,7 +25,7 @@ export class ExtHostExplorers extends ExtHostExplorersShape { this._treeContentProviders = Object.create(null); } - public registerTreeContentProvider(providerId: string, provider: vscode.TreeContentProvider): vscode.Disposable { + registerTreeContentProvider(providerId: string, provider: vscode.TreeContentProvider): vscode.Disposable { this._proxy.$registerTreeContentProvider(providerId); this._treeContentProviders[providerId] = provider; diff --git a/src/vs/workbench/api/node/mainThreadExplorers.ts b/src/vs/workbench/api/node/mainThreadExplorers.ts index 04e0c080600..3224c78c5bc 100644 --- a/src/vs/workbench/api/node/mainThreadExplorers.ts +++ b/src/vs/workbench/api/node/mainThreadExplorers.ts @@ -4,11 +4,12 @@ *--------------------------------------------------------------------------------------------*/ 'use strict'; -import { ITreeNode } from 'vscode'; +import {ITreeNode} from 'vscode'; import {TPromise} from 'vs/base/common/winjs.base'; import {IThreadService} from 'vs/workbench/services/thread/common/threadService'; import {ExtHostContext, MainThreadExplorersShape, ExtHostExplorersShape} from './extHost.protocol'; import {ITreeExplorerViewletService} from 'vs/workbench/parts/explorers/browser/treeExplorerViewletService'; +import {TreeViewNode} from 'vs/workbench/parts/explorers/common/treeViewModel'; export class MainThreadExplorers extends MainThreadExplorersShape { private _proxy: ExtHostExplorersShape; diff --git a/src/vs/workbench/parts/explorers/browser/views/treeView.ts b/src/vs/workbench/parts/explorers/browser/views/treeView.ts index fa83d67f709..9e4b8097c2d 100644 --- a/src/vs/workbench/parts/explorers/browser/views/treeView.ts +++ b/src/vs/workbench/parts/explorers/browser/views/treeView.ts @@ -68,9 +68,7 @@ export class TreeView extends CollapsibleViewletView { DOM.addClass(this.treeContainer, 'tree-explorer-viewlet-tree-view'); this.tree = this.createViewer($(this.treeContainer)); - this.treeExplorerViewletService.provideTreeContent('pineTree').then(tree => { - this.tree.setInput(tree); - }); + this.updateInput(); } getActions(): IAction[] { @@ -109,7 +107,7 @@ export class TreeView extends CollapsibleViewletView { private updateInput(): TPromise { return this.treeExplorerViewletService.provideTreeContent('pineTree').then(tree => { - this.tree.setInput(tree); + this.tree.setInput(TreeViewNode.create(tree)); }) } diff --git a/src/vs/workbench/parts/explorers/browser/views/treeViewer.ts b/src/vs/workbench/parts/explorers/browser/views/treeViewer.ts index 248cf0a75a1..86adaed917c 100644 --- a/src/vs/workbench/parts/explorers/browser/views/treeViewer.ts +++ b/src/vs/workbench/parts/explorers/browser/views/treeViewer.ts @@ -26,25 +26,21 @@ export class TreeDataSource implements IDataSource { } - public getId(tree: ITree, node: vscode.ITreeNode): string { - return node.label; + getId(tree: ITree, node: TreeViewNode): string { + return node.id.toString(); } - public hasChildren(tree: ITree, node: vscode.ITreeNode): boolean { - if (node.isChildrenResolved) { - return node.children && node.children.length > 0; - } else { - return true; - } + hasChildren(tree: ITree, node: TreeViewNode): boolean { + return node.hasChildren; } - public getChildren(tree: ITree, node: vscode.ITreeNode): TPromise { + getChildren(tree: ITree, node: TreeViewNode): TPromise { if (node.isChildrenResolved) { return TPromise.as(node.children); } else { return this.treeExplorerViewletService.resolveChildren(providerId, node).then(children => { children.forEach(child => { - node.children.push(child); + node.children.push(TreeViewNode.create(child)); }); node.isChildrenResolved = true; return node.children; @@ -52,7 +48,7 @@ export class TreeDataSource implements IDataSource { } } - public getParent(tree: ITree, node: TreeViewNode): TPromise { + getParent(tree: ITree, node: TreeViewNode): TPromise { return TPromise.as(null); } } @@ -73,11 +69,11 @@ export class TreeRenderer extends ActionsRenderer implements IRenderer { }); } - public getContentHeight(tree: ITree, element: any): number { + getContentHeight(tree: ITree, element: any): number { return 22; } - public renderContents(tree: ITree, node: TreeViewNode, domElement: HTMLElement, previousCleanupFn: IElementCallback): IElementCallback { + renderContents(tree: ITree, node: TreeViewNode, domElement: HTMLElement, previousCleanupFn: IElementCallback): IElementCallback { const el = $(domElement).clearChildren(); const item = $('.custom-viewlet-tree-node-item'); item.appendTo(el); @@ -100,7 +96,7 @@ export class TreeController extends DefaultController { // super({ clickBehavior: ClickBehavior.ON_MOUSE_UP /* do not change to not break DND */ }); } - public onLeftClick(tree: ITree, node: TreeViewNode, event: IMouseEvent, origin: string = 'mouse'): boolean { + onLeftClick(tree: ITree, node: TreeViewNode, event: IMouseEvent, origin: string = 'mouse'): boolean { super.onLeftClick(tree, node, event, origin); return true; diff --git a/src/vs/workbench/parts/explorers/common/treeViewModel.ts b/src/vs/workbench/parts/explorers/common/treeViewModel.ts index 0457c25afcd..56d5ba3497d 100644 --- a/src/vs/workbench/parts/explorers/common/treeViewModel.ts +++ b/src/vs/workbench/parts/explorers/common/treeViewModel.ts @@ -1,15 +1,22 @@ -export class TreeViewNode implements vscode.ITreeNode { +import { ITreeNode } from 'vscode'; + +export class TreeViewNode implements ITreeNode { + static idCounter = 1; + + id: number; + hasChildren: boolean = true; + isChildrenResolved: boolean = false; + constructor( - public id: number, public label: string, public isExpanded: boolean = true, - public parent: TreeViewNode = null, - public children: TreeViewNode[] = [], - public isChildrenResolved: boolean = true) { + public children: TreeViewNode[] = [] + ) { + this.id = TreeViewNode.idCounter++; } - addChild(child: TreeViewNode) { - this.children.push(child); - child.parent = this; + public static create(node: ITreeNode): TreeViewNode { + const children = node.children.map(TreeViewNode.create); + return new TreeViewNode(node.label, node.isExpanded, children) } }