diff --git a/src/vs/workbench/browser/parts/editor/editorPart.ts b/src/vs/workbench/browser/parts/editor/editorPart.ts index 7f3b63746eccfee4919ef1f24dde5423ef21e6cb..12db963e34b53064c243da22c42e7d0a3f0ea31d 100644 --- a/src/vs/workbench/browser/parts/editor/editorPart.ts +++ b/src/vs/workbench/browser/parts/editor/editorPart.ts @@ -1100,7 +1100,9 @@ export class EditorPart extends Part implements IEditorPart, IEditorGroupService return res; } - public openEditors(editors: { input: EditorInput, position: Position, options?: EditorOptions }[]): TPromise { + public openEditors(editors: { input: EditorInput, position?: Position, options?: EditorOptions }[]): TPromise; + public openEditors(editors: { input: EditorInput, options?: EditorOptions }[], sideBySide?: boolean): TPromise; + public openEditors(editors: { input: EditorInput, position?: Position, options?: EditorOptions }[], sideBySide?: boolean): TPromise { if (!editors.length) { return TPromise.as([]); } @@ -1112,7 +1114,7 @@ export class EditorPart extends Part implements IEditorPart, IEditorGroupService const ratio = this.editorGroupsControl.getRatio(); - return this.doOpenEditors(editors, activePosition, ratio); + return this.doOpenEditors(editors, activePosition, ratio, sideBySide); } public hasEditorsToRestore(): boolean { @@ -1143,7 +1145,15 @@ export class EditorPart extends Part implements IEditorPart, IEditorGroupService return this._onEditorsChanged.throttle(this.doOpenEditors(editors, activePosition, editorState && editorState.ratio)); } - private doOpenEditors(editors: { input: EditorInput, position: Position, options?: EditorOptions }[], activePosition?: number, ratio?: number[]): TPromise { + private doOpenEditors(editors: { input: EditorInput, position?: Position, options?: EditorOptions }[], activePosition?: number, ratio?: number[], sideBySide?: boolean): TPromise { + + // Find position if not provided already from calling side + editors.forEach(editor => { + if (typeof editor.position !== 'number') { + editor.position = this.findPosition(editor.input, editor.options, sideBySide); + } + }); + const positionOneEditors = editors.filter(e => e.position === Position.ONE); const positionTwoEditors = editors.filter(e => e.position === Position.TWO); const positionThreeEditors = editors.filter(e => e.position === Position.THREE); diff --git a/src/vs/workbench/services/editor/common/editorService.ts b/src/vs/workbench/services/editor/common/editorService.ts index 1debca50ef74bee3010e1a6352257193f587a57e..1af2ed59488378eab0e4512f7d6ec6c0bb204187 100644 --- a/src/vs/workbench/services/editor/common/editorService.ts +++ b/src/vs/workbench/services/editor/common/editorService.ts @@ -68,8 +68,10 @@ export interface IWorkbenchEditorService extends IEditorService { * Similar to #openEditor() but allows to open multiple editors for different positions at the same time. If there are * more than one editor per position, only the first one will be active and the others stacked behind inactive. */ - openEditors(editors: { input: IResourceInputType, position: Position }[]): TPromise; - openEditors(editors: { input: IEditorInput, position: Position, options?: IEditorOptions | ITextEditorOptions }[]): TPromise; + openEditors(editors: { input: IResourceInputType, position?: Position }[]): TPromise; + openEditors(editors: { input: IEditorInput, position?: Position, options?: IEditorOptions | ITextEditorOptions }[]): TPromise; + openEditors(editors: { input: IResourceInputType }[], sideBySide?: boolean): TPromise; + openEditors(editors: { input: IEditorInput, options?: IEditorOptions | ITextEditorOptions }[], sideBySide?: boolean): TPromise; /** * Given a list of editors to replace, will look across all groups where this editor is open (active or hidden) @@ -104,7 +106,8 @@ export interface IWorkbenchEditorService extends IEditorService { export interface IEditorPart { openEditor(input?: IEditorInput, options?: IEditorOptions | ITextEditorOptions, sideBySide?: boolean): TPromise; openEditor(input?: IEditorInput, options?: IEditorOptions | ITextEditorOptions, position?: Position): TPromise; - openEditors(editors: { input: IEditorInput, position: Position, options?: IEditorOptions | ITextEditorOptions }[]): TPromise; + openEditors(editors: { input: IEditorInput, position?: Position, options?: IEditorOptions | ITextEditorOptions }[]): TPromise; + openEditors(editors: { input: IEditorInput, options?: IEditorOptions | ITextEditorOptions }[], sideBySide?: boolean): TPromise; replaceEditors(editors: { toReplace: IEditorInput, replaceWith: IEditorInput, options?: IEditorOptions | ITextEditorOptions }[], position?: Position): TPromise; closeEditor(position: Position, input: IEditorInput): TPromise; closeEditors(position: Position, filter?: { except?: IEditorInput, direction?: Direction, unmodifiedOnly?: boolean }): TPromise; @@ -208,7 +211,9 @@ export class WorkbenchEditorService implements IWorkbenchEditorService { public openEditors(editors: { input: IResourceInputType, position: Position }[]): TPromise; public openEditors(editors: { input: IEditorInput, position: Position, options?: IEditorOptions }[]): TPromise; - public openEditors(editors: any[]): TPromise { + public openEditors(editors: { input: IResourceInputType }[], sideBySide?: boolean): TPromise; + public openEditors(editors: { input: IEditorInput, options?: IEditorOptions }[], sideBySide?: boolean): TPromise; + public openEditors(editors: any[], sideBySide?: boolean): TPromise { const inputs = editors.map(editor => this.createInput(editor.input)); const typedInputs: { input: IEditorInput, position: Position, options?: EditorOptions }[] = inputs.map((input, index) => { const options = editors[index].input instanceof EditorInput ? this.toOptions(editors[index].options) : TextEditorOptions.from(editors[index].input); @@ -220,7 +225,7 @@ export class WorkbenchEditorService implements IWorkbenchEditorService { }; }); - return this.editorPart.openEditors(typedInputs); + return this.editorPart.openEditors(typedInputs, sideBySide); } public replaceEditors(editors: { toReplace: IResourceInputType, replaceWith: IResourceInputType }[], position?: Position): TPromise;