expose params object for dockview panels

This commit is contained in:
mathuo 2022-04-22 22:51:21 +01:00
parent 2e051f6690
commit 557621aa83
No known key found for this signature in database
GPG Key ID: C6EEDEFD6CA07281
11 changed files with 171 additions and 174 deletions

View File

@ -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',

View File

@ -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();

View File

@ -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 = [];

View File

@ -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({

View File

@ -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;
} }

View File

@ -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 {

View File

@ -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,

View File

@ -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;
} }

View File

@ -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();

View File

@ -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();
} }

View File

@ -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;