提交 7d213a52 编写于 作者: B Benjamin Pasero

debt - add another resource input for side by side use

上级 2316aa0b
...@@ -37,7 +37,25 @@ export interface IEditorModel { ...@@ -37,7 +37,25 @@ export interface IEditorModel {
dispose(): void; dispose(): void;
} }
export interface IResourceInput { export interface IBaseResourceInput {
/**
* Optional options to use when opening the text input.
*/
options?: ITextEditorOptions;
/**
* Label to show for the diff editor
*/
label?: string;
/**
* Description to show for the diff editor
*/
description?: string;
}
export interface IResourceInput extends IBaseResourceInput {
/** /**
* The resource URL of the resource to open. * The resource URL of the resource to open.
...@@ -48,14 +66,9 @@ export interface IResourceInput { ...@@ -48,14 +66,9 @@ export interface IResourceInput {
* The encoding of the text input if known. * The encoding of the text input if known.
*/ */
encoding?: string; encoding?: string;
/**
* Optional options to use when opening the text input.
*/
options?: ITextEditorOptions;
} }
export interface IResourceDiffInput { export interface IResourceDiffInput extends IBaseResourceInput {
/** /**
* The left hand side URI to open inside a diff editor. * The left hand side URI to open inside a diff editor.
...@@ -66,21 +79,19 @@ export interface IResourceDiffInput { ...@@ -66,21 +79,19 @@ export interface IResourceDiffInput {
* The right hand side URI to open inside a diff editor. * The right hand side URI to open inside a diff editor.
*/ */
rightResource: URI; rightResource: URI;
}
/** export interface IResourceSideBySideInput extends IBaseResourceInput {
* Label to show for the diff editor
*/
label?: string;
/** /**
* Description to show for the diff editor * The right hand side URI to open inside a side by side editor.
*/ */
description?: string; masterResource: URI;
/** /**
* Optional options to use when opening the text diff input. * The left hand side URI to open inside a side by side editor.
*/ */
options?: ITextEditorOptions; detailResource: URI;
} }
export interface IEditorControl { export interface IEditorControl {
......
...@@ -11,7 +11,7 @@ import types = require('vs/base/common/types'); ...@@ -11,7 +11,7 @@ import types = require('vs/base/common/types');
import URI from 'vs/base/common/uri'; import URI from 'vs/base/common/uri';
import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { IEditor, ICommonCodeEditor, IEditorViewState, IEditorOptions as ICodeEditorOptions, IModel } from 'vs/editor/common/editorCommon'; import { IEditor, ICommonCodeEditor, IEditorViewState, IEditorOptions as ICodeEditorOptions, IModel } from 'vs/editor/common/editorCommon';
import { IEditorInput, IEditorModel, IEditorOptions, ITextEditorOptions, IResourceInput, IResourceDiffInput, Position } from 'vs/platform/editor/common/editor'; import { IEditorInput, IEditorModel, IEditorOptions, ITextEditorOptions, IBaseResourceInput, Position } from 'vs/platform/editor/common/editor';
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
import { IEditorGroupService } from 'vs/workbench/services/group/common/groupService'; import { IEditorGroupService } from 'vs/workbench/services/group/common/groupService';
import { SyncDescriptor, AsyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; import { SyncDescriptor, AsyncDescriptor } from 'vs/platform/instantiation/common/descriptors';
...@@ -577,7 +577,7 @@ export class TextEditorOptions extends EditorOptions { ...@@ -577,7 +577,7 @@ export class TextEditorOptions extends EditorOptions {
private editorViewState: IEditorViewState; private editorViewState: IEditorViewState;
private editorOptions: ICodeEditorOptions; private editorOptions: ICodeEditorOptions;
public static from(input: IResourceInput | IResourceDiffInput): TextEditorOptions { public static from(input: IBaseResourceInput): TextEditorOptions {
let options: TextEditorOptions = null; let options: TextEditorOptions = null;
if (input && input.options) { if (input && input.options) {
if (input.options.selection || input.options.forceOpen || input.options.revealIfVisible || input.options.preserveFocus || input.options.pinned || input.options.inactive || typeof input.options.index === 'number') { if (input.options.selection || input.options.forceOpen || input.options.revealIfVisible || input.options.preserveFocus || input.options.pinned || input.options.inactive || typeof input.options.index === 'number') {
......
...@@ -15,7 +15,7 @@ import { ResourceEditorInput } from 'vs/workbench/common/editor/resourceEditorIn ...@@ -15,7 +15,7 @@ import { ResourceEditorInput } from 'vs/workbench/common/editor/resourceEditorIn
import { UntitledEditorInput } from 'vs/workbench/common/editor/untitledEditorInput'; import { UntitledEditorInput } from 'vs/workbench/common/editor/untitledEditorInput';
import { IUntitledEditorService } from 'vs/workbench/services/untitled/common/untitledEditorService'; import { IUntitledEditorService } from 'vs/workbench/services/untitled/common/untitledEditorService';
import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService';
import { IEditorInput, IEditorOptions, ITextEditorOptions, Position, Direction, IEditor, IResourceInput, IResourceDiffInput } from 'vs/platform/editor/common/editor'; import { IEditorInput, IEditorOptions, ITextEditorOptions, Position, Direction, IEditor, IResourceInput, IResourceDiffInput, IResourceSideBySideInput } from 'vs/platform/editor/common/editor';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { AsyncDescriptor0 } from 'vs/platform/instantiation/common/descriptors'; import { AsyncDescriptor0 } from 'vs/platform/instantiation/common/descriptors';
import { DiffEditorInput, toDiffLabel } from 'vs/workbench/common/editor/diffEditorInput'; import { DiffEditorInput, toDiffLabel } from 'vs/workbench/common/editor/diffEditorInput';
...@@ -88,8 +88,8 @@ export class WorkbenchEditorService implements IWorkbenchEditorService { ...@@ -88,8 +88,8 @@ export class WorkbenchEditorService implements IWorkbenchEditorService {
public openEditor(input: IEditorInput, options?: IEditorOptions, sideBySide?: boolean): TPromise<IEditor>; public openEditor(input: IEditorInput, options?: IEditorOptions, sideBySide?: boolean): TPromise<IEditor>;
public openEditor(input: IEditorInput, options?: IEditorOptions, position?: Position): TPromise<IEditor>; public openEditor(input: IEditorInput, options?: IEditorOptions, position?: Position): TPromise<IEditor>;
public openEditor(input: IResourceInput | IResourceDiffInput, position?: Position): TPromise<IEditor>; public openEditor(input: IResourceInput | IResourceDiffInput | IResourceSideBySideInput, position?: Position): TPromise<IEditor>;
public openEditor(input: IResourceInput | IResourceDiffInput, sideBySide?: boolean): TPromise<IEditor>; public openEditor(input: IResourceInput | IResourceDiffInput | IResourceSideBySideInput, sideBySide?: boolean): TPromise<IEditor>;
public openEditor(input: any, arg2?: any, arg3?: any): TPromise<IEditor> { public openEditor(input: any, arg2?: any, arg3?: any): TPromise<IEditor> {
if (!input) { if (!input) {
return TPromise.as<IEditor>(null); return TPromise.as<IEditor>(null);
...@@ -112,7 +112,7 @@ export class WorkbenchEditorService implements IWorkbenchEditorService { ...@@ -112,7 +112,7 @@ export class WorkbenchEditorService implements IWorkbenchEditorService {
} }
// Untyped Text Editor Support (required for code that uses this service below workbench level) // Untyped Text Editor Support (required for code that uses this service below workbench level)
const textInput = <IResourceInput | IResourceDiffInput>input; const textInput = <IResourceInput | IResourceDiffInput | IResourceSideBySideInput>input;
return this.createInput(textInput).then(typedInput => { return this.createInput(textInput).then(typedInput => {
if (typedInput) { if (typedInput) {
return this.doOpenEditor(typedInput, TextEditorOptions.from(textInput), arg2); return this.doOpenEditor(typedInput, TextEditorOptions.from(textInput), arg2);
...@@ -144,7 +144,7 @@ export class WorkbenchEditorService implements IWorkbenchEditorService { ...@@ -144,7 +144,7 @@ export class WorkbenchEditorService implements IWorkbenchEditorService {
return this.editorPart.openEditor(input, options, arg3); return this.editorPart.openEditor(input, options, arg3);
} }
public openEditors(editors: { input: IResourceInput | IResourceDiffInput, position: Position }[]): TPromise<IEditor[]>; public openEditors(editors: { input: IResourceInput | IResourceDiffInput | IResourceSideBySideInput, position: Position }[]): TPromise<IEditor[]>;
public openEditors(editors: { input: IEditorInput, position: Position, options?: IEditorOptions }[]): TPromise<IEditor[]>; public openEditors(editors: { input: IEditorInput, position: Position, options?: IEditorOptions }[]): TPromise<IEditor[]>;
public openEditors(editors: any[]): TPromise<IEditor[]> { public openEditors(editors: any[]): TPromise<IEditor[]> {
return TPromise.join(editors.map(editor => this.createInput(editor.input))).then(inputs => { return TPromise.join(editors.map(editor => this.createInput(editor.input))).then(inputs => {
...@@ -162,7 +162,7 @@ export class WorkbenchEditorService implements IWorkbenchEditorService { ...@@ -162,7 +162,7 @@ export class WorkbenchEditorService implements IWorkbenchEditorService {
}); });
} }
public replaceEditors(editors: { toReplace: IResourceInput | IResourceDiffInput, replaceWith: IResourceInput | IResourceDiffInput }[]): TPromise<BaseEditor[]>; public replaceEditors(editors: { toReplace: IResourceInput | IResourceDiffInput | IResourceSideBySideInput, replaceWith: IResourceInput | IResourceDiffInput | IResourceSideBySideInput }[]): TPromise<BaseEditor[]>;
public replaceEditors(editors: { toReplace: IEditorInput, replaceWith: IEditorInput, options?: IEditorOptions }[]): TPromise<BaseEditor[]>; public replaceEditors(editors: { toReplace: IEditorInput, replaceWith: IEditorInput, options?: IEditorOptions }[]): TPromise<BaseEditor[]>;
public replaceEditors(editors: any[]): TPromise<BaseEditor[]> { public replaceEditors(editors: any[]): TPromise<BaseEditor[]> {
return TPromise.join(editors.map(editor => this.createInput(editor.toReplace))).then(toReplaceInputs => { return TPromise.join(editors.map(editor => this.createInput(editor.toReplace))).then(toReplaceInputs => {
...@@ -195,7 +195,7 @@ export class WorkbenchEditorService implements IWorkbenchEditorService { ...@@ -195,7 +195,7 @@ export class WorkbenchEditorService implements IWorkbenchEditorService {
} }
public createInput(input: IEditorInput): TPromise<EditorInput>; public createInput(input: IEditorInput): TPromise<EditorInput>;
public createInput(input: IResourceInput | IResourceDiffInput): TPromise<EditorInput>; public createInput(input: IResourceInput | IResourceDiffInput | IResourceSideBySideInput): TPromise<EditorInput>;
public createInput(input: any): TPromise<IEditorInput> { public createInput(input: any): TPromise<IEditorInput> {
// Workbench Input Support // Workbench Input Support
...@@ -203,6 +203,16 @@ export class WorkbenchEditorService implements IWorkbenchEditorService { ...@@ -203,6 +203,16 @@ export class WorkbenchEditorService implements IWorkbenchEditorService {
return TPromise.as<EditorInput>(input); return TPromise.as<EditorInput>(input);
} }
// Side by Side Support
const resourceSideBySideInput = <IResourceSideBySideInput>input;
if (resourceSideBySideInput.masterResource && resourceSideBySideInput.detailResource) {
return this.createInput({ resource: resourceSideBySideInput.masterResource }).then(masterInput => {
return this.createInput({ resource: resourceSideBySideInput.detailResource }).then(detailInput => {
return new SideBySideEditorInput(resourceSideBySideInput.label || masterInput.getName(), resourceSideBySideInput.description || masterInput.getDescription(), detailInput, masterInput);
});
});
}
// Diff Editor Support // Diff Editor Support
const resourceDiffInput = <IResourceDiffInput>input; const resourceDiffInput = <IResourceDiffInput>input;
if (resourceDiffInput.leftResource && resourceDiffInput.rightResource) { if (resourceDiffInput.leftResource && resourceDiffInput.rightResource) {
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
import { TPromise } from 'vs/base/common/winjs.base'; import { TPromise } from 'vs/base/common/winjs.base';
import { createDecorator, ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation'; import { createDecorator, ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation';
import { IEditorService, IEditor, IEditorInput, IEditorOptions, ITextEditorOptions, Position, Direction, IResourceInput, IResourceDiffInput } from 'vs/platform/editor/common/editor'; import { IEditorService, IEditor, IEditorInput, IEditorOptions, ITextEditorOptions, Position, Direction, IResourceInput, IResourceDiffInput, IResourceSideBySideInput } from 'vs/platform/editor/common/editor';
export const IWorkbenchEditorService = createDecorator<IWorkbenchEditorService>('editorService'); export const IWorkbenchEditorService = createDecorator<IWorkbenchEditorService>('editorService');
...@@ -49,23 +49,23 @@ export interface IWorkbenchEditorService extends IEditorService { ...@@ -49,23 +49,23 @@ export interface IWorkbenchEditorService extends IEditorService {
openEditor(input: IEditorInput, options?: IEditorOptions | ITextEditorOptions, sideBySide?: boolean): TPromise<IEditor>; openEditor(input: IEditorInput, options?: IEditorOptions | ITextEditorOptions, sideBySide?: boolean): TPromise<IEditor>;
/** /**
* Specific overload to open an instance of IResourceInput and IResourceDiffInput. * Specific overload to open an instance of IResourceInput, IResourceDiffInput or IResourceSideBySideInput.
*/ */
openEditor(input: IResourceInput | IResourceDiffInput, position?: Position): TPromise<IEditor>; openEditor(input: IResourceInput | IResourceDiffInput | IResourceSideBySideInput, position?: Position): TPromise<IEditor>;
openEditor(input: IResourceInput | IResourceDiffInput, sideBySide?: boolean): TPromise<IEditor>; openEditor(input: IResourceInput | IResourceDiffInput | IResourceSideBySideInput, sideBySide?: boolean): TPromise<IEditor>;
/** /**
* Similar to #openEditor() but allows to open multiple editors for different positions at the same time. If there are * 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. * more than one editor per position, only the first one will be active and the others stacked behind inactive.
*/ */
openEditors(editors: { input: IResourceInput | IResourceDiffInput, position: Position }[]): TPromise<IEditor[]>; openEditors(editors: { input: IResourceInput | IResourceDiffInput | IResourceSideBySideInput, position: Position }[]): TPromise<IEditor[]>;
openEditors(editors: { input: IEditorInput, position: Position, options?: IEditorOptions | ITextEditorOptions }[]): TPromise<IEditor[]>; openEditors(editors: { input: IEditorInput, position: Position, options?: IEditorOptions | ITextEditorOptions }[]): TPromise<IEditor[]>;
/** /**
* Given a list of editors to replace, will look across all groups where this editor is open (active or hidden) * Given a list of editors to replace, will look across all groups where this editor is open (active or hidden)
* and replace it with the new editor and the provied options. * and replace it with the new editor and the provied options.
*/ */
replaceEditors(editors: { toReplace: IResourceInput | IResourceDiffInput, replaceWith: IResourceInput | IResourceDiffInput }[]): TPromise<IEditor[]>; replaceEditors(editors: { toReplace: IResourceInput | IResourceDiffInput | IResourceSideBySideInput, replaceWith: IResourceInput | IResourceDiffInput | IResourceSideBySideInput }[]): TPromise<IEditor[]>;
replaceEditors(editors: { toReplace: IEditorInput, replaceWith: IEditorInput, options?: IEditorOptions | ITextEditorOptions }[]): TPromise<IEditor[]>; replaceEditors(editors: { toReplace: IEditorInput, replaceWith: IEditorInput, options?: IEditorOptions | ITextEditorOptions }[]): TPromise<IEditor[]>;
/** /**
...@@ -88,5 +88,5 @@ export interface IWorkbenchEditorService extends IEditorService { ...@@ -88,5 +88,5 @@ export interface IWorkbenchEditorService extends IEditorService {
/** /**
* Allows to resolve an untyped input to a workbench typed instanceof editor input * Allows to resolve an untyped input to a workbench typed instanceof editor input
*/ */
createInput(input: IResourceInput | IResourceDiffInput): TPromise<IEditorInput>; createInput(input: IResourceInput | IResourceDiffInput | IResourceSideBySideInput): TPromise<IEditorInput>;
} }
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册