Split View Widget
Overview
The SplitView widget provides a resizable split-pane interface for displaying two content areas. It supports both horizontal and vertical splits with adjustable ratios and interactive resizing.
Properties
first: Content for the first panesecond: Content for the second paneorientation: Split orientation (.horizontalor.vertical)ratio: Split ratio between panes (0.0 - 1.0)min_size: Minimum size for each panedragging: Whether the divider is currently being draggedshow_divider: Whether to display the dividerdivider_char: Character for vertical dividerhorizontal_divider_char: Character for horizontal dividerdivider_style: Style for the dividerfocused_pane: Currently focused pane (0 or 1)base: Base widget state
Methods
horizontal(first: FirstType, second: SecondType): Creates a horizontal split viewvertical(first: FirstType, second: SecondType): Creates a vertical split viewwithRatio(r: f32): Sets the split ratiowithMinSize(size: u16): Sets the minimum pane sizehideDivider(): Hides the divider linerender(ctx: *RenderContext): Renders both panes and dividerhandleEvent(event: Event): Handles keyboard and mouse eventsisFocusable(): Returns true as split views are focusablesizeHint(): Returns size hint for layout
Events
- Keyboard Navigation: Tab to switch between panes
- Mouse Interaction: Click and drag divider to resize, click panes to focus
Examples
Basic Horizontal Split
zig
const tui = @import("tui");
const SplitView = tui.widgets.SplitView;
const Text = tui.widgets.Text;
var left_text = Text.init("Left pane content");
var right_text = Text.init("Right pane content");
var split_view = SplitView(Text, Text).horizontal(left_text, right_text);Vertical Split with Custom Ratio
zig
var split_view = SplitView(Text, Text).vertical(left_text, right_text)
.withRatio(0.3);Hidden Divider
zig
var split_view = SplitView(Text, Text).horizontal(left_text, right_text)
.hideDivider();