import addon from '../utils/addon'; import { NodeWidget } from './QWidget'; import { NodeLayout, QLayoutSignals } from './QLayout'; import { NativeElement } from '../core/Component'; import { AlignmentFlag, Direction } from '../QtEnums'; /** > Lines up child widgets horizontally or vertically. * **This class is a JS wrapper around Qt's [QBoxLayout class](https://doc.qt.io/qt-5/qboxlayout.html)** ### Example ```javascript // This example arranges two calendars horizontally. const { QBoxLayout, QCalendarWidget } = require("@nodegui/nodegui"); const centralWidget = new QWidget(); const boxLayout = new QBoxLayout(0); boxLayout.addWidget(new QCalendarWidget()); boxLayout.addWidget(new QCalendarWidget()); centralWidget.setLayout(boxLayout); ``` */ export class QBoxLayout extends NodeLayout { childLayouts: Set>; constructor(dir: Direction); constructor(dir: Direction, parent: NodeWidget); constructor(dir: Direction, parent?: NodeWidget) { let native: NativeElement; if (parent) { native = new addon.QBoxLayout(dir, parent.native); } else { native = new addon.QBoxLayout(dir); } super(native); this.setNodeParent(parent); this.childLayouts = new Set(); } addLayout(layout: NodeLayout, stretch = 0): void { this.native.addLayout(layout.native, stretch); this.childLayouts.add(layout); } addSpacing(size: number): void { this.native.addSpacing(size); } addStretch(stretch = 0): void { this.native.addStretch(stretch); } addStrut(size: number): void { this.native.addStrut(size); } addWidget(widget: NodeWidget, stretch = 0, alignment: AlignmentFlag = 0): void { this.native.addWidget(widget.native, stretch, alignment); this.nodeChildren.add(widget); } insertWidget(index: number, widget: NodeWidget, stretch = 0): void { this.native.insertWidget(index, widget.native, stretch); this.nodeChildren.add(widget); } direction(): Direction { return this.native.direction(); } insertLayout(index: number, layout: NodeLayout, stretch = 0): void { this.native.insertLayout(index, layout.native, stretch); this.childLayouts.add(layout); } insertSpacing(index: number, size: number): void { this.native.insertSpacing(index, size); } insertStretch(index: number, stretch = 0): void { this.native.insertStretch(index, stretch); } removeWidget(widget: NodeWidget): void { this.native.removeWidget(widget.native); this.nodeChildren.delete(widget); } setDirection(dir: Direction): void { this.native.setDirection(dir); } setStretch(index: number, stretch: number): void { this.native.setStretch(index, stretch); } count(): number { return this.native.count(); } } export type QBoxLayoutSignals = QLayoutSignals;