UNPKG

dockview-core

Version:

Zero dependency layout manager supporting tabs, groups, grids and splitviews for vanilla TypeScript

145 lines (144 loc) 4.46 kB
import { Emitter } from '../events'; import { CompositeDisposable } from '../lifecycle'; export class TabGroup extends CompositeDisposable { get label() { return this._label; } get color() { return this._color; } get componentParams() { return this._componentParams; } setLabel(value) { if (this.isDisposed || this._label === value) { return; } this._label = value; this._onDidChange.fire(); } setColor(value) { if (this.isDisposed) { return; } const next = value === '' ? undefined : value; if (this._color === next) { return; } this._color = next; this._onDidChange.fire(); } setComponentParams(value) { if (this.isDisposed) { return; } this._componentParams = value; this._onDidChange.fire(); } get collapsed() { return this._collapsed; } get panelIds() { return this._panelIds; } get size() { return this._panelIds.length; } get isEmpty() { return this._panelIds.length === 0; } constructor(id, options) { var _a, _b; super(); this.id = id; this._collapsed = false; this._panelIds = []; this._onDidChange = new Emitter(); this.onDidChange = this._onDidChange.event; this._onDidPanelChange = new Emitter(); this.onDidPanelChange = this._onDidPanelChange.event; this._onDidCollapseChange = new Emitter(); this.onDidCollapseChange = this._onDidCollapseChange.event; this._onDidDestroy = new Emitter(); this.onDidDestroy = this._onDidDestroy.event; this._label = (_a = options === null || options === void 0 ? void 0 : options.label) !== null && _a !== void 0 ? _a : ''; this._color = (options === null || options === void 0 ? void 0 : options.color) === '' ? undefined : options === null || options === void 0 ? void 0 : options.color; this._collapsed = (_b = options === null || options === void 0 ? void 0 : options.collapsed) !== null && _b !== void 0 ? _b : false; this._componentParams = options === null || options === void 0 ? void 0 : options.componentParams; this.addDisposables(this._onDidChange, this._onDidPanelChange, this._onDidCollapseChange, this._onDidDestroy); } addPanel(panelId, index) { if (this.isDisposed) { return; } if (this._panelIds.includes(panelId)) { return; } const insertIndex = index !== undefined ? Math.max(0, Math.min(index, this._panelIds.length)) : this._panelIds.length; this._panelIds.splice(insertIndex, 0, panelId); this._onDidPanelChange.fire({ panelId, type: 'add' }); } removePanel(panelId) { if (this.isDisposed) { return false; } const index = this._panelIds.indexOf(panelId); if (index === -1) { return false; } this._panelIds.splice(index, 1); this._onDidPanelChange.fire({ panelId, type: 'remove' }); return true; } indexOfPanel(panelId) { return this._panelIds.indexOf(panelId); } containsPanel(panelId) { return this._panelIds.includes(panelId); } collapse() { if (this.isDisposed || this._collapsed) { return; } this._collapsed = true; this._onDidCollapseChange.fire(true); } expand() { if (this.isDisposed || !this._collapsed) { return; } this._collapsed = false; this._onDidCollapseChange.fire(false); } toggle() { if (this._collapsed) { this.expand(); } else { this.collapse(); } } toJSON() { const result = { id: this.id, collapsed: this._collapsed, panelIds: [...this._panelIds], }; if (this._label) { result.label = this._label; } if (this._color !== undefined) { result.color = this._color; } if (this._componentParams !== undefined) { result.componentParams = this._componentParams; } return result; } dispose() { this._onDidDestroy.fire(); super.dispose(); } }