From 09eebc5bbb75e5a408b430bcdcf2fd186d36d042 Mon Sep 17 00:00:00 2001 From: Pine Wu Date: Wed, 19 Oct 2016 08:50:39 -0700 Subject: [PATCH] Use providerId instead of 'pineTree'! --- .../parts/activitybar/activitybarPart.ts | 20 +++++++++++-- .../explorers/browser/treeExplorerViewlet.ts | 28 +++++++++++++------ .../browser/views/treeExplorerView.ts | 12 ++++---- .../browser/views/treeExplorerViewer.ts | 6 ++-- .../activity/common/activityService.ts | 5 ++++ 5 files changed, 50 insertions(+), 21 deletions(-) diff --git a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts index 980043b4ab9..e493065e34d 100644 --- a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts +++ b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts @@ -8,6 +8,7 @@ import 'vs/css!./media/activitybarpart'; import nls = require('vs/nls'); import { TPromise } from 'vs/base/common/winjs.base'; +import Event, { Emitter } from 'vs/base/common/event'; import { Builder, $ } from 'vs/base/browser/builder'; import { Action } from 'vs/base/common/actions'; import errors = require('vs/base/common/errors'); @@ -33,7 +34,9 @@ export class ActivitybarPart extends Part implements IActivityService { private viewletsToggleStatus: { [viewletId: string]: boolean; }; private registeredViewlets: string[]; - private VIEWLETS_TOGGLE_STATUS = "workbench.activityBar.viewletsToggleStatus"; + private externalViewletIdToOpen: string; + + private VIEWLETS_TOGGLE_STATUS = 'workbench.activityBar.viewletsToggleStatus'; constructor( id: string, @@ -92,7 +95,7 @@ export class ActivitybarPart extends Part implements IActivityService { } } - public getRegisteredViewletsToggleStatus(): { [viewletId: string]: boolean } { + getRegisteredViewletsToggleStatus(): { [viewletId: string]: boolean } { const result = {}; this.registeredViewlets.forEach(viewletId => { result[viewletId] = this.viewletsToggleStatus[viewletId]; @@ -100,7 +103,7 @@ export class ActivitybarPart extends Part implements IActivityService { return result; } - public toggleViewlet(viewletId: string): void { + toggleViewlet(viewletId: string): void { this.viewletsToggleStatus[viewletId] = !this.viewletsToggleStatus[viewletId]; this.setViewletsToggleStatus(); this.refreshViewletSwitcher(); @@ -110,6 +113,10 @@ export class ActivitybarPart extends Part implements IActivityService { this.storageService.store(this.VIEWLETS_TOGGLE_STATUS, JSON.stringify(this.viewletsToggleStatus)); } + getExternalViewletIdToOpen(): string { + return this.externalViewletIdToOpen; + } + public showActivity(compositeId: string, badge: IBadge, clazz?: string): void { const action = this.compositeIdToActions[compositeId]; if (action) { @@ -168,6 +175,9 @@ export class ActivitybarPart extends Part implements IActivityService { private toAction(composite: ViewletDescriptor): ActivityAction { const action = this.instantiationService.createInstance(ViewletActivityAction, composite.id + '.activity-bar-action', composite); + action.onOpenViewlet((viewletId) => { + this.externalViewletIdToOpen = viewletId; + }); this.activityActionItems[action.id] = new ActivityActionItem(action, composite.name, this.getKeybindingLabel(composite.id)); this.compositeIdToActions[composite.id] = action; @@ -198,6 +208,9 @@ class ViewletActivityAction extends ActivityAction { private static preventDoubleClickDelay = 300; private lastRun: number = 0; + private _onOpenViewlet = new Emitter(); + get onOpenViewlet(): Event { return this._onOpenViewlet.event; }; + constructor( id: string, private viewlet: ViewletDescriptor, @IViewletService private viewletService: IViewletService, @@ -222,6 +235,7 @@ class ViewletActivityAction extends ActivityAction { if (!sideBarHidden && activeViewlet && activeViewlet.getId() === this.viewlet.id) { this.partService.setSideBarHidden(true); } else { + this._onOpenViewlet.fire(this.viewlet.id); this.viewletService.openViewlet(this.viewlet.id, true).done(null, errors.onUnexpectedError); this.activate(); } diff --git a/src/vs/workbench/parts/explorers/browser/treeExplorerViewlet.ts b/src/vs/workbench/parts/explorers/browser/treeExplorerViewlet.ts index 03d516c0b04..3d1f05da41d 100644 --- a/src/vs/workbench/parts/explorers/browser/treeExplorerViewlet.ts +++ b/src/vs/workbench/parts/explorers/browser/treeExplorerViewlet.ts @@ -12,11 +12,9 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { TreeExplorerView } from 'vs/workbench/parts/explorers/browser/views/treeExplorerView'; import { TreeExplorerViewletState } from 'vs/workbench/parts/explorers/browser/views/treeExplorerViewer'; +import { IActivityService } from 'vs/workbench/services/activity/common/activityService'; -const TREE_NAME = 'pineTree'; // For now - -export const CUSTOM_VIEWLET_ID_ROOT = 'workbench.view.treeExplorerViewlet.'; -const ID = 'workbench.view.customTreeExplorerViewlet.' + TREE_NAME; +export const VIEWLET_ID_ROOT = 'workbench.view.customTreeExplorerViewlet.'; export class TreeExplorerViewlet extends Viewlet { private static _idCounter = 1; @@ -26,14 +24,21 @@ export class TreeExplorerViewlet extends Viewlet { private viewletState: TreeExplorerViewletState; + private externalViewletId: string; + private treeNodeProviderId: string; + constructor( @ITelemetryService telemetryService: ITelemetryService, - @IInstantiationService private instantiationService: IInstantiationService + @IInstantiationService private instantiationService: IInstantiationService, + @IActivityService private activityService: IActivityService ) { - super(ID, telemetryService); + super(VIEWLET_ID_ROOT + TreeExplorerViewlet._idCounter, telemetryService); this.viewletState = new TreeExplorerViewletState(); + this.externalViewletId = this.activityService.getExternalViewletIdToOpen(); + this.treeNodeProviderId = this.getTreeProviderName(this.externalViewletId); + TreeExplorerViewlet._idCounter++; } @@ -41,7 +46,7 @@ export class TreeExplorerViewlet extends Viewlet { super.create(parent); this.viewletContainer = parent.div().addClass('custom-tree-explorer-viewlet'); - this.addTreeView(TREE_NAME); + this.addTreeView(this.treeNodeProviderId); return TPromise.as(null); } @@ -56,14 +61,19 @@ export class TreeExplorerViewlet extends Viewlet { }); } - private addTreeView(treeName: string): void { + private addTreeView(treeNodeProviderId: string): void { // Hide header (root node) by default const headerSize = 0; - this.view = this.instantiationService.createInstance(TreeExplorerView, this.viewletState, treeName, this.getActionRunner(), headerSize); + this.view = this.instantiationService.createInstance(TreeExplorerView, this.viewletState, treeNodeProviderId, this.getActionRunner(), headerSize); this.view.render(this.viewletContainer.getHTMLElement(), Orientation.VERTICAL); } + private getTreeProviderName(viewletId: string): string { + const tokens = viewletId.split('.'); + return tokens[tokens.length - 1]; + } + dispose(): void { this.view = null; } diff --git a/src/vs/workbench/parts/explorers/browser/views/treeExplorerView.ts b/src/vs/workbench/parts/explorers/browser/views/treeExplorerView.ts index b67699df936..f793a68a04d 100644 --- a/src/vs/workbench/parts/explorers/browser/views/treeExplorerView.ts +++ b/src/vs/workbench/parts/explorers/browser/views/treeExplorerView.ts @@ -28,9 +28,7 @@ export class TreeExplorerView extends CollapsibleViewletView { private viewletState: TreeExplorerViewletState; - private _treeName: string; - - get treeName(): string { return this._treeName; } + private treeNodeProviderIdName: string; constructor( viewletState: TreeExplorerViewletState, @@ -49,7 +47,7 @@ export class TreeExplorerView extends CollapsibleViewletView { super(actionRunner, false, nls.localize('treeExplorerViewletTree', "Tree Explorer Section"), messageService, keybindingService, contextMenuService, headerSize); this.viewletState = viewletState; - this._treeName = treeName; + this.treeNodeProviderIdName = treeName; this.workspace = contextService.getWorkspace(); @@ -72,9 +70,9 @@ export class TreeExplorerView extends CollapsibleViewletView { } createViewer(container: Builder): ITree { - const dataSource = this.instantiationService.createInstance(TreeDataSource); + const dataSource = this.instantiationService.createInstance(TreeDataSource, this.treeNodeProviderIdName); const renderer = this.instantiationService.createInstance(TreeRenderer, this.viewletState, this.actionRunner, container.getHTMLElement()); - const controller = this.instantiationService.createInstance(TreeController); + const controller = this.instantiationService.createInstance(TreeController, this.treeNodeProviderIdName); const sorter = null; const filter = null; const dnd = null; @@ -102,7 +100,7 @@ export class TreeExplorerView extends CollapsibleViewletView { } private updateInput(): TPromise { - return this.treeExplorerViewletService.provideTreeContent('pineTree').then(tree => { + return this.treeExplorerViewletService.provideTreeContent(this.treeNodeProviderIdName).then(tree => { this.tree.setInput(tree); }); } diff --git a/src/vs/workbench/parts/explorers/browser/views/treeExplorerViewer.ts b/src/vs/workbench/parts/explorers/browser/views/treeExplorerViewer.ts index c6507f92c65..6b350ca6dde 100644 --- a/src/vs/workbench/parts/explorers/browser/views/treeExplorerViewer.ts +++ b/src/vs/workbench/parts/explorers/browser/views/treeExplorerViewer.ts @@ -20,6 +20,7 @@ import { ITreeExplorerService } from 'vs/workbench/parts/explorers/browser/treeE export class TreeDataSource implements IDataSource { constructor( + private treeNodeProviderId: string, @ITreeExplorerService private treeExplorerViewletService: ITreeExplorerService ) { @@ -34,7 +35,7 @@ export class TreeDataSource implements IDataSource { } getChildren(tree: ITree, node: InternalTreeExplorerNode): TPromise { - return this.treeExplorerViewletService.resolveChildren('pineTree', node); + return this.treeExplorerViewletService.resolveChildren(this.treeNodeProviderId, node); } getParent(tree: ITree, node: InternalTreeExplorerNode): TPromise { @@ -80,6 +81,7 @@ export class TreeRenderer extends ActionsRenderer implements IRenderer { export class TreeController extends DefaultController { constructor( + private treeNodeProviderId: string, @ITreeExplorerService private treeExplorerViewletService: ITreeExplorerService ) { super({ clickBehavior: ClickBehavior.ON_MOUSE_UP /* do not change to not break DND */ }); @@ -89,7 +91,7 @@ export class TreeController extends DefaultController { super.onLeftClick(tree, node, event, origin); if (node.clickCommand) { - this.treeExplorerViewletService.resolveCommand('pineTree', node); + this.treeExplorerViewletService.resolveCommand(this.treeNodeProviderId, node); } return true; diff --git a/src/vs/workbench/services/activity/common/activityService.ts b/src/vs/workbench/services/activity/common/activityService.ts index 0324c692985..181f2d1d2e7 100644 --- a/src/vs/workbench/services/activity/common/activityService.ts +++ b/src/vs/workbench/services/activity/common/activityService.ts @@ -80,4 +80,9 @@ export interface IActivityService { * Enable/disable viewlet */ toggleViewlet(viewletId: string): void; + + /** + * Get the external viewlet id to open + */ + getExternalViewletIdToOpen(): string; } \ No newline at end of file -- GitLab