Take static arguments for the view descriptor ctor

This commit is contained in:
Sandeep Somavarapu
2019-03-06 12:24:41 +01:00
parent 97efb5af57
commit cd816afcc9
9 changed files with 36 additions and 37 deletions
@@ -377,7 +377,7 @@ class ViewsExtensionHandler implements IWorkbenchContribution {
const viewDescriptor = <ICustomViewDescriptor>{
id: item.id,
name: item.name,
ctor: CustomTreeViewPanel,
ctorDescriptor: { ctor: CustomTreeViewPanel },
when: ContextKeyExpr.deserialize(item.when),
canToggleVisibility: true,
collapsed: this.showCollapsed(container),
@@ -178,7 +178,7 @@ export abstract class ViewContainerViewlet extends PanelViewlet implements IView
}
protected createView(viewDescriptor: IViewDescriptor, options: IViewletViewOptions): ViewletPanel {
return this.instantiationService.createInstance(viewDescriptor.ctor, options) as ViewletPanel;
return (this.instantiationService as any).createInstance(viewDescriptor.ctorDescriptor.ctor, ...(viewDescriptor.ctorDescriptor.arguments || []), options) as ViewletPanel;
}
protected getView(id: string): ViewletPanel {
+1 -2
View File
@@ -121,8 +121,7 @@ export interface IViewDescriptor {
readonly name: string;
// TODO@Sandeep do we really need this?!
readonly ctor: any;
readonly ctorDescriptor: { ctor: any, arguments?: any[] };
readonly when?: ContextKeyExpr;
@@ -112,11 +112,11 @@ Registry.as<PanelRegistry>(PanelExtensions.Panels).registerPanel(new PanelDescri
Registry.as<PanelRegistry>(PanelExtensions.Panels).setDefaultPanelId(REPL_ID);
// Register default debug views
ViewsRegistry.registerViews([{ id: VARIABLES_VIEW_ID, name: nls.localize('variables', "Variables"), ctor: VariablesView, order: 10, weight: 40, canToggleVisibility: true, focusCommand: { id: 'workbench.debug.action.focusVariablesView' } }], VIEW_CONTAINER);
ViewsRegistry.registerViews([{ id: WATCH_VIEW_ID, name: nls.localize('watch', "Watch"), ctor: WatchExpressionsView, order: 20, weight: 10, canToggleVisibility: true, focusCommand: { id: 'workbench.debug.action.focusWatchView' } }], VIEW_CONTAINER);
ViewsRegistry.registerViews([{ id: CALLSTACK_VIEW_ID, name: nls.localize('callStack', "Call Stack"), ctor: CallStackView, order: 30, weight: 30, canToggleVisibility: true, focusCommand: { id: 'workbench.debug.action.focusCallStackView' } }], VIEW_CONTAINER);
ViewsRegistry.registerViews([{ id: BREAKPOINTS_VIEW_ID, name: nls.localize('breakpoints', "Breakpoints"), ctor: BreakpointsView, order: 40, weight: 20, canToggleVisibility: true, focusCommand: { id: 'workbench.debug.action.focusBreakpointsView' } }], VIEW_CONTAINER);
ViewsRegistry.registerViews([{ id: LOADED_SCRIPTS_VIEW_ID, name: nls.localize('loadedScripts', "Loaded Scripts"), ctor: LoadedScriptsView, order: 35, weight: 5, canToggleVisibility: true, collapsed: true, when: CONTEXT_LOADED_SCRIPTS_SUPPORTED }], VIEW_CONTAINER);
ViewsRegistry.registerViews([{ id: VARIABLES_VIEW_ID, name: nls.localize('variables', "Variables"), ctorDescriptor: { ctor: VariablesView }, order: 10, weight: 40, canToggleVisibility: true, focusCommand: { id: 'workbench.debug.action.focusVariablesView' } }], VIEW_CONTAINER);
ViewsRegistry.registerViews([{ id: WATCH_VIEW_ID, name: nls.localize('watch', "Watch"), ctorDescriptor: { ctor: WatchExpressionsView }, order: 20, weight: 10, canToggleVisibility: true, focusCommand: { id: 'workbench.debug.action.focusWatchView' } }], VIEW_CONTAINER);
ViewsRegistry.registerViews([{ id: CALLSTACK_VIEW_ID, name: nls.localize('callStack', "Call Stack"), ctorDescriptor: { ctor: CallStackView }, order: 30, weight: 30, canToggleVisibility: true, focusCommand: { id: 'workbench.debug.action.focusCallStackView' } }], VIEW_CONTAINER);
ViewsRegistry.registerViews([{ id: BREAKPOINTS_VIEW_ID, name: nls.localize('breakpoints', "Breakpoints"), ctorDescriptor: { ctor: BreakpointsView }, order: 40, weight: 20, canToggleVisibility: true, focusCommand: { id: 'workbench.debug.action.focusBreakpointsView' } }], VIEW_CONTAINER);
ViewsRegistry.registerViews([{ id: LOADED_SCRIPTS_VIEW_ID, name: nls.localize('loadedScripts', "Loaded Scripts"), ctorDescriptor: { ctor: LoadedScriptsView }, order: 35, weight: 5, canToggleVisibility: true, collapsed: true, when: CONTEXT_LOADED_SCRIPTS_SUPPORTED }], VIEW_CONTAINER);
// register action to open viewlet
const registry = Registry.as<IWorkbenchActionRegistry>(WorkbenchActionRegistryExtensions.WorkbenchActions);
@@ -114,7 +114,7 @@ export class ExtensionsViewletViewsContribution implements IWorkbenchContributio
return {
id,
name: viewIdNameMappings[id],
ctor: ExtensionsListView,
ctorDescriptor: { ctor: ExtensionsListView },
when: ContextKeyExpr.and(ContextKeyExpr.has('searchExtensions'), ContextKeyExpr.not('searchInstalledExtensions'), ContextKeyExpr.not('searchBuiltInExtensions'), ContextKeyExpr.not('recommendedExtensions'), ContextKeyExpr.not('groupByServersContext')),
weight: 100
};
@@ -127,7 +127,7 @@ export class ExtensionsViewletViewsContribution implements IWorkbenchContributio
return {
id,
name: viewIdNameMappings[id],
ctor: EnabledExtensionsView,
ctorDescriptor: { ctor: EnabledExtensionsView },
when: ContextKeyExpr.and(ContextKeyExpr.not('searchExtensions'), ContextKeyExpr.has('hasInstalledExtensions')),
weight: 40,
canToggleVisibility: true,
@@ -142,7 +142,7 @@ export class ExtensionsViewletViewsContribution implements IWorkbenchContributio
return {
id,
name: viewIdNameMappings[id],
ctor: DisabledExtensionsView,
ctorDescriptor: { ctor: DisabledExtensionsView },
when: ContextKeyExpr.and(ContextKeyExpr.not('searchExtensions'), ContextKeyExpr.has('hasInstalledExtensions')),
weight: 10,
canToggleVisibility: true,
@@ -158,7 +158,7 @@ export class ExtensionsViewletViewsContribution implements IWorkbenchContributio
return {
id,
name: viewIdNameMappings[id],
ctor: ExtensionsListView,
ctorDescriptor: { ctor: ExtensionsListView },
when: ContextKeyExpr.and(ContextKeyExpr.not('searchExtensions'), ContextKeyExpr.not('hasInstalledExtensions')),
weight: 60,
order: 1
@@ -169,7 +169,7 @@ export class ExtensionsViewletViewsContribution implements IWorkbenchContributio
return [{
id: `server.extensionsList.${server.authority}`,
name: server.label,
ctor: GroupByServerExtensionsView,
ctorDescriptor: { ctor: GroupByServerExtensionsView },
when: ContextKeyExpr.has('groupByServersContext'),
weight: 100
}];
@@ -183,7 +183,7 @@ export class ExtensionsViewletViewsContribution implements IWorkbenchContributio
return {
id,
name: viewIdNameMappings[id],
ctor: DefaultRecommendedExtensionsView,
ctorDescriptor: { ctor: DefaultRecommendedExtensionsView },
when: ContextKeyExpr.and(ContextKeyExpr.not('searchExtensions'), ContextKeyExpr.has('defaultRecommendedExtensions')),
weight: 40,
order: 2,
@@ -198,7 +198,7 @@ export class ExtensionsViewletViewsContribution implements IWorkbenchContributio
return {
id,
name: viewIdNameMappings[id],
ctor: RecommendedExtensionsView,
ctorDescriptor: { ctor: RecommendedExtensionsView },
when: ContextKeyExpr.has('recommendedExtensions'),
weight: 50,
canToggleVisibility: true,
@@ -213,7 +213,7 @@ export class ExtensionsViewletViewsContribution implements IWorkbenchContributio
return {
id,
name: viewIdNameMappings[id],
ctor: WorkspaceRecommendedExtensionsView,
ctorDescriptor: { ctor: WorkspaceRecommendedExtensionsView },
when: ContextKeyExpr.and(ContextKeyExpr.has('recommendedExtensions'), ContextKeyExpr.has('nonEmptyWorkspace')),
weight: 50,
canToggleVisibility: true,
@@ -226,7 +226,7 @@ export class ExtensionsViewletViewsContribution implements IWorkbenchContributio
return {
id,
name: viewIdNameMappings[id],
ctor: BuiltInExtensionsView,
ctorDescriptor: { ctor: BuiltInExtensionsView },
when: ContextKeyExpr.has('searchBuiltInExtensions'),
weight: 100,
canToggleVisibility: true
@@ -238,7 +238,7 @@ export class ExtensionsViewletViewsContribution implements IWorkbenchContributio
return {
id,
name: viewIdNameMappings[id],
ctor: BuiltInThemesExtensionsView,
ctorDescriptor: { ctor: BuiltInThemesExtensionsView },
when: ContextKeyExpr.has('searchBuiltInExtensions'),
weight: 100,
canToggleVisibility: true
@@ -250,7 +250,7 @@ export class ExtensionsViewletViewsContribution implements IWorkbenchContributio
return {
id,
name: viewIdNameMappings[id],
ctor: BuiltInBasicsExtensionsView,
ctorDescriptor: { ctor: BuiltInBasicsExtensionsView },
when: ContextKeyExpr.has('searchBuiltInExtensions'),
weight: 100,
canToggleVisibility: true
@@ -99,7 +99,7 @@ export class ExplorerViewletViewsContribution extends Disposable implements IWor
return {
id: OpenEditorsView.ID,
name: OpenEditorsView.NAME,
ctor: OpenEditorsView,
ctorDescriptor: { ctor: OpenEditorsView },
order: 0,
when: OpenEditorsVisibleCondition,
canToggleVisibility: true,
@@ -114,7 +114,7 @@ export class ExplorerViewletViewsContribution extends Disposable implements IWor
return {
id: EmptyView.ID,
name: EmptyView.NAME,
ctor: EmptyView,
ctorDescriptor: { ctor: EmptyView },
order: 1,
canToggleVisibility: false
};
@@ -124,7 +124,7 @@ export class ExplorerViewletViewsContribution extends Disposable implements IWor
return {
id: ExplorerView.ID,
name: localize('folders', "Folders"),
ctor: ExplorerView,
ctorDescriptor: { ctor: ExplorerView },
order: 1,
canToggleVisibility: false
};
@@ -14,7 +14,7 @@ import { OutlineConfigKeys, OutlineViewId } from 'vs/editor/contrib/documentSymb
const _outlineDesc = <IViewDescriptor>{
id: OutlineViewId,
name: localize('name', "Outline"),
ctor: OutlinePanel,
ctorDescriptor: { ctor: OutlinePanel },
canToggleVisibility: true,
hideByDefault: false,
collapsed: true,
@@ -1366,7 +1366,7 @@ export class SCMViewlet extends PanelViewlet implements IViewModel, IViewsViewle
const panelsToAdd: { panel: ViewletPanel, size: number, index: number }[] = [];
for (const { viewDescriptor, collapsed, index, size } of added) {
const panel = this.instantiationService.createInstance(viewDescriptor.ctor, <IViewletPanelOptions>{
const panel = this.instantiationService.createInstance(viewDescriptor.ctorDescriptor.ctor, <IViewletPanelOptions>{
id: viewDescriptor.id,
title: viewDescriptor.name,
actionRunner: this.getActionRunner(),
@@ -63,7 +63,7 @@ suite('ContributableViewsModel', () => {
const viewDescriptor: IViewDescriptor = {
id: 'view1',
ctor: null,
ctorDescriptor: null,
name: 'Test View 1'
};
@@ -89,7 +89,7 @@ suite('ContributableViewsModel', () => {
const viewDescriptor: IViewDescriptor = {
id: 'view1',
ctor: null,
ctorDescriptor: null,
name: 'Test View 1',
when: ContextKeyExpr.equals('showview1', true)
};
@@ -128,8 +128,8 @@ suite('ContributableViewsModel', () => {
const model = new ContributableViewsModel(container, viewsService);
const seq = new ViewDescriptorSequence(model);
const view1: IViewDescriptor = { id: 'view1', ctor: null, name: 'Test View 1' };
const view2: IViewDescriptor = { id: 'view2', ctor: null, name: 'Test View 2', when: ContextKeyExpr.equals('showview2', true) };
const view1: IViewDescriptor = { id: 'view1', ctorDescriptor: null, name: 'Test View 1' };
const view2: IViewDescriptor = { id: 'view2', ctorDescriptor: null, name: 'Test View 2', when: ContextKeyExpr.equals('showview2', true) };
ViewsRegistry.registerViews([view1, view2], container);
assert.deepEqual(model.visibleViewDescriptors, [view1], 'only view1 should be visible');
@@ -151,8 +151,8 @@ suite('ContributableViewsModel', () => {
const model = new ContributableViewsModel(container, viewsService);
const seq = new ViewDescriptorSequence(model);
const view1: IViewDescriptor = { id: 'view1', ctor: null, name: 'Test View 1', when: ContextKeyExpr.equals('showview1', true) };
const view2: IViewDescriptor = { id: 'view2', ctor: null, name: 'Test View 2' };
const view1: IViewDescriptor = { id: 'view1', ctorDescriptor: null, name: 'Test View 1', when: ContextKeyExpr.equals('showview1', true) };
const view2: IViewDescriptor = { id: 'view2', ctorDescriptor: null, name: 'Test View 2' };
ViewsRegistry.registerViews([view1, view2], container);
assert.deepEqual(model.visibleViewDescriptors, [view2], 'only view2 should be visible');
@@ -174,9 +174,9 @@ suite('ContributableViewsModel', () => {
const model = new ContributableViewsModel(container, viewsService);
const seq = new ViewDescriptorSequence(model);
const view1: IViewDescriptor = { id: 'view1', ctor: null, name: 'Test View 1', canToggleVisibility: true };
const view2: IViewDescriptor = { id: 'view2', ctor: null, name: 'Test View 2', canToggleVisibility: true };
const view3: IViewDescriptor = { id: 'view3', ctor: null, name: 'Test View 3', canToggleVisibility: true };
const view1: IViewDescriptor = { id: 'view1', ctorDescriptor: null, name: 'Test View 1', canToggleVisibility: true };
const view2: IViewDescriptor = { id: 'view2', ctorDescriptor: null, name: 'Test View 2', canToggleVisibility: true };
const view3: IViewDescriptor = { id: 'view3', ctorDescriptor: null, name: 'Test View 3', canToggleVisibility: true };
ViewsRegistry.registerViews([view1, view2, view3], container);
assert.deepEqual(model.visibleViewDescriptors, [view1, view2, view3]);
@@ -219,9 +219,9 @@ suite('ContributableViewsModel', () => {
const model = new ContributableViewsModel(container, viewsService);
const seq = new ViewDescriptorSequence(model);
const view1: IViewDescriptor = { id: 'view1', ctor: null, name: 'Test View 1' };
const view2: IViewDescriptor = { id: 'view2', ctor: null, name: 'Test View 2' };
const view3: IViewDescriptor = { id: 'view3', ctor: null, name: 'Test View 3' };
const view1: IViewDescriptor = { id: 'view1', ctorDescriptor: null, name: 'Test View 1' };
const view2: IViewDescriptor = { id: 'view2', ctorDescriptor: null, name: 'Test View 2' };
const view3: IViewDescriptor = { id: 'view3', ctorDescriptor: null, name: 'Test View 3' };
ViewsRegistry.registerViews([view1, view2, view3], container);
assert.deepEqual(model.visibleViewDescriptors, [view1, view2, view3], 'model views should be OK');