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

Resolving onClickCommand and clean up

Drop the viewlet part in treeExplorerViewletService
上级 09703d26
......@@ -1356,7 +1356,7 @@ declare module 'vscode' {
export interface TreeExplorerNode {
label: string;
shouldInitiallyExpand: boolean;
onClickCommand: string;
onClickCommand?: string;
}
/**
......
......@@ -66,7 +66,7 @@ export function createApiFactory(threadService: IThreadService, extensionService
const extHostDocuments = col.define(ExtHostContext.ExtHostDocuments).set<ExtHostDocuments>(new ExtHostDocuments(threadService));
const extHostDocumentSaveParticipant = col.define(ExtHostContext.ExtHostDocumentSaveParticipant).set<ExtHostDocumentSaveParticipant>(new ExtHostDocumentSaveParticipant(extHostDocuments, threadService.get(MainContext.MainThreadWorkspace)));
const extHostEditors = col.define(ExtHostContext.ExtHostEditors).set<ExtHostEditors>(new ExtHostEditors(threadService, extHostDocuments));
const extHostExplorers = col.define(ExtHostContext.ExtHostExplorers).set<ExtHostTreeExplorers>(new ExtHostTreeExplorers(threadService));
const extHostExplorers = col.define(ExtHostContext.ExtHostExplorers).set<ExtHostTreeExplorers>(new ExtHostTreeExplorers(threadService, extHostCommands));
const extHostCommands = col.define(ExtHostContext.ExtHostCommands).set<ExtHostCommands>(new ExtHostCommands(threadService, extHostEditors, extHostHeapService));
const extHostConfiguration = col.define(ExtHostContext.ExtHostConfiguration).set<ExtHostConfiguration>(new ExtHostConfiguration(threadService.get(MainContext.MainThreadConfiguration)));
const extHostDiagnostics = col.define(ExtHostContext.ExtHostDiagnostics).set<ExtHostDiagnostics>(new ExtHostDiagnostics(threadService));
......
......@@ -267,6 +267,7 @@ export abstract class ExtHostEditorsShape {
export abstract class ExtHostTreeExplorersShape {
$provideRootNode(providerId: string): TPromise<InternalTreeExplorerNode> { throw ni(); };
$resolveChildren(providerId: string, node: InternalTreeExplorerNode): TPromise<InternalTreeExplorerNode[]> { throw ni(); }
$resolveCommand(providerId: string, node: InternalTreeExplorerNode): TPromise<void> { throw ni(); }
}
export abstract class ExtHostExtensionServiceShape {
......
......@@ -10,6 +10,7 @@ import { Disposable } from 'vs/workbench/api/node/extHostTypes';
import { IThreadService } from 'vs/workbench/services/thread/common/threadService';
import { MainContext, ExtHostTreeExplorersShape, MainThreadTreeExplorersShape } from './extHost.protocol';
import { InternalTreeExplorerNode } from 'vs/workbench/parts/explorers/common/treeExplorerViewModel';
import { ExtHostCommands } from 'vs/workbench/api/node/extHostCommands';
export class ExtHostTreeExplorers extends ExtHostTreeExplorersShape {
private _proxy: MainThreadTreeExplorersShape;
......@@ -19,7 +20,8 @@ export class ExtHostTreeExplorers extends ExtHostTreeExplorersShape {
private _externalNodeMaps: { [providerId: string]: { [id: number]: TreeExplorerNode }};
constructor(
threadService: IThreadService
threadService: IThreadService,
private commands: ExtHostCommands
) {
super();
......@@ -73,4 +75,20 @@ export class ExtHostTreeExplorers extends ExtHostTreeExplorersShape {
});
}));
}
$resolveCommand(providerId: string, mainThreadNode: InternalTreeExplorerNode): TPromise<void> {
const provider = this._treeExplorerNodeProviders[providerId];
if (!provider) {
throw new Error(`no TreeContentProvider registered with id '${providerId}'`);
}
if (mainThreadNode.onClickCommand) {
return TPromise.wrap(this.commands.executeCommand(mainThreadNode.onClickCommand, this._externalNodeMaps[providerId][mainThreadNode.id]).then(() => {
// Todo: error handling
return null;
}));
}
return TPromise.as(null);
}
}
\ No newline at end of file
......@@ -8,7 +8,7 @@ import { TreeExplorerNode } from 'vscode';
import { TPromise } from 'vs/base/common/winjs.base';
import { IThreadService } from 'vs/workbench/services/thread/common/threadService';
import { ExtHostContext, MainThreadTreeExplorersShape, ExtHostTreeExplorersShape } from './extHost.protocol';
import { ITreeExplorerViewletService } from 'vs/workbench/parts/explorers/browser/treeExplorerViewletService';
import { ITreeExplorerService } from 'vs/workbench/parts/explorers/browser/treeExplorerService';
import { InternalTreeExplorerNode } from 'vs/workbench/parts/explorers/common/treeExplorerViewModel';
export class MainThreadTreeExplorers extends MainThreadTreeExplorersShape {
......@@ -18,7 +18,7 @@ export class MainThreadTreeExplorers extends MainThreadTreeExplorersShape {
constructor(
@IThreadService threadService: IThreadService,
@ITreeExplorerViewletService private treeExplorerViewletService: ITreeExplorerViewletService
@ITreeExplorerService private treeExplorerViewletService: ITreeExplorerService
) {
super();
......@@ -36,6 +36,9 @@ export class MainThreadTreeExplorers extends MainThreadTreeExplorersShape {
},
resolveChildren: (node: InternalTreeExplorerNode): TPromise<InternalTreeExplorerNode[]> => {
return this._proxy.$resolveChildren(providerId, node);
},
resolveCommand: (node: InternalTreeExplorerNode): TPromise<void> => {
return this._proxy.$resolveCommand(providerId, node);
}
});
}
......
......@@ -4,22 +4,23 @@ import { TreeExplorerNodeProvider } from 'vscode';
import { TPromise } from 'vs/base/common/winjs.base';
import Event, {Emitter} from 'vs/base/common/event';
import { IInstantiationService, createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { InternalTreeExplorerNode } from 'vs/workbench/parts/explorers/common/treeExplorerViewModel';
import { InternalTreeExplorerNode, InternalTreeExplorerNodeProvider } from 'vs/workbench/parts/explorers/common/treeExplorerViewModel';
export const ITreeExplorerViewletService = createDecorator<ITreeExplorerViewletService>('customViewletService');
export const ITreeExplorerService = createDecorator<ITreeExplorerService>('customViewletService');
export interface ITreeExplorerViewletService {
export interface ITreeExplorerService {
_serviceBrand: any;
registerTreeContentProvider(providerId: string, provider: TreeExplorerNodeProvider): void;
registerTreeContentProvider(providerId: string, provider: InternalTreeExplorerNodeProvider): void;
provideTreeContent(providerId: string): TPromise<InternalTreeExplorerNode>;
resolveChildren(providerId: string, node: InternalTreeExplorerNode): TPromise<InternalTreeExplorerNode[]>;
resolveCommand(providerId: string, node: InternalTreeExplorerNode): TPromise<void>;
}
export class TreeExplorerViewletService implements ITreeExplorerViewletService {
export class TreeExplorerViewletService implements ITreeExplorerService {
public _serviceBrand: any;
private _treeContentProviders: { [providerId: string]: TreeExplorerNodeProvider; };
private _treeContentProviders: { [providerId: string]: InternalTreeExplorerNodeProvider };
constructor(
@IInstantiationService private _instantiationService: IInstantiationService
......@@ -27,7 +28,7 @@ export class TreeExplorerViewletService implements ITreeExplorerViewletService {
this._treeContentProviders = Object.create(null);
}
registerTreeContentProvider(providerId: string, provider: TreeExplorerNodeProvider): void {
registerTreeContentProvider(providerId: string, provider: InternalTreeExplorerNodeProvider): void {
this._treeContentProviders[providerId] = provider;
}
......@@ -38,4 +39,8 @@ export class TreeExplorerViewletService implements ITreeExplorerViewletService {
resolveChildren(providerId: string, node: InternalTreeExplorerNode): TPromise<InternalTreeExplorerNode[]> {
return TPromise.wrap(this._treeContentProviders[providerId].resolveChildren(node));
}
resolveCommand(providerId: string, node: InternalTreeExplorerNode): TPromise<void> {
return TPromise.wrap(this._treeContentProviders[providerId].resolveCommand(node));
}
}
'use strict';
import {ITreeExplorerViewletService, TreeExplorerViewletService } from 'vs/workbench/parts/explorers/browser/treeExplorerViewletService';
import {ITreeExplorerService, TreeExplorerViewletService } from 'vs/workbench/parts/explorers/browser/treeExplorerService';
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
registerSingleton(ITreeExplorerViewletService, TreeExplorerViewletService);
\ No newline at end of file
registerSingleton(ITreeExplorerService, TreeExplorerViewletService);
\ No newline at end of file
......@@ -16,7 +16,7 @@ import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService';
import { IEditorGroupService } from 'vs/workbench/services/group/common/groupService';
import { ITreeExplorerViewletService } from 'vs/workbench/parts/explorers/browser/treeExplorerViewletService';
import { ITreeExplorerService } from 'vs/workbench/parts/explorers/browser/treeExplorerService';
import { ITree, IDataSource, IRenderer } from 'vs/base/parts/tree/browser/tree';
import { Tree } from 'vs/base/parts/tree/browser/treeImpl';
......@@ -48,7 +48,7 @@ export class TreeExplorerView extends CollapsibleViewletView {
@IInstantiationService private instantiationService: IInstantiationService,
@IWorkbenchEditorService private editorService: IWorkbenchEditorService,
@IEditorGroupService private editorGroupService: IEditorGroupService,
@ITreeExplorerViewletService private treeExplorerViewletService: ITreeExplorerViewletService
@ITreeExplorerService private treeExplorerViewletService: ITreeExplorerService
) {
super(actionRunner, false, nls.localize('treeExplorerViewletTree', "Tree Explorer Section"), messageService, keybindingService, contextMenuService, headerSize);
......
......@@ -10,18 +10,17 @@ import { IMouseEvent } from 'vs/base/browser/mouseEvent';
import { IActionRunner } from 'vs/base/common/actions';
import { IActionProvider, ActionsRenderer } from 'vs/base/parts/tree/browser/actionsRenderer';
import { ContributableActionProvider } from 'vs/workbench/browser/actionBarRegistry';
import { ICommandService } from 'vs/platform/commands/common/commands';
import { IContextViewService, IContextMenuService } from 'vs/platform/contextview/browser/contextView';
import { IExtensionService } from 'vs/platform/extensions/common/extensions';
import { IModeService } from 'vs/editor/common/services/modeService';
import { ITreeExplorerViewletService } from 'vs/workbench/parts/explorers/browser/treeExplorerViewletService';
import { ITreeExplorerService } from 'vs/workbench/parts/explorers/browser/treeExplorerService';
const providerId = 'pineTree'; // For now
export class TreeDataSource implements IDataSource {
constructor(
@ITreeExplorerViewletService private treeExplorerViewletService: ITreeExplorerViewletService
@ITreeExplorerService private treeExplorerViewletService: ITreeExplorerService
) {
}
......@@ -81,7 +80,7 @@ export class TreeRenderer extends ActionsRenderer implements IRenderer {
export class TreeController extends DefaultController {
constructor(
@ICommandService private commandService: ICommandService,
@ITreeExplorerService private treeExplorerViewletService: ITreeExplorerService
) {
super({ clickBehavior: ClickBehavior.ON_MOUSE_UP /* do not change to not break DND */ });
}
......@@ -90,7 +89,7 @@ export class TreeController extends DefaultController {
super.onLeftClick(tree, node, event, origin);
if (node.onClickCommand) {
this.commandService.executeCommand(node.onClickCommand).done();
this.treeExplorerViewletService.resolveCommand('pineTree', node);
}
return true;
......
import { TreeExplorerNode } from 'vscode';
import { TPromise } from 'vs/base/common/winjs.base';
import { TreeExplorerNode, TreeExplorerNodeProvider } from 'vscode';
export class InternalTreeExplorerNode implements TreeExplorerNode {
static idCounter = 1;
......@@ -18,3 +19,7 @@ export class InternalTreeExplorerNode implements TreeExplorerNode {
this.onClickCommand = node.onClickCommand;
}
}
export interface InternalTreeExplorerNodeProvider extends TreeExplorerNodeProvider {
resolveCommand(node: TreeExplorerNode): TPromise<void>;
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册