dockview-core
Version:
Zero dependency layout manager supporting tabs, groups, grids and splitviews for vanilla TypeScript
145 lines (144 loc) • 4.46 kB
JavaScript
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();
}
}