use libtui; use libtui::widget; use libtui::layout; use unix::tty; export type vlayout = struct { layout: layout::layout, }; // Create and return a new vlayout from a list of widgets. [[finishall]] must be // called to properly free the widget's and layout's resources. export fn newvlayout(widgets: *widget::widget...) vlayout = { let sz = libtui::getwinsize(u.list.ui)!; let cols = sz.columns / len(widgets); for (let i = 0z; i < len(widgets); i += 1) { const s = tty::ttysize { columns = cols, rows = sz.rows, }; widget::setsize(widgets[i], s); }; return vlayout { layout = layout { widgets = widgets, }, }; }; // Display all the widgets contained in the given layout. export fn print(layout: layout::layout) (void | widget::error) = { const layout = layout: vlayout; for (let i = 0z; i < len(layout.widgets); i += 1) { match (layout.widgets[i].print) { case null => return; case let f: *widget::print => f(layout.widgets[i])?; }; libtui::cursorhome(widgets[i].ui); for (let j = 0z; j < widgets[i].sz.columns; j += 1) { libtui::cursorright(widgets[i].ui); }; }; };