From c3f1bda8819138ad49e81989661b0da71bd764a8 Mon Sep 17 00:00:00 2001 From: mathuo <6710312+mathuo@users.noreply.github.com> Date: Mon, 14 Mar 2022 19:52:52 +0000 Subject: [PATCH] feat: add group active events --- packages/dockview/src/api/groupPanelApi.ts | 30 ++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/packages/dockview/src/api/groupPanelApi.ts b/packages/dockview/src/api/groupPanelApi.ts index e23d20c48..f8fa40f78 100644 --- a/packages/dockview/src/api/groupPanelApi.ts +++ b/packages/dockview/src/api/groupPanelApi.ts @@ -2,6 +2,7 @@ import { Emitter } from '../events'; import { GridviewPanelApiImpl, GridviewPanelApi } from './gridviewPanelApi'; import { IGroupPanel } from '../groupview/groupPanel'; import { GroupviewPanel } from '../groupview/groupviewPanel'; +import { MutableDisposable } from '../lifecycle'; export interface TitleEvent { readonly title: string; @@ -40,6 +41,14 @@ export class DockviewPanelApiImpl readonly _suppressClosableChanged = new Emitter(); readonly suppressClosableChanged = this._suppressClosableChanged.event; + private readonly _onDidActiveGroupChange = new Emitter(); + readonly onDidActiveGroupChange = this._onDidActiveGroupChange.event; + + private readonly _onDidGroupChange = new Emitter(); + readonly onDidGroupChange = this._onDidGroupChange.event; + + private disposable = new MutableDisposable(); + get title() { return this.panel.title; } @@ -53,7 +62,21 @@ export class DockviewPanelApiImpl } set group(value: GroupviewPanel | undefined) { + const isOldGroupActive = this.isGroupActive; + this._group = value; + + this._onDidGroupChange.fire(); + + if (this._group) { + this.disposable.value = this._group.api.onDidActiveChange(() => { + this._onDidActiveGroupChange.fire(); + }); + + if (this.isGroupActive !== isOldGroupActive) { + this._onDidActiveGroupChange.fire(); + } + } } get group(): GroupviewPanel | undefined { @@ -62,12 +85,15 @@ export class DockviewPanelApiImpl constructor(private panel: IGroupPanel, group: GroupviewPanel | undefined) { super(panel.id); - this._group = group; + this.group = group; this.addDisposables( + this.disposable, this._onDidTitleChange, this._titleChanged, - this._suppressClosableChanged + this._suppressClosableChanged, + this._onDidGroupChange, + this._onDidActiveGroupChange ); }