提交 68521e35 编写于 作者: B Benjamin Pasero

grid - replaceEditors() on editor service

上级 29226976
......@@ -24,8 +24,8 @@ import { basename } from 'vs/base/common/paths';
import { DiffEditorInput } from 'vs/workbench/common/editor/diffEditorInput';
import { localize } from 'vs/nls';
import { TPromise } from 'vs/base/common/winjs.base';
import { INextEditorGroupsService, INextEditorGroup, GroupDirection, GroupsOrder } from 'vs/workbench/services/group/common/nextEditorGroupsService';
import { INextEditorService, IResourceEditor, ACTIVE_GROUP_TYPE, SIDE_GROUP_TYPE, SIDE_GROUP, ACTIVE_GROUP } from 'vs/workbench/services/editor/common/nextEditorService';
import { INextEditorGroupsService, INextEditorGroup, GroupDirection, GroupsOrder, IEditorReplacement } from 'vs/workbench/services/group/common/nextEditorGroupsService';
import { INextEditorService, IResourceEditor, ACTIVE_GROUP_TYPE, SIDE_GROUP_TYPE, SIDE_GROUP, ACTIVE_GROUP, IResourceEditorReplacement } from 'vs/workbench/services/editor/common/nextEditorService';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { Disposable, IDisposable, dispose } from 'vs/base/common/lifecycle';
import { coalesce } from 'vs/base/common/arrays';
......@@ -390,6 +390,35 @@ export class NextEditorService extends Disposable implements INextEditorService,
//#endregion
//#region replaceEditors()
replaceEditors(editors: IResourceEditorReplacement[], group: INextEditorGroup | GroupIdentifier): TPromise<void>;
replaceEditors(editors: IEditorReplacement[], group: INextEditorGroup | GroupIdentifier): TPromise<void>;
replaceEditors(editors: (IEditorReplacement | IResourceEditorReplacement)[], group: INextEditorGroup | GroupIdentifier): TPromise<void> {
const typedEditors: IEditorReplacement[] = [];
editors.forEach(replaceEditorArg => {
if (replaceEditorArg.editor instanceof EditorInput) {
typedEditors.push(replaceEditorArg as IEditorReplacement);
} else {
const editor = replaceEditorArg.editor as IResourceEditor;
const typedEditor = this.createInput(editor);
const replacementEditor = this.createInput(replaceEditorArg.replacement as IResourceEditor);
typedEditors.push({
editor: typedEditor,
replacement: replacementEditor,
options: this.toOptions(editor.options)
});
}
});
const targetGroup = typeof group === 'number' ? this.nextEditorGroupsService.getGroup(group) : group;
return targetGroup.replaceEditors(typedEditors);
}
//#endregion
//#region closeEditor()
closeEditor(editor: IEditorInput, group: INextEditorGroup | GroupIdentifier): TPromise<void> {
......
......@@ -10,13 +10,18 @@ import { IResourceInput, IEditorOptions } from 'vs/platform/editor/common/editor
import { IEditorInput, IEditor, GroupIdentifier, IEditorOpeningEvent, IEditorInputWithOptions, IEditorIdentifier, IUntitledResourceInput, IResourceDiffInput, IResourceSideBySideInput } from 'vs/workbench/common/editor';
import { Event } from 'vs/base/common/event';
import { IEditor as ITextEditor } from 'vs/editor/common/editorCommon';
import { INextEditorGroup } from 'vs/workbench/services/group/common/nextEditorGroupsService';
import { INextEditorGroup, IEditorReplacement } from 'vs/workbench/services/group/common/nextEditorGroupsService';
import { TPromise } from 'vs/base/common/winjs.base';
export const INextEditorService = createDecorator<INextEditorService>('nextEditorService');
export type IResourceEditor = IResourceInput | IUntitledResourceInput | IResourceDiffInput | IResourceSideBySideInput;
export interface IResourceEditorReplacement {
editor: IResourceEditor;
replacement: IResourceEditor;
}
export const ACTIVE_GROUP = -1;
export type ACTIVE_GROUP_TYPE = typeof ACTIVE_GROUP;
......@@ -124,6 +129,17 @@ export interface INextEditorService {
openEditors(editors: IEditorInputWithOptions[], group?: INextEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE): TPromise<ReadonlyArray<IEditor>>;
openEditors(editors: IResourceEditor[], group?: INextEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE): TPromise<ReadonlyArray<IEditor>>;
/**
* Replaces editors in an editor group with the provided replacement.
*
* @param editors the editors to replace
*
* @returns a promise that is resolved when the replaced active
* editor (if any) has finished loading.
*/
replaceEditors(editors: IResourceEditorReplacement[], group: INextEditorGroup | GroupIdentifier): TPromise<void>;
replaceEditors(editors: IEditorReplacement[], group: INextEditorGroup | GroupIdentifier): TPromise<void>;
/**
* Find out if the provided editor (or resource of an editor) is opened in any group.
*
......
......@@ -146,6 +146,32 @@ suite('Editor service (editor2)', () => {
});
});
test('openEditors() / replaceEditors()', function () {
const partInstantiator = workbenchInstantiationService();
const part = partInstantiator.createInstance(NextEditorPart, 'id', false);
part.create(document.createElement('div'));
part.layout(new Dimension(400, 300));
const testInstantiationService = partInstantiator.createChild(new ServiceCollection([INextEditorGroupsService, part]));
const service: INextEditorService = testInstantiationService.createInstance(NextEditorService);
const input = testInstantiationService.createInstance(TestEditorInput, URI.parse('my://resource'));
const otherInput = testInstantiationService.createInstance(TestEditorInput, URI.parse('my://resource2'));
const replaceInput = testInstantiationService.createInstance(TestEditorInput, URI.parse('my://resource3'));
// Open editors
return service.openEditors([{ editor: input }, { editor: otherInput }]).then(() => {
assert.equal(part.activeGroup.count, 2);
return service.replaceEditors([{ editor: input, replacement: replaceInput }], part.activeGroup).then(() => {
assert.equal(part.activeGroup.count, 2);
assert.equal(part.activeGroup.getIndexOfEditor(replaceInput), 0);
});
});
});
test('caching', function () {
const instantiationService = workbenchInstantiationService();
const service: NextEditorService = <any>instantiationService.createInstance(NextEditorService);
......
......@@ -890,6 +890,10 @@ export class TestNextEditorService implements INextEditorService {
return TPromise.as(null);
}
replaceEditors(editors: any, group: any) {
return TPromise.as(void 0);
}
invokeWithinEditorContext<T>(fn: (accessor: ServicesAccessor) => T): T {
return fn(null);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册