提交 09eebc5b 编写于 作者: P Pine Wu

Use providerId instead of 'pineTree'!

上级 31afc033
......@@ -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<string>();
get onOpenViewlet(): Event<string> { 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();
}
......
......@@ -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;
}
......
......@@ -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<void> {
return this.treeExplorerViewletService.provideTreeContent('pineTree').then(tree => {
return this.treeExplorerViewletService.provideTreeContent(this.treeNodeProviderIdName).then(tree => {
this.tree.setInput(tree);
});
}
......
......@@ -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<InternalTreeExplorerNode[]> {
return this.treeExplorerViewletService.resolveChildren('pineTree', node);
return this.treeExplorerViewletService.resolveChildren(this.treeNodeProviderId, node);
}
getParent(tree: ITree, node: InternalTreeExplorerNode): TPromise<InternalTreeExplorerNode> {
......@@ -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;
......
......@@ -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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册