diff --git a/src/vs/vscode.d.ts b/src/vs/vscode.d.ts index 5a6b8b380f889543c31ea3988289c478eb6806ad..abcd0673d32ec644b3e700f36abd095e13900f11 100644 --- a/src/vs/vscode.d.ts +++ b/src/vs/vscode.d.ts @@ -1391,7 +1391,7 @@ declare module 'vscode' { getLabel?(node: T): string; /** - * Determine if `node` has children and is expandable. Default to return `true` if not provided. + * Determine if `node` has children and is expandable. Default to `true` if not provided. * * @param node The node to determine if it has children and is expandable. * @return A boolean that determines if `node` has children and is expandable. diff --git a/src/vs/workbench/api/node/extHostTreeExplorers.ts b/src/vs/workbench/api/node/extHostTreeExplorers.ts index 53a903c16d8b65629447c577985fe953c65d7332..2ea83e6242637a545d2e06f79bfa2619d6ba9631 100644 --- a/src/vs/workbench/api/node/extHostTreeExplorers.ts +++ b/src/vs/workbench/api/node/extHostTreeExplorers.ts @@ -38,6 +38,7 @@ export class ExtHostTreeExplorers extends ExtHostTreeExplorersShape { return new Disposable(() => { delete this._treeExplorerNodeProviders[providerId]; + delete this._treeExplorerNodeProviders[providerId]; }); } diff --git a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts index f4832b277650bd6931e3b7e868b7e500fc14200b..52502d758f3312f30f53d099fec36f3bf621d7cd 100644 --- a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts +++ b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts @@ -97,7 +97,7 @@ export class ActivitybarPart extends Part implements IActivityService { } } - getIsEnabledForRegisteredViewlets(): { [viewletId: string]: boolean } { + public getIsEnabledForRegisteredViewlets(): { [viewletId: string]: boolean } { const result = {}; for (let viewletId in this.registeredViewlets) { result[viewletId] = (this.enabledExternalViewlets.indexOf(viewletId) !== -1); @@ -105,7 +105,7 @@ export class ActivitybarPart extends Part implements IActivityService { return result; } - toggleViewlet(viewletId: string): void { + public toggleViewlet(viewletId: string): void { const index = this.enabledExternalViewlets.indexOf(viewletId); if (index === -1) { this.enabledExternalViewlets.push(viewletId); @@ -140,7 +140,7 @@ export class ActivitybarPart extends Part implements IActivityService { const $result = $('.content').appendTo($el); // Top Actionbar with action items for each viewlet action - this.createViewletSwitcher($result.clone().addClass('position-top')); + this.createViewletSwitcher($result.clone()); return $result; } @@ -235,7 +235,7 @@ class ViewletActivityAction extends ActivityAction { private lastRun: number = 0; private _onOpenExternalViewlet = new Emitter(); - get onOpenExternalViewlet(): Event { return this._onOpenExternalViewlet.event; }; + public get onOpenExternalViewlet(): Event { return this._onOpenExternalViewlet.event; }; constructor( id: string, diff --git a/src/vs/workbench/parts/explorers/browser/treeExplorerActions.contribution.ts b/src/vs/workbench/parts/explorers/browser/treeExplorerActions.contribution.ts index 07b2dc48f0a4b3451f5cd528b1dfb44cea73efb9..69d366500446b3d6dcc22711ae48c0c5dee6fa88 100644 --- a/src/vs/workbench/parts/explorers/browser/treeExplorerActions.contribution.ts +++ b/src/vs/workbench/parts/explorers/browser/treeExplorerActions.contribution.ts @@ -29,13 +29,13 @@ export class ToggleExternalViewletAction extends Action { } run(): TPromise { - const viewletsToggleStataus = this.activityService.getIsEnabledForRegisteredViewlets(); + const isEnabledForRegisteredViewlets = this.activityService.getIsEnabledForRegisteredViewlets(); const picks: IPickOpenEntry[] = []; - for (let viewletId in viewletsToggleStataus) { + for (let viewletId in isEnabledForRegisteredViewlets) { picks.push({ id: viewletId, - label: (viewletsToggleStataus[viewletId] ? 'Disable ' : 'Enable ') + this.getShortViewletId(viewletId) + label: (isEnabledForRegisteredViewlets[viewletId] ? 'Disable ' : 'Enable ') + this.getShortViewletId(viewletId) }); } diff --git a/src/vs/workbench/parts/explorers/browser/treeExplorerActions.ts b/src/vs/workbench/parts/explorers/browser/treeExplorerActions.ts index 7a59b318bd0deeb3282e388953c8cbe7e2f04296..2d2128b050dab723d143e34c3907b2d3c97c6d1c 100644 --- a/src/vs/workbench/parts/explorers/browser/treeExplorerActions.ts +++ b/src/vs/workbench/parts/explorers/browser/treeExplorerActions.ts @@ -17,4 +17,4 @@ export class RefreshViewExplorerAction extends Action { return TPromise.as(null); }); } -} \ No newline at end of file +} diff --git a/src/vs/workbench/parts/explorers/browser/treeExplorerViewlet.ts b/src/vs/workbench/parts/explorers/browser/treeExplorerViewlet.ts index 2ef048e54dfb1b934eb6f80055ad1b08eb74912e..5bac532fec414ad059095ab11a6f291608ff93b9 100644 --- a/src/vs/workbench/parts/explorers/browser/treeExplorerViewlet.ts +++ b/src/vs/workbench/parts/explorers/browser/treeExplorerViewlet.ts @@ -42,30 +42,30 @@ export class TreeExplorerViewlet extends Viewlet { TreeExplorerViewlet._idCounter++; } - getId(): string { + public getId(): string { return this.externalViewletId; } - create(parent: Builder): TPromise { + public create(parent: Builder): TPromise { super.create(parent); - this.viewletContainer = parent.div().addClass('custom-tree-explorer-viewlet'); + this.viewletContainer = parent.div(); this.addTreeView(); return TPromise.as(null); } - layout(dimension: Dimension): void { + public layout(dimension: Dimension): void { this.view.layout(dimension.height, Orientation.VERTICAL); } - setVisible(visible: boolean): TPromise { + public setVisible(visible: boolean): TPromise { return super.setVisible(visible).then(() => { this.view.setVisible(visible).done(); }); } - getActions(): IAction[] { + public getActions(): IAction[] { return this.view.getActions(); } @@ -82,7 +82,7 @@ export class TreeExplorerViewlet extends Viewlet { return tokens[tokens.length - 1]; } - dispose(): void { + public dispose(): void { this.view = null; } } diff --git a/src/vs/workbench/parts/explorers/browser/treeExplorerViewletService.ts b/src/vs/workbench/parts/explorers/browser/treeExplorerViewletService.ts index 8970f95934c49ad791aa80941f0f7e9b7f145ac0..531c7185d384569cd113fedfd5073273ee7b956e 100644 --- a/src/vs/workbench/parts/explorers/browser/treeExplorerViewletService.ts +++ b/src/vs/workbench/parts/explorers/browser/treeExplorerViewletService.ts @@ -29,7 +29,7 @@ export class TreeExplorerViewletService implements ITreeExplorerViewletService { public _serviceBrand: any; private _onTreeExplorerNodeProviderRegistered = new Emitter(); - get onTreeExplorerNodeProviderRegistered(): Event { return this._onTreeExplorerNodeProviderRegistered.event; }; + public get onTreeExplorerNodeProviderRegistered(): Event { return this._onTreeExplorerNodeProviderRegistered.event; }; private _treeExplorerNodeProviders: { [providerId: string]: InternalTreeExplorerNodeProvider }; @@ -40,26 +40,26 @@ export class TreeExplorerViewletService implements ITreeExplorerViewletService { this._treeExplorerNodeProviders = Object.create(null); } - registerTreeExplorerNodeProvider(providerId: string, provider: InternalTreeExplorerNodeProvider): void { + public registerTreeExplorerNodeProvider(providerId: string, provider: InternalTreeExplorerNodeProvider): void { this._treeExplorerNodeProviders[providerId] = provider; this._onTreeExplorerNodeProviderRegistered.fire(providerId); } - hasProvider(providerId: string): boolean { + public hasProvider(providerId: string): boolean { return !!this._treeExplorerNodeProviders[providerId]; } - provideRootNode(providerId: string): TPromise { + public provideRootNode(providerId: string): TPromise { const provider = this.getProvider(providerId); return TPromise.wrap(provider.provideRootNode()); } - resolveChildren(providerId: string, node: InternalTreeExplorerNode): TPromise { + public resolveChildren(providerId: string, node: InternalTreeExplorerNode): TPromise { const provider = this.getProvider(providerId); return TPromise.wrap(provider.resolveChildren(node)); } - executeCommand(providerId: string, node: InternalTreeExplorerNode): TPromise { + public executeCommand(providerId: string, node: InternalTreeExplorerNode): TPromise { const provider = this.getProvider(providerId); return TPromise.wrap(provider.executeCommand(node)); } diff --git a/src/vs/workbench/parts/explorers/browser/views/treeExplorerView.ts b/src/vs/workbench/parts/explorers/browser/views/treeExplorerView.ts index 102722f3282d8f02efe3dd5e99a454db9d6dccb1..d4c7d632573a664e97121b142868ddfc2215a7cf 100644 --- a/src/vs/workbench/parts/explorers/browser/views/treeExplorerView.ts +++ b/src/vs/workbench/parts/explorers/browser/views/treeExplorerView.ts @@ -93,7 +93,12 @@ export class TreeExplorerView extends CollapsibleViewletView { return this.treeExplorerViewletService.provideRootNode(this.treeNodeProviderId).then(tree => { this.tree.setInput(tree); }); - } else { + } + // Provider registration happens independently of the reading of extension's contribution, + // which constructs the viewlet, so it's possible the viewlet is constructed before a provider + // is registered. + // This renders the viewlet first and wait for a corresponding provider is registered. + else { this.treeExplorerViewletService.onTreeExplorerNodeProviderRegistered(providerId => { if (this.treeNodeProviderId === providerId) { return this.treeExplorerViewletService.provideRootNode(this.treeNodeProviderId).then(tree => { diff --git a/src/vs/workbench/parts/explorers/browser/views/treeExplorerViewer.ts b/src/vs/workbench/parts/explorers/browser/views/treeExplorerViewer.ts index 707323e0aae3c019b2b992f0c0fb3352fdb1bf35..345c470c1eb3736c6f09e46a35b5c70babe8259e 100644 --- a/src/vs/workbench/parts/explorers/browser/views/treeExplorerViewer.ts +++ b/src/vs/workbench/parts/explorers/browser/views/treeExplorerViewer.ts @@ -29,15 +29,15 @@ export class TreeDataSource implements IDataSource { } - getId(tree: ITree, node: InternalTreeExplorerNode): string { + public getId(tree: ITree, node: InternalTreeExplorerNode): string { return node.id.toString(); } - hasChildren(tree: ITree, node: InternalTreeExplorerNode): boolean { + public hasChildren(tree: ITree, node: InternalTreeExplorerNode): boolean { return node.hasChildren; } - getChildren(tree: ITree, node: InternalTreeExplorerNode): TPromise { + public getChildren(tree: ITree, node: InternalTreeExplorerNode): TPromise { const promise = this.treeExplorerViewletService.resolveChildren(this.treeNodeProviderId, node); this.progressService.showWhile(promise, 800); @@ -45,7 +45,7 @@ export class TreeDataSource implements IDataSource { return promise; } - getParent(tree: ITree, node: InternalTreeExplorerNode): TPromise { + public getParent(tree: ITree, node: InternalTreeExplorerNode): TPromise { return TPromise.as(null); } } @@ -66,11 +66,11 @@ export class TreeRenderer extends ActionsRenderer implements IRenderer { }); } - getContentHeight(tree: ITree, element: any): number { + public getContentHeight(tree: ITree, element: any): number { return 22; } - renderContents(tree: ITree, node: InternalTreeExplorerNode, domElement: HTMLElement, previousCleanupFn: IElementCallback): IElementCallback { + public renderContents(tree: ITree, node: InternalTreeExplorerNode, domElement: HTMLElement, previousCleanupFn: IElementCallback): IElementCallback { const el = $(domElement).clearChildren(); const item = $('.custom-viewlet-tree-node-item'); item.appendTo(el); @@ -94,7 +94,7 @@ export class TreeController extends DefaultController { super({ clickBehavior: ClickBehavior.ON_MOUSE_UP /* do not change to not break DND */ }); } - onLeftClick(tree: ITree, node: InternalTreeExplorerNode, event: IMouseEvent, origin: string = 'mouse'): boolean { + public onLeftClick(tree: ITree, node: InternalTreeExplorerNode, event: IMouseEvent, origin: string = 'mouse'): boolean { super.onLeftClick(tree, node, event, origin); if (node.clickCommand) { @@ -126,5 +126,5 @@ export class TreeExplorerViewletState implements ITreeExplorerViewletState { this._actionProvider = new TreeExplorerActionProvider(this); } - get actionProvider() { return this._actionProvider; } + public get actionProvider() { return this._actionProvider; } } diff --git a/src/vs/workbench/parts/explorers/common/treeExplorerViewModel.ts b/src/vs/workbench/parts/explorers/common/treeExplorerViewModel.ts index f68bba6dffbb41349dd12394ceaf526710bdf2ef..e86f91d45107cee9c43fbb83f511c5aa8bb7796e 100644 --- a/src/vs/workbench/parts/explorers/common/treeExplorerViewModel.ts +++ b/src/vs/workbench/parts/explorers/common/treeExplorerViewModel.ts @@ -8,26 +8,20 @@ import { TPromise } from 'vs/base/common/winjs.base'; import { TreeExplorerNodeProvider } from 'vscode'; export class InternalTreeExplorerNode implements TreeExplorerNodeContent { - static idCounter = 1; + private static idCounter = 1; id: number; - label: string = 'label'; - hasChildren: boolean = true; - clickCommand: string = null; + label: string; + hasChildren: boolean; + clickCommand: string; constructor(node: any, provider: TreeExplorerNodeProvider) { this.id = InternalTreeExplorerNode.idCounter++; - if (provider.getLabel) { - this.label = provider.getLabel(node); - } - if (provider.getHasChildren) { - this.hasChildren = provider.getHasChildren(node); - } - if (provider.getClickCommand) { - this.clickCommand = provider.getClickCommand(node); - } + this.label = provider.getLabel ? provider.getLabel(node) : node.toString(); + this.hasChildren = provider.getHasChildren ? provider.getHasChildren(node) : true; + this.clickCommand = provider.getClickCommand ? provider.getClickCommand(node) : null; } }