提交 a3d577cc 编写于 作者: P Pine Wu

Address feedback

上级 4ed359a0
...@@ -1391,7 +1391,7 @@ declare module 'vscode' { ...@@ -1391,7 +1391,7 @@ declare module 'vscode' {
getLabel?(node: T): string; 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. * @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. * @return A boolean that determines if `node` has children and is expandable.
......
...@@ -38,6 +38,7 @@ export class ExtHostTreeExplorers extends ExtHostTreeExplorersShape { ...@@ -38,6 +38,7 @@ export class ExtHostTreeExplorers extends ExtHostTreeExplorersShape {
return new Disposable(() => { return new Disposable(() => {
delete this._treeExplorerNodeProviders[providerId]; delete this._treeExplorerNodeProviders[providerId];
delete this._treeExplorerNodeProviders[providerId];
}); });
} }
......
...@@ -97,7 +97,7 @@ export class ActivitybarPart extends Part implements IActivityService { ...@@ -97,7 +97,7 @@ export class ActivitybarPart extends Part implements IActivityService {
} }
} }
getIsEnabledForRegisteredViewlets(): { [viewletId: string]: boolean } { public getIsEnabledForRegisteredViewlets(): { [viewletId: string]: boolean } {
const result = {}; const result = {};
for (let viewletId in this.registeredViewlets) { for (let viewletId in this.registeredViewlets) {
result[viewletId] = (this.enabledExternalViewlets.indexOf(viewletId) !== -1); result[viewletId] = (this.enabledExternalViewlets.indexOf(viewletId) !== -1);
...@@ -105,7 +105,7 @@ export class ActivitybarPart extends Part implements IActivityService { ...@@ -105,7 +105,7 @@ export class ActivitybarPart extends Part implements IActivityService {
return result; return result;
} }
toggleViewlet(viewletId: string): void { public toggleViewlet(viewletId: string): void {
const index = this.enabledExternalViewlets.indexOf(viewletId); const index = this.enabledExternalViewlets.indexOf(viewletId);
if (index === -1) { if (index === -1) {
this.enabledExternalViewlets.push(viewletId); this.enabledExternalViewlets.push(viewletId);
...@@ -140,7 +140,7 @@ export class ActivitybarPart extends Part implements IActivityService { ...@@ -140,7 +140,7 @@ export class ActivitybarPart extends Part implements IActivityService {
const $result = $('.content').appendTo($el); const $result = $('.content').appendTo($el);
// Top Actionbar with action items for each viewlet action // Top Actionbar with action items for each viewlet action
this.createViewletSwitcher($result.clone().addClass('position-top')); this.createViewletSwitcher($result.clone());
return $result; return $result;
} }
...@@ -235,7 +235,7 @@ class ViewletActivityAction extends ActivityAction { ...@@ -235,7 +235,7 @@ class ViewletActivityAction extends ActivityAction {
private lastRun: number = 0; private lastRun: number = 0;
private _onOpenExternalViewlet = new Emitter<string>(); private _onOpenExternalViewlet = new Emitter<string>();
get onOpenExternalViewlet(): Event<string> { return this._onOpenExternalViewlet.event; }; public get onOpenExternalViewlet(): Event<string> { return this._onOpenExternalViewlet.event; };
constructor( constructor(
id: string, id: string,
......
...@@ -29,13 +29,13 @@ export class ToggleExternalViewletAction extends Action { ...@@ -29,13 +29,13 @@ export class ToggleExternalViewletAction extends Action {
} }
run(): TPromise<any> { run(): TPromise<any> {
const viewletsToggleStataus = this.activityService.getIsEnabledForRegisteredViewlets(); const isEnabledForRegisteredViewlets = this.activityService.getIsEnabledForRegisteredViewlets();
const picks: IPickOpenEntry[] = []; const picks: IPickOpenEntry[] = [];
for (let viewletId in viewletsToggleStataus) { for (let viewletId in isEnabledForRegisteredViewlets) {
picks.push({ picks.push({
id: viewletId, id: viewletId,
label: (viewletsToggleStataus[viewletId] ? 'Disable ' : 'Enable ') + this.getShortViewletId(viewletId) label: (isEnabledForRegisteredViewlets[viewletId] ? 'Disable ' : 'Enable ') + this.getShortViewletId(viewletId)
}); });
} }
......
...@@ -17,4 +17,4 @@ export class RefreshViewExplorerAction extends Action { ...@@ -17,4 +17,4 @@ export class RefreshViewExplorerAction extends Action {
return TPromise.as(null); return TPromise.as(null);
}); });
} }
} }
\ No newline at end of file
...@@ -42,30 +42,30 @@ export class TreeExplorerViewlet extends Viewlet { ...@@ -42,30 +42,30 @@ export class TreeExplorerViewlet extends Viewlet {
TreeExplorerViewlet._idCounter++; TreeExplorerViewlet._idCounter++;
} }
getId(): string { public getId(): string {
return this.externalViewletId; return this.externalViewletId;
} }
create(parent: Builder): TPromise<void> { public create(parent: Builder): TPromise<void> {
super.create(parent); super.create(parent);
this.viewletContainer = parent.div().addClass('custom-tree-explorer-viewlet'); this.viewletContainer = parent.div();
this.addTreeView(); this.addTreeView();
return TPromise.as(null); return TPromise.as(null);
} }
layout(dimension: Dimension): void { public layout(dimension: Dimension): void {
this.view.layout(dimension.height, Orientation.VERTICAL); this.view.layout(dimension.height, Orientation.VERTICAL);
} }
setVisible(visible: boolean): TPromise<void> { public setVisible(visible: boolean): TPromise<void> {
return super.setVisible(visible).then(() => { return super.setVisible(visible).then(() => {
this.view.setVisible(visible).done(); this.view.setVisible(visible).done();
}); });
} }
getActions(): IAction[] { public getActions(): IAction[] {
return this.view.getActions(); return this.view.getActions();
} }
...@@ -82,7 +82,7 @@ export class TreeExplorerViewlet extends Viewlet { ...@@ -82,7 +82,7 @@ export class TreeExplorerViewlet extends Viewlet {
return tokens[tokens.length - 1]; return tokens[tokens.length - 1];
} }
dispose(): void { public dispose(): void {
this.view = null; this.view = null;
} }
} }
...@@ -29,7 +29,7 @@ export class TreeExplorerViewletService implements ITreeExplorerViewletService { ...@@ -29,7 +29,7 @@ export class TreeExplorerViewletService implements ITreeExplorerViewletService {
public _serviceBrand: any; public _serviceBrand: any;
private _onTreeExplorerNodeProviderRegistered = new Emitter<String>(); private _onTreeExplorerNodeProviderRegistered = new Emitter<String>();
get onTreeExplorerNodeProviderRegistered(): Event<string> { return this._onTreeExplorerNodeProviderRegistered.event; }; public get onTreeExplorerNodeProviderRegistered(): Event<string> { return this._onTreeExplorerNodeProviderRegistered.event; };
private _treeExplorerNodeProviders: { [providerId: string]: InternalTreeExplorerNodeProvider }; private _treeExplorerNodeProviders: { [providerId: string]: InternalTreeExplorerNodeProvider };
...@@ -40,26 +40,26 @@ export class TreeExplorerViewletService implements ITreeExplorerViewletService { ...@@ -40,26 +40,26 @@ export class TreeExplorerViewletService implements ITreeExplorerViewletService {
this._treeExplorerNodeProviders = Object.create(null); this._treeExplorerNodeProviders = Object.create(null);
} }
registerTreeExplorerNodeProvider(providerId: string, provider: InternalTreeExplorerNodeProvider): void { public registerTreeExplorerNodeProvider(providerId: string, provider: InternalTreeExplorerNodeProvider): void {
this._treeExplorerNodeProviders[providerId] = provider; this._treeExplorerNodeProviders[providerId] = provider;
this._onTreeExplorerNodeProviderRegistered.fire(providerId); this._onTreeExplorerNodeProviderRegistered.fire(providerId);
} }
hasProvider(providerId: string): boolean { public hasProvider(providerId: string): boolean {
return !!this._treeExplorerNodeProviders[providerId]; return !!this._treeExplorerNodeProviders[providerId];
} }
provideRootNode(providerId: string): TPromise<InternalTreeExplorerNode> { public provideRootNode(providerId: string): TPromise<InternalTreeExplorerNode> {
const provider = this.getProvider(providerId); const provider = this.getProvider(providerId);
return TPromise.wrap(provider.provideRootNode()); return TPromise.wrap(provider.provideRootNode());
} }
resolveChildren(providerId: string, node: InternalTreeExplorerNode): TPromise<InternalTreeExplorerNode[]> { public resolveChildren(providerId: string, node: InternalTreeExplorerNode): TPromise<InternalTreeExplorerNode[]> {
const provider = this.getProvider(providerId); const provider = this.getProvider(providerId);
return TPromise.wrap(provider.resolveChildren(node)); return TPromise.wrap(provider.resolveChildren(node));
} }
executeCommand(providerId: string, node: InternalTreeExplorerNode): TPromise<void> { public executeCommand(providerId: string, node: InternalTreeExplorerNode): TPromise<void> {
const provider = this.getProvider(providerId); const provider = this.getProvider(providerId);
return TPromise.wrap(provider.executeCommand(node)); return TPromise.wrap(provider.executeCommand(node));
} }
......
...@@ -93,7 +93,12 @@ export class TreeExplorerView extends CollapsibleViewletView { ...@@ -93,7 +93,12 @@ export class TreeExplorerView extends CollapsibleViewletView {
return this.treeExplorerViewletService.provideRootNode(this.treeNodeProviderId).then(tree => { return this.treeExplorerViewletService.provideRootNode(this.treeNodeProviderId).then(tree => {
this.tree.setInput(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 => { this.treeExplorerViewletService.onTreeExplorerNodeProviderRegistered(providerId => {
if (this.treeNodeProviderId === providerId) { if (this.treeNodeProviderId === providerId) {
return this.treeExplorerViewletService.provideRootNode(this.treeNodeProviderId).then(tree => { return this.treeExplorerViewletService.provideRootNode(this.treeNodeProviderId).then(tree => {
......
...@@ -29,15 +29,15 @@ export class TreeDataSource implements IDataSource { ...@@ -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(); return node.id.toString();
} }
hasChildren(tree: ITree, node: InternalTreeExplorerNode): boolean { public hasChildren(tree: ITree, node: InternalTreeExplorerNode): boolean {
return node.hasChildren; return node.hasChildren;
} }
getChildren(tree: ITree, node: InternalTreeExplorerNode): TPromise<InternalTreeExplorerNode[]> { public getChildren(tree: ITree, node: InternalTreeExplorerNode): TPromise<InternalTreeExplorerNode[]> {
const promise = this.treeExplorerViewletService.resolveChildren(this.treeNodeProviderId, node); const promise = this.treeExplorerViewletService.resolveChildren(this.treeNodeProviderId, node);
this.progressService.showWhile(promise, 800); this.progressService.showWhile(promise, 800);
...@@ -45,7 +45,7 @@ export class TreeDataSource implements IDataSource { ...@@ -45,7 +45,7 @@ export class TreeDataSource implements IDataSource {
return promise; return promise;
} }
getParent(tree: ITree, node: InternalTreeExplorerNode): TPromise<InternalTreeExplorerNode> { public getParent(tree: ITree, node: InternalTreeExplorerNode): TPromise<InternalTreeExplorerNode> {
return TPromise.as(null); return TPromise.as(null);
} }
} }
...@@ -66,11 +66,11 @@ export class TreeRenderer extends ActionsRenderer implements IRenderer { ...@@ -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; 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 el = $(domElement).clearChildren();
const item = $('.custom-viewlet-tree-node-item'); const item = $('.custom-viewlet-tree-node-item');
item.appendTo(el); item.appendTo(el);
...@@ -94,7 +94,7 @@ export class TreeController extends DefaultController { ...@@ -94,7 +94,7 @@ export class TreeController extends DefaultController {
super({ clickBehavior: ClickBehavior.ON_MOUSE_UP /* do not change to not break DND */ }); 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); super.onLeftClick(tree, node, event, origin);
if (node.clickCommand) { if (node.clickCommand) {
...@@ -126,5 +126,5 @@ export class TreeExplorerViewletState implements ITreeExplorerViewletState { ...@@ -126,5 +126,5 @@ export class TreeExplorerViewletState implements ITreeExplorerViewletState {
this._actionProvider = new TreeExplorerActionProvider(this); this._actionProvider = new TreeExplorerActionProvider(this);
} }
get actionProvider() { return this._actionProvider; } public get actionProvider() { return this._actionProvider; }
} }
...@@ -8,26 +8,20 @@ import { TPromise } from 'vs/base/common/winjs.base'; ...@@ -8,26 +8,20 @@ import { TPromise } from 'vs/base/common/winjs.base';
import { TreeExplorerNodeProvider } from 'vscode'; import { TreeExplorerNodeProvider } from 'vscode';
export class InternalTreeExplorerNode implements TreeExplorerNodeContent { export class InternalTreeExplorerNode implements TreeExplorerNodeContent {
static idCounter = 1; private static idCounter = 1;
id: number; id: number;
label: string = 'label'; label: string;
hasChildren: boolean = true; hasChildren: boolean;
clickCommand: string = null; clickCommand: string;
constructor(node: any, provider: TreeExplorerNodeProvider<any>) { constructor(node: any, provider: TreeExplorerNodeProvider<any>) {
this.id = InternalTreeExplorerNode.idCounter++; this.id = InternalTreeExplorerNode.idCounter++;
if (provider.getLabel) { this.label = provider.getLabel ? provider.getLabel(node) : node.toString();
this.label = provider.getLabel(node); this.hasChildren = provider.getHasChildren ? provider.getHasChildren(node) : true;
} this.clickCommand = provider.getClickCommand ? provider.getClickCommand(node) : null;
if (provider.getHasChildren) {
this.hasChildren = provider.getHasChildren(node);
}
if (provider.getClickCommand) {
this.clickCommand = provider.getClickCommand(node);
}
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册