提交 984ca583 编写于 作者: B Benjamin Pasero

adopt list service for extension dependencies (for #11517)

上级 ab8c53ce
......@@ -9,12 +9,11 @@ import { IMouseEvent } from 'vs/base/browser/mouseEvent';
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { TPromise, Promise } from 'vs/base/common/winjs.base';
import { IDataSource, ITree, IRenderer } from 'vs/base/parts/tree/browser/tree';
import { DefaultController } from 'vs/base/parts/tree/browser/treeDefaults';
import { DefaultController, ClickBehavior } from 'vs/base/parts/tree/browser/treeDefaults';
import { Action } from 'vs/base/common/actions';
import { IExtensionDependencies, IExtensionsWorkbenchService } from 'vs/workbench/parts/extensions/common/extensions';
import { once } from 'vs/base/common/event';
import { domEvent } from 'vs/base/browser/event';
import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { KeyMod, KeyCode } from 'vs/base/common/keyCodes';
......@@ -160,7 +159,9 @@ export class Renderer implements IRenderer {
export class Controller extends DefaultController {
constructor( @IExtensionsWorkbenchService private extensionsWorkdbenchService: IExtensionsWorkbenchService) {
super();
super({ clickBehavior: ClickBehavior.ON_MOUSE_UP, keyboardSupport: false });
// TODO@Sandeep this should be a command
this.downKeyBindingDispatcher.set(KeyMod.CtrlCmd | KeyCode.Enter, (tree: ITree, event: any) => this.openExtension(tree, true));
}
......@@ -179,14 +180,7 @@ export class Controller extends DefaultController {
return false;
}
protected onEnter(tree: ITree, event: IKeyboardEvent): boolean {
if (super.onEnter(tree, event)) {
return this.openExtension(tree, false);
}
return false;
}
private openExtension(tree: ITree, sideByside: boolean): boolean {
public openExtension(tree: ITree, sideByside: boolean): boolean {
const element: IExtensionDependencies = tree.getFocus();
if (element.extension) {
this.extensionsWorkdbenchService.open(element.extension, sideByside);
......
......@@ -44,6 +44,7 @@ import { IMessageService } from 'vs/platform/message/common/message';
import { IOpenerService } from 'vs/platform/opener/common/opener';
import { Tree } from 'vs/base/parts/tree/browser/treeImpl';
import { Position } from 'vs/platform/editor/common/editor';
import { IListService } from 'vs/platform/list/browser/listService';
function renderBody(body: string): string {
return `<!DOCTYPE html>
......@@ -154,7 +155,8 @@ export class ExtensionEditor extends BaseEditor {
@IThemeService private themeService: IThemeService,
@IKeybindingService private keybindingService: IKeybindingService,
@IMessageService private messageService: IMessageService,
@IOpenerService private openerService: IOpenerService
@IOpenerService private openerService: IOpenerService,
@IListService private listService: IListService
) {
super(ExtensionEditor.ID, telemetryService);
this._highlight = null;
......@@ -388,7 +390,7 @@ export class ExtensionEditor extends BaseEditor {
append(this.content, scrollableContent.getDomNode());
this.contentDisposables.push(scrollableContent);
const tree = ExtensionEditor.renderDependencies(content, extensionDependencies, this.instantiationService);
const tree = this.renderDependencies(content, extensionDependencies);
const layout = () => {
scrollableContent.scanDomNode();
const scrollState = scrollableContent.getScrollState();
......@@ -407,18 +409,28 @@ export class ExtensionEditor extends BaseEditor {
});
}
private static renderDependencies(container: HTMLElement, extensionDependencies: IExtensionDependencies, instantiationService: IInstantiationService): Tree {
const renderer = instantiationService.createInstance(Renderer);
const controller = instantiationService.createInstance(Controller);
private renderDependencies(container: HTMLElement, extensionDependencies: IExtensionDependencies): Tree {
const renderer = this.instantiationService.createInstance(Renderer);
const controller = this.instantiationService.createInstance(Controller);
const tree = new Tree(container, {
dataSource: new DataSource(),
renderer,
controller
}, {
indentPixels: 40,
twistiePixels: 20
twistiePixels: 20,
keyboardSupport: false
});
tree.setInput(extensionDependencies);
this.contentDisposables.push(tree.addListener2('selection', event => {
if (event && event.payload && event.payload.origin === 'keyboard') {
controller.openExtension(tree, false);
}
}));
this.contentDisposables.push(this.listService.register(tree));
return tree;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册