From 87eb58d49f81ef5a61f0625c176b7180a78b52a1 Mon Sep 17 00:00:00 2001 From: mathuo <6710312+mathuo@users.noreply.github.com> Date: Thu, 17 Mar 2022 20:14:05 +0000 Subject: [PATCH] feat: add event --- .../src/__tests__/api/component.api.spec.ts | 11 +++++ packages/dockview/src/api/component.api.ts | 44 +++++++++++++++++++ .../src/dockview/dockviewComponent.ts | 17 ++++--- .../src/gridview/gridviewComponent.ts | 8 ++++ 4 files changed, 73 insertions(+), 7 deletions(-) diff --git a/packages/dockview/src/__tests__/api/component.api.spec.ts b/packages/dockview/src/__tests__/api/component.api.spec.ts index f4eccca30..4bac04cb2 100644 --- a/packages/dockview/src/__tests__/api/component.api.spec.ts +++ b/packages/dockview/src/__tests__/api/component.api.spec.ts @@ -91,6 +91,10 @@ describe('component.api', () => { 'focus', 'resizeToFit', 'toJSON', + 'onDidActiveGroupChange', + 'onDidAddGroup', + 'onDidRemoveGroup', + 'onDidLayoutFromJSON', ]; for (const _ of list) { @@ -130,6 +134,13 @@ describe('component.api', () => { 'closeAllGroups', 'resizeToFit', 'toJSON', + 'onDidActiveGroupChange', + 'onDidAddGroup', + 'onDidRemoveGroup', + 'onDidActivePanelChange', + 'onDidAddPanel', + 'onDidRemovePanel', + 'onDidLayoutfromJSON', ]; for (const _ of list) { diff --git a/packages/dockview/src/api/component.api.ts b/packages/dockview/src/api/component.api.ts index 64ea9016c..52d5f195c 100644 --- a/packages/dockview/src/api/component.api.ts +++ b/packages/dockview/src/api/component.api.ts @@ -255,6 +255,22 @@ export class GridviewApi implements CommonApi { return this.component.onDidLayoutChange; } + get onDidAddGroup(): Event { + return this.component.onDidAddGroup; + } + + get onDidRemoveGroup(): Event { + return this.component.onDidRemoveGroup; + } + + get onDidActiveGroupChange(): Event { + return this.component.onDidActiveGroupChange; + } + + get onDidLayoutFromJSON(): Event { + return this.component.onDidLayoutFromJSON; + } + get panels(): IGridviewPanel[] { return this.component.groups; } @@ -358,6 +374,34 @@ export class DockviewApi implements CommonApi { return this.component.onGridEvent; } + get onDidActiveGroupChange(): Event { + return this.component.onDidActiveGroupChange; + } + + get onDidAddGroup(): Event { + return this.component.onDidAddGroup; + } + + get onDidRemoveGroup(): Event { + return this.component.onDidRemoveGroup; + } + + get onDidActivePanelChange(): Event { + return this.component.onDidActivePanelChange; + } + + get onDidAddPanel(): Event { + return this.component.onDidAddPanel; + } + + get onDidRemovePanel(): Event { + return this.component.onDidRemovePanel; + } + + get onDidLayoutfromJSON(): Event { + return this.component.onDidLayoutfromJSON; + } + get onDidLayoutChange(): Event { return this.component.onDidLayoutChange; } diff --git a/packages/dockview/src/dockview/dockviewComponent.ts b/packages/dockview/src/dockview/dockviewComponent.ts index 9e311be1a..310cc5f11 100644 --- a/packages/dockview/src/dockview/dockviewComponent.ts +++ b/packages/dockview/src/dockview/dockviewComponent.ts @@ -115,6 +115,7 @@ export interface IDockviewComponent extends IBaseGrid { // readonly onDidRemovePanel: Event; readonly onDidAddPanel: Event; + readonly onDidLayoutfromJSON: Event; readonly onDidActivePanelChange: Event; } @@ -122,7 +123,9 @@ export class DockviewComponent extends BaseGrid implements IDockviewComponent { - // private readonly _panels = new Map>(); + private _deserializer: IPanelDeserializer | undefined; + private _api: DockviewApi; + private _options: DockviewComponentOptions; // events private readonly _onTabInteractionEvent = new Emitter(); @@ -143,17 +146,15 @@ export class DockviewComponent private readonly _onDidAddPanel = new Emitter(); readonly onDidAddPanel: Event = this._onDidAddPanel.event; + private readonly _onDidLayoutfromJSON = new Emitter(); + readonly onDidLayoutfromJSON: Event = this._onDidLayoutfromJSON.event; + private readonly _onDidActivePanelChange = new Emitter< IGroupPanel | undefined >(); readonly onDidActivePanelChange: Event = this._onDidActivePanelChange.event; - // everything else - private _deserializer: IPanelDeserializer | undefined; - private _api: DockviewApi; - private _options: DockviewComponentOptions; - get totalPanels(): number { return this.panels.length; } @@ -373,6 +374,7 @@ export class DockviewComponent this.gridview.layout(this.width, this.height); this._onGridEvent.fire({ kind: GroupChangeKind.LAYOUT_FROM_JSON }); + this._onDidLayoutfromJSON.fire(); } closeAllGroups(): void { @@ -602,7 +604,7 @@ export class DockviewComponent override doSetGroupActive( group: GroupviewPanel | undefined, skipFocus?: boolean - ) { + ): void { const isGroupAlreadyFocused = this._activeGroup === group; super.doSetGroupActive(group, skipFocus); @@ -767,5 +769,6 @@ export class DockviewComponent this._onDidActivePanelChange.dispose(); this._onDidAddPanel.dispose(); this._onDidRemovePanel.dispose(); + this._onDidLayoutfromJSON.dispose(); } } diff --git a/packages/dockview/src/gridview/gridviewComponent.ts b/packages/dockview/src/gridview/gridviewComponent.ts index 3ad50ec50..5a39aca4f 100644 --- a/packages/dockview/src/gridview/gridviewComponent.ts +++ b/packages/dockview/src/gridview/gridviewComponent.ts @@ -27,6 +27,7 @@ import { GridviewPanelApiImpl } from '../api/gridviewPanelApi'; import { GridviewApi } from '../api/component.api'; import { Orientation, Sizing } from '../splitview/core/splitview'; import { createComponent } from '../panel/componentFactory'; +import { Emitter, Event } from '../events'; interface PanelReference { api: GridviewPanelApiImpl; @@ -66,6 +67,7 @@ export type GridviewComponentUpdateOptions = Pick< export interface IGridviewComponent extends IBaseGrid { readonly orientation: Orientation; + readonly onDidLayoutFromJSON: Event; updateOptions(options: Partial): void; addPanel(options: AddComponentOptions): void; removePanel(panel: IGridviewPanel, sizing?: Sizing): void; @@ -91,6 +93,9 @@ export class GridviewComponent private _options: GridviewComponentOptions; private _deserializer: IPanelDeserializer | undefined; + private readonly _onDidLayoutfromJSON = new Emitter(); + readonly onDidLayoutFromJSON: Event = this._onDidLayoutfromJSON.event; + get orientation() { return this.gridview.orientation; } @@ -249,6 +254,7 @@ export class GridviewComponent } this._onGridEvent.fire({ kind: GroupChangeKind.LAYOUT_FROM_JSON }); + this._onDidLayoutfromJSON.fire(); } movePanel( @@ -427,5 +433,7 @@ export class GridviewComponent public dispose() { super.dispose(); + + this._onDidLayoutfromJSON.dispose(); } }