提交 6ef2ee36 编写于 作者: B Benjamin Pasero

groups - introduce identifier to support maps

上级 9f2101f7
......@@ -16,6 +16,7 @@ import {Registry} from 'vs/platform/platform';
export interface IEditorGroup {
id: GroupIdentifier;
label: string;
count: number;
activeEditor: EditorInput;
......@@ -53,16 +54,20 @@ export interface IEditorStacksModel {
groups: IEditorGroup[];
activeGroup: IEditorGroup;
getGroup(id: GroupIdentifier): IEditorGroup;
openGroup(label: string): IEditorGroup;
closeGroup(group: IEditorGroup): void;
closeAllGroups(): void;
moveGroup(group: IEditorGroup, toIndex: number);
moveGroup(group: IEditorGroup, toIndex: number): void;
setActive(group: IEditorGroup): void;
}
export type GroupIdentifier = number;
export interface IEditorOpenOptions {
pinned?: boolean;
active?: boolean;
......@@ -92,6 +97,10 @@ export interface ISerializedEditorGroup {
}
export class EditorGroup implements IEditorGroup {
private static IDS = 0;
private _id: GroupIdentifier;
private _label: string;
private editors: EditorInput[];
......@@ -113,6 +122,8 @@ export class EditorGroup implements IEditorGroup {
arg1: string | ISerializedEditorGroup,
@IInstantiationService private instantiationService: IInstantiationService
) {
this._id = EditorGroup.IDS++;
this.editors = [];
this.mru = [];
this.toDispose = [];
......@@ -133,6 +144,10 @@ export class EditorGroup implements IEditorGroup {
this.toDispose.push(this._onEditorActivated, this._onEditorOpened, this._onEditorClosed, this._onEditorMoved, this._onEditorPinned, this._onEditorUnpinned);
}
public get id(): GroupIdentifier {
return this._id;
}
public get label(): string {
return this._label;
}
......@@ -520,6 +535,7 @@ export class EditorStacksModel implements IEditorStacksModel {
private toDispose: IDisposable[];
private _groups: EditorGroup[];
private groupToIdentifier: { [id: number]: EditorGroup };
private active: EditorGroup;
private _onGroupOpened: Emitter<EditorGroup>;
......@@ -535,6 +551,7 @@ export class EditorStacksModel implements IEditorStacksModel {
this.toDispose = [];
this._groups = [];
this.groupToIdentifier = Object.create(null);
this._onGroupOpened = new Emitter<EditorGroup>();
this._onGroupClosed = new Emitter<EditorGroup>();
......@@ -575,6 +592,10 @@ export class EditorStacksModel implements IEditorStacksModel {
return this.active;
}
public getGroup(id: GroupIdentifier): EditorGroup {
return this.groupToIdentifier[id];
}
public openGroup(label: string): EditorGroup {
const group = this.instantiationService.createInstance(EditorGroup, label);
......@@ -588,6 +609,8 @@ export class EditorStacksModel implements IEditorStacksModel {
this._groups.splice(this.indexOf(this.active) + 1, 0, group);
}
this.groupToIdentifier[group.id] = group;
// Event
this._onGroupOpened.fire(group);
......@@ -630,6 +653,7 @@ export class EditorStacksModel implements IEditorStacksModel {
// Splice from groups
this._groups.splice(index, 1);
this.groupToIdentifier[group.id] = void 0;
// Event
this._onGroupClosed.fire(group);
......@@ -714,6 +738,7 @@ export class EditorStacksModel implements IEditorStacksModel {
this._groups = serialized.groups.map(s => this.instantiationService.createInstance(EditorGroup, s));
this.active = this._groups[serialized.active];
this._groups.forEach(g => this.groupToIdentifier[g.id] = g);
}
}
......
......@@ -224,6 +224,31 @@ suite('Editor Stacks Model', () => {
assert.equal(model.groups[2], group1);
});
test('Groups - Group Identifiers', function () {
const model = create();
const group1 = model.openGroup('first');
const group2 = model.openGroup('second');
const group3 = model.openGroup('third');
assert.equal(model.getGroup(group1.id), group1);
assert.equal(model.getGroup(group2.id), group2);
assert.equal(model.getGroup(group3.id), group3);
model.closeGroup(group2);
assert.equal(model.getGroup(group2.id), null);
model.moveGroup(group1, 1);
assert.equal(model.getGroup(group1.id), group1);
assert.equal(model.getGroup(group3.id), group3);
model.closeAllGroups();
assert.equal(model.getGroup(group1.id), null);
assert.equal(model.getGroup(group3.id), null);
});
test('Stack - One Editor', function () {
const model = create();
const group = model.openGroup('group');
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册