import { HTMLWidget, SVGWidget, Widget } from "@hpcc-js/common"; import { Message, SplitPanel as PSplitPanel, Widget as PWidget } from "./phosphor-shim.ts"; import { Msg, WidgetAdapter, WidgetAdapterArray } from "./WidgetAdapter.ts"; import "../src/DockPanel.css"; export class SplitPanel extends HTMLWidget { private _split: PSplitPanel; private content = WidgetAdapterArray.create(); constructor(orientation: "horizontal" | "vertical" = "vertical") { super(); this._split = new PSplitPanel({ orientation }); this._tag = "div"; this._split.id = "p" + this.id(); } protected getWidgetAdapter(widget: Widget): WidgetAdapter | null { let retVal = null; this.content.some(wa => { if (wa.widget === widget) { retVal = wa; return true; } return false; }); return retVal; } addWidget(widget: SVGWidget | HTMLWidget) { const wa = new WidgetAdapter(this, widget); this._split.addWidget(wa); this.content.push(wa); return this; } relativeSizes(): number[]; relativeSizes(_: number[]): this; relativeSizes(_?: number[]): number[] | this { if (!arguments.length) return this._split.relativeSizes(); this._split.setRelativeSizes(_); return this; } enter(domNode, element) { super.enter(domNode, element); PWidget.attach(this._split, domNode); } update(domNode, element) { super.update(domNode, element); element.select(".lm-Widget") .style("width", this.width() + "px") .style("height", this.height() + "px") ; } exit(domNode, element) { PWidget.detach(this._split); super.exit(domNode, element); } render(callback?: (w: Widget) => void): this { return super.render(w => { this.content.watchRendered(this, callback); this._split.update(); }); } private _prevActive: Widget; processMessage(msg: Message): void { switch (msg.type) { case "wa-activate-request": const widget = (msg as Msg.WAActivateRequest).wa.widget; if (this._prevActive !== widget) { this._prevActive = widget; this.childActivation(widget); } break; } } // Events --- childActivation(w: Widget) { } } SplitPanel.prototype._class += " phosphor_SplitPanel";