mirror of
https://github.com/mathuo/dockview
synced 2025-09-13 12:47:52 +00:00
expose params object for dockview panels
This commit is contained in:
parent
2e051f6690
commit
557621aa83
@ -85,7 +85,6 @@ describe('component.api', () => {
|
|||||||
'maximumWidth',
|
'maximumWidth',
|
||||||
'width',
|
'width',
|
||||||
'height',
|
'height',
|
||||||
'onGridEvent',
|
|
||||||
'onDidLayoutChange',
|
'onDidLayoutChange',
|
||||||
'orientation',
|
'orientation',
|
||||||
'focus',
|
'focus',
|
||||||
@ -124,7 +123,6 @@ describe('component.api', () => {
|
|||||||
'height',
|
'height',
|
||||||
'size',
|
'size',
|
||||||
'totalPanels',
|
'totalPanels',
|
||||||
'onGridEvent',
|
|
||||||
'onDidLayoutChange',
|
'onDidLayoutChange',
|
||||||
'panels',
|
'panels',
|
||||||
'groups',
|
'groups',
|
||||||
|
@ -12,10 +12,6 @@ import { Orientation } from '../../splitview/core/splitview';
|
|||||||
import { ReactPanelDeserialzier } from '../../react/deserializer';
|
import { ReactPanelDeserialzier } from '../../react/deserializer';
|
||||||
import { Position } from '../../dnd/droptarget';
|
import { Position } from '../../dnd/droptarget';
|
||||||
import { GroupviewPanel } from '../../groupview/groupviewPanel';
|
import { GroupviewPanel } from '../../groupview/groupviewPanel';
|
||||||
import {
|
|
||||||
GroupChangeEvent,
|
|
||||||
GroupChangeKind,
|
|
||||||
} from '../../gridview/baseComponentGridview';
|
|
||||||
import { CompositeDisposable } from '../../lifecycle';
|
import { CompositeDisposable } from '../../lifecycle';
|
||||||
import {
|
import {
|
||||||
GroupPanelUpdateEvent,
|
GroupPanelUpdateEvent,
|
||||||
@ -117,6 +113,10 @@ class TestGroupPanel implements IGroupPanel {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get params(): Record<string, any> {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
get group(): GroupviewPanel | undefined {
|
get group(): GroupviewPanel | undefined {
|
||||||
return this._group;
|
return this._group;
|
||||||
}
|
}
|
||||||
@ -732,18 +732,16 @@ describe('dockviewComponent', () => {
|
|||||||
|
|
||||||
let counter = 0;
|
let counter = 0;
|
||||||
|
|
||||||
const disposable = dockview.onGridEvent((e) => {
|
const disposable = new CompositeDisposable(
|
||||||
switch (e.kind) {
|
dockview.onDidAddPanel(() => {
|
||||||
case GroupChangeKind.ADD_PANEL:
|
counter++;
|
||||||
counter++;
|
expect(counter).toBe(dockview.totalPanels);
|
||||||
expect(counter).toBe(dockview.totalPanels);
|
}),
|
||||||
break;
|
dockview.onDidRemovePanel(() => {
|
||||||
case GroupChangeKind.REMOVE_PANEL:
|
counter--;
|
||||||
counter--;
|
expect(counter).toBe(dockview.totalPanels);
|
||||||
expect(counter).toBe(dockview.totalPanels);
|
})
|
||||||
break;
|
);
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const panel1 = dockview.addPanel({
|
const panel1 = dockview.addPanel({
|
||||||
id: 'panel1',
|
id: 'panel1',
|
||||||
@ -774,18 +772,16 @@ describe('dockviewComponent', () => {
|
|||||||
|
|
||||||
let counter = 0;
|
let counter = 0;
|
||||||
|
|
||||||
const disposable = dockview.onGridEvent((e) => {
|
const disposable = new CompositeDisposable(
|
||||||
switch (e.kind) {
|
dockview.onDidAddGroup(() => {
|
||||||
case GroupChangeKind.ADD_GROUP:
|
counter++;
|
||||||
counter++;
|
expect(counter).toBe(dockview.size);
|
||||||
expect(counter).toBe(dockview.size);
|
}),
|
||||||
break;
|
dockview.onDidRemoveGroup(() => {
|
||||||
case GroupChangeKind.REMOVE_GROUP:
|
counter--;
|
||||||
counter--;
|
expect(counter).toBe(dockview.size);
|
||||||
expect(counter).toBe(dockview.size);
|
})
|
||||||
break;
|
);
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const panel1 = dockview.addPanel({
|
const panel1 = dockview.addPanel({
|
||||||
id: 'panel1',
|
id: 'panel1',
|
||||||
@ -814,18 +810,45 @@ describe('dockviewComponent', () => {
|
|||||||
test('events flow', () => {
|
test('events flow', () => {
|
||||||
dockview.layout(1000, 1000);
|
dockview.layout(1000, 1000);
|
||||||
|
|
||||||
let events: GroupChangeEvent[] = [];
|
let events: {
|
||||||
const disposable = dockview.onGridEvent((e) => events.push(e));
|
panel?: IGroupPanel;
|
||||||
|
group?: GroupviewPanel | undefined;
|
||||||
|
type: string;
|
||||||
|
}[] = [];
|
||||||
|
|
||||||
|
const disposable = new CompositeDisposable(
|
||||||
|
dockview.onDidAddGroup((group) => {
|
||||||
|
events.push({ type: 'ADD_GROUP', group });
|
||||||
|
}),
|
||||||
|
dockview.onDidActiveGroupChange((group) => {
|
||||||
|
events.push({ type: 'ACTIVE_GROUP', group });
|
||||||
|
}),
|
||||||
|
dockview.onDidRemoveGroup((group) => {
|
||||||
|
events.push({ type: 'REMOVE_GROUP', group });
|
||||||
|
}),
|
||||||
|
dockview.onDidAddPanel((panel) => {
|
||||||
|
events.push({ type: 'ADD_PANEL', panel });
|
||||||
|
}),
|
||||||
|
dockview.onDidRemovePanel((panel) => {
|
||||||
|
events.push({ type: 'REMOVE_PANEL', panel });
|
||||||
|
}),
|
||||||
|
dockview.onDidActivePanelChange((panel) => {
|
||||||
|
events.push({ type: 'ACTIVE_PANEL', panel });
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
const panel1 = dockview.addPanel({
|
const panel1 = dockview.addPanel({
|
||||||
id: 'panel1',
|
id: 'panel1',
|
||||||
component: 'default',
|
component: 'default',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
expect(panel1.group).toBeTruthy();
|
||||||
|
|
||||||
expect(events).toEqual([
|
expect(events).toEqual([
|
||||||
{ kind: GroupChangeKind.ADD_GROUP },
|
{ type: 'ADD_GROUP', group: panel1.group },
|
||||||
{ kind: GroupChangeKind.GROUP_ACTIVE },
|
{ type: 'ACTIVE_GROUP', group: panel1.group },
|
||||||
{ kind: GroupChangeKind.ADD_PANEL, panel: panel1 },
|
{ type: 'ADD_PANEL', panel: panel1 },
|
||||||
{ kind: GroupChangeKind.PANEL_ACTIVE, panel: panel1 },
|
{ type: 'ACTIVE_PANEL', panel: panel1 },
|
||||||
]);
|
]);
|
||||||
|
|
||||||
events = [];
|
events = [];
|
||||||
@ -834,8 +857,8 @@ describe('dockviewComponent', () => {
|
|||||||
component: 'default',
|
component: 'default',
|
||||||
});
|
});
|
||||||
expect(events).toEqual([
|
expect(events).toEqual([
|
||||||
{ kind: GroupChangeKind.ADD_PANEL, panel: panel2 },
|
{ type: 'ADD_PANEL', panel: panel2 },
|
||||||
{ kind: GroupChangeKind.PANEL_ACTIVE, panel: panel2 },
|
{ type: 'ACTIVE_PANEL', panel: panel2 },
|
||||||
]);
|
]);
|
||||||
|
|
||||||
events = [];
|
events = [];
|
||||||
@ -844,21 +867,19 @@ describe('dockviewComponent', () => {
|
|||||||
component: 'default',
|
component: 'default',
|
||||||
});
|
});
|
||||||
expect(events).toEqual([
|
expect(events).toEqual([
|
||||||
{ kind: GroupChangeKind.ADD_PANEL, panel: panel3 },
|
{ type: 'ADD_PANEL', panel: panel3 },
|
||||||
{ kind: GroupChangeKind.PANEL_ACTIVE, panel: panel3 },
|
{ type: 'ACTIVE_PANEL', panel: panel3 },
|
||||||
]);
|
]);
|
||||||
|
|
||||||
events = [];
|
events = [];
|
||||||
dockview.removePanel(panel1);
|
dockview.removePanel(panel1);
|
||||||
expect(events).toEqual([
|
expect(events).toEqual([{ type: 'REMOVE_PANEL', panel: panel1 }]);
|
||||||
{ kind: GroupChangeKind.REMOVE_PANEL, panel: panel1 },
|
|
||||||
]);
|
|
||||||
|
|
||||||
events = [];
|
events = [];
|
||||||
dockview.removePanel(panel3);
|
dockview.removePanel(panel3);
|
||||||
expect(events).toEqual([
|
expect(events).toEqual([
|
||||||
{ kind: GroupChangeKind.REMOVE_PANEL, panel: panel3 },
|
{ type: 'REMOVE_PANEL', panel: panel3 },
|
||||||
{ kind: GroupChangeKind.PANEL_ACTIVE, panel: panel2 },
|
{ type: 'ACTIVE_PANEL', panel: panel2 },
|
||||||
]);
|
]);
|
||||||
|
|
||||||
events = [];
|
events = [];
|
||||||
@ -867,11 +888,15 @@ describe('dockviewComponent', () => {
|
|||||||
component: 'default',
|
component: 'default',
|
||||||
position: { referencePanel: panel2.id, direction: 'right' },
|
position: { referencePanel: panel2.id, direction: 'right' },
|
||||||
});
|
});
|
||||||
|
|
||||||
|
expect(panel4.group).toBeTruthy();
|
||||||
|
expect(panel4.group).not.toBe(panel1.group);
|
||||||
|
|
||||||
expect(events).toEqual([
|
expect(events).toEqual([
|
||||||
{ kind: GroupChangeKind.ADD_GROUP },
|
{ type: 'ADD_GROUP', group: panel4.group },
|
||||||
{ kind: GroupChangeKind.GROUP_ACTIVE },
|
{ type: 'ACTIVE_GROUP', group: panel4.group },
|
||||||
{ kind: GroupChangeKind.ADD_PANEL, panel: panel4 },
|
{ type: 'ADD_PANEL', panel: panel4 },
|
||||||
{ kind: GroupChangeKind.PANEL_ACTIVE, panel: panel4 },
|
{ type: 'ACTIVE_PANEL', panel: panel4 },
|
||||||
]);
|
]);
|
||||||
|
|
||||||
events = [];
|
events = [];
|
||||||
@ -881,8 +906,8 @@ describe('dockviewComponent', () => {
|
|||||||
position: { referencePanel: panel4.id, direction: 'within' },
|
position: { referencePanel: panel4.id, direction: 'within' },
|
||||||
});
|
});
|
||||||
expect(events).toEqual([
|
expect(events).toEqual([
|
||||||
{ kind: GroupChangeKind.ADD_PANEL, panel: panel5 },
|
{ type: 'ADD_PANEL', panel: panel5 },
|
||||||
{ kind: GroupChangeKind.PANEL_ACTIVE, panel: panel5 },
|
{ type: 'ACTIVE_PANEL', panel: panel5 },
|
||||||
]);
|
]);
|
||||||
|
|
||||||
events = [];
|
events = [];
|
||||||
@ -893,26 +918,30 @@ describe('dockviewComponent', () => {
|
|||||||
Position.Center
|
Position.Center
|
||||||
);
|
);
|
||||||
expect(events).toEqual([
|
expect(events).toEqual([
|
||||||
{ kind: GroupChangeKind.REMOVE_PANEL, panel: panel5 },
|
{ type: 'REMOVE_PANEL', panel: panel5 },
|
||||||
{ kind: GroupChangeKind.PANEL_ACTIVE, panel: panel4 },
|
{ type: 'ACTIVE_PANEL', panel: panel4 },
|
||||||
{ kind: GroupChangeKind.ADD_PANEL, panel: panel5 },
|
{ type: 'ADD_PANEL', panel: panel5 },
|
||||||
{ kind: GroupChangeKind.PANEL_ACTIVE, panel: panel5 },
|
{ type: 'ACTIVE_PANEL', panel: panel5 },
|
||||||
{ kind: GroupChangeKind.GROUP_ACTIVE },
|
{ type: 'ACTIVE_GROUP', group: panel2.group },
|
||||||
{ kind: GroupChangeKind.PANEL_ACTIVE, panel: panel5 },
|
{ type: 'ACTIVE_PANEL', panel: panel5 },
|
||||||
]);
|
]);
|
||||||
|
|
||||||
events = [];
|
events = [];
|
||||||
|
|
||||||
|
const groupReferenceBeforeMove = panel4.group;
|
||||||
|
|
||||||
dockview.moveGroupOrPanel(
|
dockview.moveGroupOrPanel(
|
||||||
panel2.group!,
|
panel2.group!,
|
||||||
panel4.group!.id,
|
panel4.group!.id,
|
||||||
panel4.id,
|
panel4.id,
|
||||||
Position.Center
|
Position.Center
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(events).toEqual([
|
expect(events).toEqual([
|
||||||
{ kind: GroupChangeKind.REMOVE_PANEL, panel: panel4 },
|
{ type: 'REMOVE_PANEL', panel: panel4 },
|
||||||
{ kind: GroupChangeKind.REMOVE_GROUP },
|
{ type: 'REMOVE_GROUP', group: groupReferenceBeforeMove },
|
||||||
{ kind: GroupChangeKind.ADD_PANEL, panel: panel4 },
|
{ type: 'ADD_PANEL', panel: panel4 },
|
||||||
{ kind: GroupChangeKind.PANEL_ACTIVE, panel: panel4 },
|
{ type: 'ACTIVE_PANEL', panel: panel4 },
|
||||||
]);
|
]);
|
||||||
|
|
||||||
disposable.dispose();
|
disposable.dispose();
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
import {
|
|
||||||
GroupChangeEvent,
|
|
||||||
GroupChangeKind,
|
|
||||||
} from '../../gridview/baseComponentGridview';
|
|
||||||
import { GridviewComponent } from '../../gridview/gridviewComponent';
|
import { GridviewComponent } from '../../gridview/gridviewComponent';
|
||||||
import { GridviewPanel } from '../../gridview/gridviewPanel';
|
import { GridviewPanel } from '../../gridview/gridviewPanel';
|
||||||
|
import { CompositeDisposable } from '../../lifecycle';
|
||||||
import { IFrameworkPart } from '../../panel/types';
|
import { IFrameworkPart } from '../../panel/types';
|
||||||
import { Orientation } from '../../splitview/core/splitview';
|
import { Orientation } from '../../splitview/core/splitview';
|
||||||
|
|
||||||
@ -314,20 +311,35 @@ describe('gridview', () => {
|
|||||||
|
|
||||||
gridview.layout(800, 400);
|
gridview.layout(800, 400);
|
||||||
|
|
||||||
let events: GroupChangeEvent[] = [];
|
let events: { group: GridviewPanel | undefined; type: string }[] = [];
|
||||||
const disposable = gridview.onGridEvent((e) => events.push(e));
|
|
||||||
|
const disposable = new CompositeDisposable(
|
||||||
|
gridview.onDidAddGroup((group) => {
|
||||||
|
events.push({ type: 'ADD', group });
|
||||||
|
}),
|
||||||
|
gridview.onDidActiveGroupChange((group) => {
|
||||||
|
events.push({ type: 'ACTIVE', group });
|
||||||
|
}),
|
||||||
|
gridview.onDidRemoveGroup((group) => {
|
||||||
|
events.push({ type: 'REMOVE', group });
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
gridview.addPanel({
|
gridview.addPanel({
|
||||||
id: 'panel_1',
|
id: 'panel_1',
|
||||||
component: 'default',
|
component: 'default',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const panel1 = gridview.getPanel('panel_1');
|
||||||
|
|
||||||
expect(events).toEqual([
|
expect(events).toEqual([
|
||||||
{
|
{
|
||||||
kind: GroupChangeKind.ADD_GROUP,
|
type: 'ADD',
|
||||||
|
group: panel1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
kind: GroupChangeKind.GROUP_ACTIVE,
|
type: 'ACTIVE',
|
||||||
|
group: panel1,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
events = [];
|
events = [];
|
||||||
@ -337,12 +349,16 @@ describe('gridview', () => {
|
|||||||
component: 'default',
|
component: 'default',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const panel2 = gridview.getPanel('panel_2');
|
||||||
|
|
||||||
expect(events).toEqual([
|
expect(events).toEqual([
|
||||||
{
|
{
|
||||||
kind: GroupChangeKind.ADD_GROUP,
|
type: 'ADD',
|
||||||
|
group: panel2,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
kind: GroupChangeKind.GROUP_ACTIVE,
|
type: 'ACTIVE',
|
||||||
|
group: panel2,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
events = [];
|
events = [];
|
||||||
@ -352,36 +368,40 @@ describe('gridview', () => {
|
|||||||
component: 'default',
|
component: 'default',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const panel3 = gridview.getPanel('panel_3');
|
||||||
|
|
||||||
expect(events).toEqual([
|
expect(events).toEqual([
|
||||||
{
|
{
|
||||||
kind: GroupChangeKind.ADD_GROUP,
|
type: 'ADD',
|
||||||
|
group: panel3,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
kind: GroupChangeKind.GROUP_ACTIVE,
|
type: 'ACTIVE',
|
||||||
|
group: panel3,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
events = [];
|
events = [];
|
||||||
|
|
||||||
const panel1 = gridview.getPanel('panel_1');
|
|
||||||
const panel2 = gridview.getPanel('panel_2');
|
|
||||||
const panel3 = gridview.getPanel('panel_3');
|
|
||||||
|
|
||||||
gridview.removePanel(panel2);
|
gridview.removePanel(panel2);
|
||||||
|
|
||||||
expect(events).toEqual([
|
expect(events).toEqual([
|
||||||
{
|
{
|
||||||
kind: GroupChangeKind.REMOVE_GROUP,
|
type: 'REMOVE',
|
||||||
|
group: panel2,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
events = [];
|
events = [];
|
||||||
|
|
||||||
gridview.removePanel(panel3);
|
gridview.removePanel(panel3);
|
||||||
|
|
||||||
expect(events).toEqual([
|
expect(events).toEqual([
|
||||||
{
|
{
|
||||||
kind: GroupChangeKind.REMOVE_GROUP,
|
type: 'REMOVE',
|
||||||
|
group: panel3,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
kind: GroupChangeKind.GROUP_ACTIVE,
|
type: 'ACTIVE',
|
||||||
|
group: panel1,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
events = [];
|
events = [];
|
||||||
@ -390,10 +410,12 @@ describe('gridview', () => {
|
|||||||
|
|
||||||
expect(events).toEqual([
|
expect(events).toEqual([
|
||||||
{
|
{
|
||||||
kind: GroupChangeKind.REMOVE_GROUP,
|
type: 'REMOVE',
|
||||||
|
group: panel1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
kind: GroupChangeKind.GROUP_ACTIVE,
|
type: 'ACTIVE',
|
||||||
|
group: undefined,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
events = [];
|
events = [];
|
||||||
|
@ -150,6 +150,10 @@ class TestPanel implements IGroupPanel {
|
|||||||
return this._view;
|
return this._view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get params(): Record<string, any> {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
constructor(public readonly id: string, public api: DockviewPanelApi) {
|
constructor(public readonly id: string, public api: DockviewPanelApi) {
|
||||||
this.init({
|
this.init({
|
||||||
view: new DefaultGroupPanelView({
|
view: new DefaultGroupPanelView({
|
||||||
|
@ -7,7 +7,7 @@ import {
|
|||||||
AddPanelOptions,
|
AddPanelOptions,
|
||||||
MovementOptions,
|
MovementOptions,
|
||||||
} from '../dockview/options';
|
} from '../dockview/options';
|
||||||
import { Direction, GroupChangeEvent } from '../gridview/baseComponentGridview';
|
import { Direction } from '../gridview/baseComponentGridview';
|
||||||
import {
|
import {
|
||||||
AddComponentOptions,
|
AddComponentOptions,
|
||||||
IGridviewComponent,
|
IGridviewComponent,
|
||||||
@ -247,10 +247,6 @@ export class GridviewApi implements CommonApi {
|
|||||||
return this.component.height;
|
return this.component.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
get onGridEvent(): Event<GroupChangeEvent> {
|
|
||||||
return this.component.onGridEvent;
|
|
||||||
}
|
|
||||||
|
|
||||||
get onDidLayoutChange(): Event<void> {
|
get onDidLayoutChange(): Event<void> {
|
||||||
return this.component.onDidLayoutChange;
|
return this.component.onDidLayoutChange;
|
||||||
}
|
}
|
||||||
@ -370,10 +366,6 @@ export class DockviewApi implements CommonApi {
|
|||||||
return this.component.totalPanels;
|
return this.component.totalPanels;
|
||||||
}
|
}
|
||||||
|
|
||||||
get onGridEvent(): Event<GroupChangeEvent> {
|
|
||||||
return this.component.onGridEvent;
|
|
||||||
}
|
|
||||||
|
|
||||||
get onDidActiveGroupChange(): Event<IGroupviewPanel | undefined> {
|
get onDidActiveGroupChange(): Event<IGroupviewPanel | undefined> {
|
||||||
return this.component.onDidActiveGroupChange;
|
return this.component.onDidActiveGroupChange;
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,9 @@ export interface IPanelDeserializer {
|
|||||||
export class DefaultDeserializer implements IViewDeserializer {
|
export class DefaultDeserializer implements IViewDeserializer {
|
||||||
constructor(
|
constructor(
|
||||||
private readonly layout: DockviewComponent,
|
private readonly layout: DockviewComponent,
|
||||||
private panelDeserializer: { createPanel: (id: string) => IGroupPanel }
|
private panelDeserializer: {
|
||||||
|
createPanel: (id: string) => IGroupPanel;
|
||||||
|
}
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
public fromJSON(node: ISerializedLeafNode): IGridView {
|
public fromJSON(node: ISerializedLeafNode): IGridView {
|
||||||
|
@ -27,7 +27,6 @@ import {
|
|||||||
} from './options';
|
} from './options';
|
||||||
import {
|
import {
|
||||||
BaseGrid,
|
BaseGrid,
|
||||||
GroupChangeKind,
|
|
||||||
IBaseGrid,
|
IBaseGrid,
|
||||||
toTarget,
|
toTarget,
|
||||||
} from '../gridview/baseComponentGridview';
|
} from '../gridview/baseComponentGridview';
|
||||||
@ -207,7 +206,14 @@ export class DockviewComponent
|
|||||||
this.addDisposables(
|
this.addDisposables(
|
||||||
this._onTabInteractionEvent,
|
this._onTabInteractionEvent,
|
||||||
this._onTabContextMenu,
|
this._onTabContextMenu,
|
||||||
this._onDidDrop
|
this._onDidDrop,
|
||||||
|
Event.any(
|
||||||
|
this.onDidAddPanel,
|
||||||
|
this.onDidRemovePanel,
|
||||||
|
this.onDidActivePanelChange
|
||||||
|
)(() => {
|
||||||
|
this._bufferOnDidLayoutChange.fire();
|
||||||
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
this._options = options;
|
this._options = options;
|
||||||
@ -377,7 +383,6 @@ export class DockviewComponent
|
|||||||
|
|
||||||
this.gridview.layout(this.width, this.height);
|
this.gridview.layout(this.width, this.height);
|
||||||
|
|
||||||
this._onGridEvent.fire({ kind: GroupChangeKind.LAYOUT_FROM_JSON });
|
|
||||||
this._onDidLayoutfromJSON.fire();
|
this._onDidLayoutfromJSON.fire();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -515,7 +520,9 @@ export class DockviewComponent
|
|||||||
const panels = [...group.model.panels]; // reassign since group panels will mutate
|
const panels = [...group.model.panels]; // reassign since group panels will mutate
|
||||||
|
|
||||||
for (const panel of panels) {
|
for (const panel of panels) {
|
||||||
this.removePanel(panel, { removeEmptyGroup: false });
|
this.removePanel(panel, {
|
||||||
|
removeEmptyGroup: false,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
super.doRemoveGroup(group, { skipActive });
|
super.doRemoveGroup(group, { skipActive });
|
||||||
@ -612,10 +619,6 @@ export class DockviewComponent
|
|||||||
super.doSetGroupActive(group, skipFocus);
|
super.doSetGroupActive(group, skipFocus);
|
||||||
|
|
||||||
if (!isGroupAlreadyFocused && this._activeGroup?.model.activePanel) {
|
if (!isGroupAlreadyFocused && this._activeGroup?.model.activePanel) {
|
||||||
this._onGridEvent.fire({
|
|
||||||
kind: GroupChangeKind.PANEL_ACTIVE,
|
|
||||||
panel: this._activeGroup?.model.activePanel,
|
|
||||||
});
|
|
||||||
this._onDidActivePanelChange.fire(
|
this._onDidActivePanelChange.fire(
|
||||||
this._activeGroup?.model.activePanel
|
this._activeGroup?.model.activePanel
|
||||||
);
|
);
|
||||||
@ -660,28 +663,16 @@ export class DockviewComponent
|
|||||||
view.model.onDidGroupChange((event) => {
|
view.model.onDidGroupChange((event) => {
|
||||||
switch (event.kind) {
|
switch (event.kind) {
|
||||||
case GroupChangeKind2.ADD_PANEL:
|
case GroupChangeKind2.ADD_PANEL:
|
||||||
this._onGridEvent.fire({
|
|
||||||
kind: GroupChangeKind.ADD_PANEL,
|
|
||||||
panel: event.panel,
|
|
||||||
});
|
|
||||||
if (event.panel) {
|
if (event.panel) {
|
||||||
this._onDidAddPanel.fire(event.panel);
|
this._onDidAddPanel.fire(event.panel);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GroupChangeKind2.REMOVE_PANEL:
|
case GroupChangeKind2.REMOVE_PANEL:
|
||||||
this._onGridEvent.fire({
|
|
||||||
kind: GroupChangeKind.REMOVE_PANEL,
|
|
||||||
panel: event.panel,
|
|
||||||
});
|
|
||||||
if (event.panel) {
|
if (event.panel) {
|
||||||
this._onDidRemovePanel.fire(event.panel);
|
this._onDidRemovePanel.fire(event.panel);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GroupChangeKind2.PANEL_ACTIVE:
|
case GroupChangeKind2.PANEL_ACTIVE:
|
||||||
this._onGridEvent.fire({
|
|
||||||
kind: GroupChangeKind.PANEL_ACTIVE,
|
|
||||||
panel: event.panel,
|
|
||||||
});
|
|
||||||
this._onDidActivePanelChange.fire(event.panel);
|
this._onDidActivePanelChange.fire(event.panel);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -708,11 +699,7 @@ export class DockviewComponent
|
|||||||
tab: this.createTabComponent(options.id, options.tabComponent),
|
tab: this.createTabComponent(options.id, options.tabComponent),
|
||||||
});
|
});
|
||||||
|
|
||||||
const panel: IGroupPanel = new DockviewGroupPanel(
|
const panel = new DockviewGroupPanel(options.id, this, this._api);
|
||||||
options.id,
|
|
||||||
this,
|
|
||||||
this._api
|
|
||||||
);
|
|
||||||
panel.init({
|
panel.init({
|
||||||
view,
|
view,
|
||||||
title: options.title || options.id,
|
title: options.title || options.id,
|
||||||
|
@ -27,6 +27,10 @@ export class DockviewGroupPanel
|
|||||||
private _title: string;
|
private _title: string;
|
||||||
private _suppressClosable: boolean;
|
private _suppressClosable: boolean;
|
||||||
|
|
||||||
|
get params() {
|
||||||
|
return this._params?.params;
|
||||||
|
}
|
||||||
|
|
||||||
get title() {
|
get title() {
|
||||||
return this._title;
|
return this._title;
|
||||||
}
|
}
|
||||||
|
@ -10,24 +10,6 @@ import {
|
|||||||
} from '../splitview/core/splitview';
|
} from '../splitview/core/splitview';
|
||||||
import { IPanel } from '../panel/types';
|
import { IPanel } from '../panel/types';
|
||||||
import { MovementOptions2 } from '../dockview/options';
|
import { MovementOptions2 } from '../dockview/options';
|
||||||
import { IGroupPanel } from '../groupview/groupPanel';
|
|
||||||
|
|
||||||
export enum GroupChangeKind {
|
|
||||||
ADD_PANEL = 'ADD_PANEL',
|
|
||||||
REMOVE_PANEL = 'REMOVE_PANEL',
|
|
||||||
PANEL_ACTIVE = 'PANEL_ACTIVE',
|
|
||||||
//
|
|
||||||
GROUP_ACTIVE = 'GROUP_ACTIVE',
|
|
||||||
ADD_GROUP = 'ADD_GROUP',
|
|
||||||
REMOVE_GROUP = 'REMOVE_GROUP',
|
|
||||||
//
|
|
||||||
LAYOUT_FROM_JSON = 'LAYOUT_FROM_JSON',
|
|
||||||
LAYOUT = 'LAYOUT',
|
|
||||||
}
|
|
||||||
export interface GroupChangeEvent {
|
|
||||||
readonly kind: GroupChangeKind;
|
|
||||||
readonly panel?: IGroupPanel;
|
|
||||||
}
|
|
||||||
|
|
||||||
const nextLayoutId = sequentialNumberGenerator();
|
const nextLayoutId = sequentialNumberGenerator();
|
||||||
|
|
||||||
@ -72,7 +54,6 @@ export interface IBaseGrid<T extends IGridPanelView> {
|
|||||||
readonly activeGroup: T | undefined;
|
readonly activeGroup: T | undefined;
|
||||||
readonly size: number;
|
readonly size: number;
|
||||||
readonly groups: T[];
|
readonly groups: T[];
|
||||||
readonly onGridEvent: Event<GroupChangeEvent>;
|
|
||||||
readonly onDidLayoutChange: Event<void>;
|
readonly onDidLayoutChange: Event<void>;
|
||||||
readonly onDidRemoveGroup: Event<T>;
|
readonly onDidRemoveGroup: Event<T>;
|
||||||
readonly onDidAddGroup: Event<T>;
|
readonly onDidAddGroup: Event<T>;
|
||||||
@ -95,9 +76,6 @@ export abstract class BaseGrid<T extends IGridPanelView>
|
|||||||
protected readonly gridview: Gridview;
|
protected readonly gridview: Gridview;
|
||||||
//
|
//
|
||||||
protected _activeGroup: T | undefined;
|
protected _activeGroup: T | undefined;
|
||||||
//
|
|
||||||
protected readonly _onGridEvent = new Emitter<GroupChangeEvent>();
|
|
||||||
readonly onGridEvent: Event<GroupChangeEvent> = this._onGridEvent.event;
|
|
||||||
|
|
||||||
private _onDidLayoutChange = new Emitter<void>();
|
private _onDidLayoutChange = new Emitter<void>();
|
||||||
readonly onDidLayoutChange = this._onDidLayoutChange.event;
|
readonly onDidLayoutChange = this._onDidLayoutChange.event;
|
||||||
@ -112,6 +90,8 @@ export abstract class BaseGrid<T extends IGridPanelView>
|
|||||||
readonly onDidActiveGroupChange: Event<T | undefined> =
|
readonly onDidActiveGroupChange: Event<T | undefined> =
|
||||||
this._onDidActiveGroupChange.event;
|
this._onDidActiveGroupChange.event;
|
||||||
|
|
||||||
|
protected readonly _bufferOnDidLayoutChange = new TickDelayedEvent();
|
||||||
|
|
||||||
get id() {
|
get id() {
|
||||||
return this._id;
|
return this._id;
|
||||||
}
|
}
|
||||||
@ -171,36 +151,22 @@ export abstract class BaseGrid<T extends IGridPanelView>
|
|||||||
|
|
||||||
this.addDisposables(
|
this.addDisposables(
|
||||||
this.gridview.onDidChange(() => {
|
this.gridview.onDidChange(() => {
|
||||||
this._onGridEvent.fire({ kind: GroupChangeKind.LAYOUT });
|
this._onDidLayoutChange.fire();
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
this.addDisposables(
|
this.addDisposables(
|
||||||
(() => {
|
Event.any(
|
||||||
const tickDelayedEvent = new TickDelayedEvent();
|
this.onDidAddGroup,
|
||||||
|
this.onDidRemoveGroup,
|
||||||
return new CompositeDisposable(
|
this.onDidActiveGroupChange
|
||||||
this.onGridEvent((event) => {
|
)(() => {
|
||||||
if (
|
this._bufferOnDidLayoutChange.fire();
|
||||||
[
|
}),
|
||||||
GroupChangeKind.ADD_GROUP,
|
this._bufferOnDidLayoutChange.onEvent(() => {
|
||||||
GroupChangeKind.REMOVE_GROUP,
|
this._onDidLayoutChange.fire();
|
||||||
GroupChangeKind.ADD_PANEL,
|
}),
|
||||||
GroupChangeKind.REMOVE_PANEL,
|
this._bufferOnDidLayoutChange
|
||||||
GroupChangeKind.GROUP_ACTIVE,
|
|
||||||
GroupChangeKind.PANEL_ACTIVE,
|
|
||||||
GroupChangeKind.LAYOUT,
|
|
||||||
].includes(event.kind)
|
|
||||||
) {
|
|
||||||
tickDelayedEvent.fire();
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
tickDelayedEvent.onEvent(() => {
|
|
||||||
this._onDidLayoutChange.fire();
|
|
||||||
}),
|
|
||||||
tickDelayedEvent
|
|
||||||
);
|
|
||||||
})()
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -210,7 +176,7 @@ export abstract class BaseGrid<T extends IGridPanelView>
|
|||||||
|
|
||||||
public setVisible(panel: T, visible: boolean) {
|
public setVisible(panel: T, visible: boolean) {
|
||||||
this.gridview.setViewVisible(getGridLocation(panel.element), visible);
|
this.gridview.setViewVisible(getGridLocation(panel.element), visible);
|
||||||
this._onGridEvent.fire({ kind: GroupChangeKind.LAYOUT });
|
this._onDidLayoutChange.fire();
|
||||||
}
|
}
|
||||||
|
|
||||||
public isVisible(panel: T) {
|
public isVisible(panel: T) {
|
||||||
@ -220,7 +186,6 @@ export abstract class BaseGrid<T extends IGridPanelView>
|
|||||||
protected doAddGroup(group: T, location: number[] = [0], size?: number) {
|
protected doAddGroup(group: T, location: number[] = [0], size?: number) {
|
||||||
this.gridview.addView(group, size ?? Sizing.Distribute, location);
|
this.gridview.addView(group, size ?? Sizing.Distribute, location);
|
||||||
|
|
||||||
this._onGridEvent.fire({ kind: GroupChangeKind.ADD_GROUP });
|
|
||||||
this._onDidAddGroup.fire(group);
|
this._onDidAddGroup.fire(group);
|
||||||
|
|
||||||
this.doSetGroupActive(group);
|
this.doSetGroupActive(group);
|
||||||
@ -243,7 +208,6 @@ export abstract class BaseGrid<T extends IGridPanelView>
|
|||||||
this._groups.delete(group.id);
|
this._groups.delete(group.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
this._onGridEvent.fire({ kind: GroupChangeKind.REMOVE_GROUP });
|
|
||||||
this._onDidRemoveGroup.fire(group);
|
this._onDidRemoveGroup.fire(group);
|
||||||
|
|
||||||
if (!options?.skipActive && this._activeGroup === group) {
|
if (!options?.skipActive && this._activeGroup === group) {
|
||||||
@ -281,9 +245,6 @@ export abstract class BaseGrid<T extends IGridPanelView>
|
|||||||
|
|
||||||
this._activeGroup = group;
|
this._activeGroup = group;
|
||||||
|
|
||||||
this._onGridEvent.fire({
|
|
||||||
kind: GroupChangeKind.GROUP_ACTIVE,
|
|
||||||
});
|
|
||||||
this._onDidActiveGroupChange.fire(group);
|
this._onDidActiveGroupChange.fire(group);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -352,7 +313,6 @@ export abstract class BaseGrid<T extends IGridPanelView>
|
|||||||
public dispose(): void {
|
public dispose(): void {
|
||||||
super.dispose();
|
super.dispose();
|
||||||
|
|
||||||
this._onGridEvent.dispose();
|
|
||||||
this._onDidActiveGroupChange.dispose();
|
this._onDidActiveGroupChange.dispose();
|
||||||
this._onDidAddGroup.dispose();
|
this._onDidAddGroup.dispose();
|
||||||
this._onDidRemoveGroup.dispose();
|
this._onDidRemoveGroup.dispose();
|
||||||
|
@ -11,7 +11,6 @@ import { GridviewComponentOptions } from './options';
|
|||||||
import {
|
import {
|
||||||
BaseGrid,
|
BaseGrid,
|
||||||
Direction,
|
Direction,
|
||||||
GroupChangeKind,
|
|
||||||
IBaseGrid,
|
IBaseGrid,
|
||||||
IGridPanelView,
|
IGridPanelView,
|
||||||
toTarget,
|
toTarget,
|
||||||
@ -253,7 +252,6 @@ export class GridviewComponent
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this._onGridEvent.fire({ kind: GroupChangeKind.LAYOUT_FROM_JSON });
|
|
||||||
this._onDidLayoutfromJSON.fire();
|
this._onDidLayoutfromJSON.fire();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,6 +28,7 @@ export interface IGroupPanel extends IDisposable, IPanel {
|
|||||||
readonly api: DockviewPanelApi;
|
readonly api: DockviewPanelApi;
|
||||||
readonly title: string;
|
readonly title: string;
|
||||||
readonly suppressClosable: boolean;
|
readonly suppressClosable: boolean;
|
||||||
|
readonly params: Record<string, any> | undefined;
|
||||||
updateParentGroup(group: GroupviewPanel, isGroupActive: boolean): void;
|
updateParentGroup(group: GroupviewPanel, isGroupActive: boolean): void;
|
||||||
init(params: IGroupPanelInitParameters): void;
|
init(params: IGroupPanelInitParameters): void;
|
||||||
toJSON(): GroupviewPanelState;
|
toJSON(): GroupviewPanelState;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user