提交 a07aaa52 编写于 作者: B Benjamin Pasero

add methods to close editors in group and close all groups; closing a group closes editors within

上级 c7a96a43
......@@ -32,6 +32,7 @@ export interface IEditorGroup {
getEditors(mru?: boolean): EditorInput[];
openEditor(editor: EditorInput, options?: IEditorOpenOptions): void;
closeEditor(editor: EditorInput): void;
closeAllEditors(): void;
setActive(editor: EditorInput): void;
isActive(editor: EditorInput): boolean;
isPreview(editor: EditorInput): boolean;
......@@ -51,7 +52,10 @@ export interface IEditorStacksModel {
activeGroup: IEditorGroup;
openGroup(label: string): IEditorGroup;
closeGroup(group: IEditorGroup): void;
closeAllGroups(): void;
setActive(group: IEditorGroup): void;
}
......@@ -62,28 +66,10 @@ export interface IEditorOpenOptions {
/// --- API-End ----
// N Groups with labels (start with Left, Center, Right)
// Group has a List of editors
// Group can have N editors state pinned and 1 state preview
// Group has 1 active edutir
// Group has MRV(isible) list of editors
// Model has actions to work with inputs
// Open
// To the left / to the right (setting)
// Close
// Close Others
// Close Editors to the Right
// Close All
// Close All in Group
// Move Editor
// Move Group
// Pin Editor
// Unpin Editor
// Model has resulting events from operations
// Can be serialized and restored
export enum Direction {
LEFT,
......@@ -292,6 +278,13 @@ export class EditorGroup implements IEditorGroup {
this._onEditorClosed.fire(editor);
}
public closeAllEditors(): void {
// Optimize: close all non active editors first to produce less upstream work
this.mru.filter(e => e !== this.active).forEach(e => this.closeEditor(e));
this.closeEditor(this.active);
}
public setActive(editor: EditorInput): void {
const index = this.indexOf(editor);
if (index === -1) {
......@@ -564,6 +557,9 @@ export class EditorStacksModel implements IEditorStacksModel {
}
}
// Close Editors in Group first
group.closeAllEditors();
// Splice from groups
this._groups.splice(index, 1);
......@@ -571,6 +567,13 @@ export class EditorStacksModel implements IEditorStacksModel {
this._onGroupClosed.fire(group);
}
public closeAllGroups(): void {
// Optimize: close all non active groups first to produce less upstream work
this.groups.filter(g => g !== this.active).forEach(g => this.closeGroup(g));
this.closeGroup(this.active);
}
public setActive(group: EditorGroup): void {
this.active = group;
......
......@@ -178,6 +178,20 @@ suite('Editor Stacks Model', () => {
assert.equal(fourth, model.activeGroup);
model.closeGroup(fourth);
assert.equal(second, model.activeGroup);
model.closeGroup(second);
assert.equal(model.groups.length, 0);
model.openGroup('first');
model.openGroup('second');
model.openGroup('third');
model.openGroup('fourth');
assert.equal(model.groups.length, 4);
model.closeAllGroups();
assert.equal(model.groups.length, 0);
});
test('Stack - One Editor', function () {
......@@ -319,6 +333,11 @@ suite('Editor Stacks Model', () => {
assert.equal(mru[0], input3);
assert.equal(mru[1], input2);
assert.equal(mru[2], input1);
group.closeAllEditors();
assert.equal(events.closed.length, 3);
assert.equal(group.count, 0);
});
test('Stack - Multiple Editors - Pinned and Active (DEFAULT_OPEN_EDITOR_DIRECTION = Direction.LEFT)', function () {
......@@ -326,6 +345,7 @@ suite('Editor Stacks Model', () => {
const model = create();
const group = model.openGroup('group');
const events = groupListener(group);
const input1 = input();
const input2 = input();
......@@ -339,6 +359,11 @@ suite('Editor Stacks Model', () => {
assert.equal(group.getEditors()[0], input3);
assert.equal(group.getEditors()[1], input2);
assert.equal(group.getEditors()[2], input1);
model.closeAllGroups();
assert.equal(events.closed.length, 3);
assert.equal(group.count, 0);
});
test('Stack - Multiple Editors - Pinned and Not Active', function () {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册