An editor-style docking region: a tree of resizable splits with tabbed UIDockGroups at the leaves. Add panels with addPanel (a new tab in the primary group) or dock(panel, target, zone) (split a target). Dragging a panel's tab re-docks it live — a drop-zone overlay shows where it will land (CENTER tabs into a group, the edges split it), and emptied groups collapse so the tree stays tidy. Split dividers drag to reproportion.

The layout is a mutable node tree the host lays out to fill its bounds; call invalidate() after a structural change (the dock/undock operations do this for you).

Constructor

new(width:Float, height:Float)

Parameters:

width

layout width

height

layout height

Variables

@:value(6)dividerThickness:Float = 6

Base (unscaled) split-divider thickness.

@:value(60)minPane:Float = 60

Smallest a pane may be squeezed to by a divider drag, in UI pixels.

Methods

addPanel(panel:UIDockPanel):UIDockGroup

Adds a panel as a new tab in the primary (first) group, creating the group when the host is empty.

Parameters:

panel

the panel to dock

Returns:

the group the panel landed in

dock(panel:UIDockPanel, target:UIDockGroup, zone:UIDockZone):UIDockGroup

Docks a panel into a target group: a new tab (CENTER) or a split on an edge.

Parameters:

panel

the panel to dock (need not already be in the host)

target

the group to dock into or split

zone

where the panel lands

Returns:

the group the panel landed in (a new group for edge zones)

Inherited Variables

Defined by UIComponent

@:value(true)enabled:Bool = true

Disabled widgets ignore the pointer and typically render dimmed.

@:value(0)read onlyh:Float = 0

Layout height in UI units.

@:value(MouseCursor.BUTTON)hoverCursor:MouseCursor = MouseCursor.BUTTON

Native cursor while hovering (interactive widgets; null keeps the arrow).

@:value(false)read onlyhovered:Bool = false

true while the cursor is over this widget.

@:value(false)longPressable:Bool = false

Opts a subclass that overrides onRightPress (without setting onRightClick) into long-press-as-right-click on touch. Widgets with onRightClick set are included automatically.

@:value(null)onClick:() ‑> Void = null

Fired on a completed click (press + release on this widget). Requires an interactive widget.

@:value(null)onHover:() ‑> Void = null

Fired when the cursor first enters this widget (hover-driven descriptions/previews). Interactive widgets only.

@:value(null)onRightClick:() ‑> Void = null

Fired on a right mouse press over this widget (context menus). Only interactive widgets receive pointer events, so this never fires on passive widgets like UILabel/UIPanel — attach it to a UIButton (or another interactive widget) instead. On touch, a long-press fires the same path (see UIRoot.longPressMs).

@:value(false)read onlypressed:Bool = false

true while a press that started here is held.

@:value(null)tooltip:String = null

Optional tooltip text (already-localized or a fixed string).

@:value(null)tooltipShortcut:String = null

Optional right-aligned shortcut hint rendered in the tooltip.

@:value(0)read onlyw:Float = 0

Layout width in UI units (independent of DisplayObject's content-derived width).

Inherited Methods

Defined by UIComponent

invalidate():Void

Schedules a repaint for the next frame (cheap; deduplicated).

resize(width:Float, height:Float):Void

Sets the layout size and repaints when it changed.

Parameters:

width

the new layout width in UI units

height

the new layout height in UI units