import { injectable } from 'inversify'; import { PanelLayout, Widget } from './widget'; import { each } from '@phosphor/algorithm'; import { MessageLoop, Message } from '@phosphor/messaging'; import { StatefulWidget, StatefulWidgetAbstract } from './stateful-widget'; /* eslint-disable @typescript-eslint/no-explicit-any */ @injectable() export class StatefulLayout extends PanelLayout implements StatefulWidget { /** * 将父节点的大小透传给自节点 * @param msg */ protected onResize(msg: Widget.ResizeMessage): void { each(this, widget => { MessageLoop.postMessage(widget, msg); }); } addWidget(widget: StatefulWidgetAbstract): void { super.addWidget(widget); } removeWidget(widget: StatefulWidgetAbstract): void { super.removeWidget(widget); } storeState(): object { const state: any = {}; each(this, (widget: StatefulWidgetAbstract) => { state[widget.id] = widget.storeState(); }); return state; } restoreState(oldState: object): void { each(this, (widget: StatefulWidgetAbstract) => { const data = (oldState as any)[widget.id] as object; if (data) { widget.restoreState(data); } }); } onUpdateRequest(msg: Message): void { each(this, (widget: StatefulWidgetAbstract) => { // 只有状态修改才通知 if (widget.isStateChanged()) MessageLoop.postMessage(widget, msg); }); } resetState(): void { each(this, (widget: StatefulWidgetAbstract) => { widget.resetState(); }); } }