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

add method to move a group

上级 53792db2
......@@ -48,6 +48,7 @@ export interface IEditorStacksModel {
onGroupOpened: Event<IEditorGroup>;
onGroupClosed: Event<IEditorGroup>;
onGroupActivated: Event<IEditorGroup>;
onGroupMoved: Event<IEditorGroup>;
groups: IEditorGroup[];
activeGroup: IEditorGroup;
......@@ -57,6 +58,8 @@ export interface IEditorStacksModel {
closeGroup(group: IEditorGroup): void;
closeAllGroups(): void;
moveGroup(group: IEditorGroup, toIndex: number);
setActive(group: IEditorGroup): void;
}
......@@ -68,7 +71,6 @@ export interface IEditorOpenOptions {
/// --- API-End ----
// Move Editor
// Move Group
export enum Direction {
LEFT,
......@@ -494,6 +496,7 @@ export class EditorStacksModel implements IEditorStacksModel {
private _onGroupOpened: Emitter<EditorGroup>;
private _onGroupClosed: Emitter<EditorGroup>;
private _onGroupMoved: Emitter<EditorGroup>;
private _onGroupActivated: Emitter<EditorGroup>;
constructor(
......@@ -508,10 +511,12 @@ export class EditorStacksModel implements IEditorStacksModel {
this._onGroupOpened = new Emitter<EditorGroup>();
this._onGroupClosed = new Emitter<EditorGroup>();
this._onGroupActivated = new Emitter<EditorGroup>();
this._onGroupMoved = new Emitter<EditorGroup>();
this.toDispose.push(this._onGroupOpened);
this.toDispose.push(this._onGroupClosed);
this.toDispose.push(this._onGroupActivated);
this.toDispose.push(this._onGroupMoved);
this.load();
this.registerListeners();
......@@ -533,6 +538,10 @@ export class EditorStacksModel implements IEditorStacksModel {
return this._onGroupActivated.event;
}
public get onGroupMoved(): Event<EditorGroup> {
return this._onGroupMoved.event;
}
public get groups(): EditorGroup[] {
return this._groups.slice(0);
}
......@@ -614,6 +623,20 @@ export class EditorStacksModel implements IEditorStacksModel {
this._onGroupActivated.fire(this.active);
}
public moveGroup(group: EditorGroup, toIndex: number): void {
const index = this.indexOf(group);
if (index < 0) {
return;
}
// Move
this._groups.splice(index, 1);
this._groups.splice(toIndex, 0, group);
// Event
this._onGroupMoved.fire(group);
}
private indexOf(group: EditorGroup): number {
return this._groups.indexOf(group);
}
......
......@@ -31,6 +31,7 @@ interface ModelEvents {
opened: IEditorGroup[];
activated: IEditorGroup[];
closed: IEditorGroup[];
moved: IEditorGroup[];
}
interface GroupEvents {
......@@ -45,12 +46,14 @@ function modelListener(model: IEditorStacksModel): ModelEvents {
const modelEvents = {
opened: [],
activated: [],
closed: []
closed: [],
moved: []
};
model.onGroupOpened(g => modelEvents.opened.push(g));
model.onGroupActivated(g => modelEvents.activated.push(g));
model.onGroupClosed(g => modelEvents.closed.push(g));
model.onGroupMoved(g => modelEvents.moved.push(g));
return modelEvents;
}
......@@ -131,7 +134,7 @@ suite('Editor Stacks Model', () => {
setOpenEditorDirection(Direction.RIGHT);
});
test('Groups', function () {
test('Groups - Basic', function () {
const model = create();
const events = modelListener(model);
......@@ -193,6 +196,31 @@ suite('Editor Stacks Model', () => {
assert.equal(model.groups.length, 0);
});
test('Groups - Move Groups', function () {
const model = create();
const events = modelListener(model);
const group1 = model.openGroup('first');
const group2 = model.openGroup('second');
model.moveGroup(group1, 1);
assert.equal(events.moved[0], group1);
assert.equal(model.groups[0], group2);
assert.equal(model.groups[1], group1);
model.moveGroup(group1, 0);
assert.equal(model.groups[0], group1);
assert.equal(model.groups[1], group2);
const group3 = model.openGroup('third');
model.moveGroup(group1, 2);
assert.equal(model.groups[0], group2);
assert.equal(model.groups[1], group3);
assert.equal(model.groups[2], group1);
});
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.
先完成此消息的编辑!
想要评论请 注册