提交 5b4225ca 编写于 作者: B Benjamin Pasero

grid - implement replaceEditors()

上级 480cdae3
......@@ -993,6 +993,73 @@ export class NextEditorGroupView extends Themable implements INextEditorGroupVie
//#endregion
//#region replaceEditors()
replaceEditors(editors: EditorReplacement[]): Thenable<void> {
// Extract active vs. inactive replacements
let activeReplacement: EditorReplacement;
const inactiveReplacements: EditorReplacement[] = [];
editors.forEach(({ editor, replacement, options }) => {
if (editor.isDirty()) {
return; // we do not handle dirty in this method, so ignore all dirty
}
const index = this.getIndexOfEditor(editor);
if (index >= 0) {
const isActiveEditor = this.isActive(editor);
// make sure we respect the index of the editor to replace
if (options) {
options.index = index;
} else {
options = EditorOptions.create({ index });
}
options.inactive = !isActiveEditor;
options.pinned = true;
const editorToReplace = { editor, replacement, options };
if (isActiveEditor) {
activeReplacement = editorToReplace;
} else {
inactiveReplacements.push(editorToReplace);
}
}
});
// Handle inactive first
inactiveReplacements.forEach(({ editor, replacement, options }) => {
// Open inactive editor
this.doOpenEditor(replacement, options);
// Close replaced inactive edior
this.doCloseInactiveEditor(editor);
// Forward to title control
this.titleAreaControl.closeEditor(editor);
});
// Handle active last
if (activeReplacement) {
// Open replacement as active editor
return this.doOpenEditor(activeReplacement.replacement, activeReplacement.options).then(() => {
// Close previous active editor
this.doCloseInactiveEditor(activeReplacement.editor);
// Forward to title control
this.titleAreaControl.closeEditor(activeReplacement.editor);
});
}
return TPromise.as(void 0);
}
//#endregion
//#endregion
//#region Themable
......@@ -1059,6 +1126,12 @@ export class NextEditorGroupView extends Themable implements INextEditorGroupVie
}
}
export interface EditorReplacement {
editor: EditorInput;
replacement: EditorInput;
options?: EditorOptions;
}
registerThemingParticipant((theme, collector, environment) => {
// Letterpress
......
......@@ -57,6 +57,12 @@ export type ICloseEditorsFilter = {
savedOnly?: boolean
};
export interface IEditorReplacement {
editor: IEditorInput;
replacement: IEditorInput;
options?: IEditorOptions;
}
export interface INextEditorGroupsService {
_serviceBrand: ServiceIdentifier<any>;
......@@ -247,14 +253,18 @@ export interface INextEditorGroup {
getIndexOfEditor(editor: IEditorInput): number;
/**
* Open an editor in this group. The returned promise is resolved when the
* editor has finished loading.
* Open an editor in this group.
*
* @returns a promise that is resolved when the active editor (if any)
* has finished loading
*/
openEditor(editor: IEditorInput, options?: IEditorOptions): Thenable<void>;
/**
* Opens editors in this group. The returned promise is resolved when the
* editor has finished loading.
* Opens editors in this group.
*
* @returns a promise that is resolved when the active editor (if any)
* has finished loading
*/
openEditors(editors: IEditorInputWithOptions[]): Thenable<void>;
......@@ -314,6 +324,16 @@ export interface INextEditorGroup {
*/
closeAllEditors(): Thenable<void>;
/**
* Replaces editors in this 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: IEditorReplacement[]): Thenable<void>;
/**
* Set an editor to be pinned. A pinned editor is not replaced
* when another editor opens at the same location.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册