use libtui; use libtui::widget; use io; use unix::tty; use fmt; use os; export type layout = struct { widgets: []*widget::widget, }; // Create and return a new layout from a list of widgets. [[finishall]] must be // called to properly free the widget's nad layout's resources. export fn newlayout(widgets: *widget::widget...) layout = { return layout { widgets = widgets, }; }; // Display all the widgets contained in the given layout. export fn print(layout: layout) (void | widget::error) = { //libtui::clear(layout.widgets[0].ui); libtui::doclear(&layout.widgets[0].ui); 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])?; }; }; }; // Finish and free the widgets in the given layout. export fn finishall(layout: *layout) void = { for (let i = 0z; i < len(layout.widgets); i += 1) { match (layout.widgets[i].finish) { case null => return; case let f: *widget::finish => f(layout.widgets[i]); }; }; free(layout.widgets); }; // Notify all the widgets contained in the given layout. Returns true as soon as // one of the widget's listeners returns true, false otherwise. export fn notifyall(layout: layout, k: libtui::key) bool = { for (let i = 0z; i < len(layout.widgets); i += 1) { if (widget::notify(layout.widgets[i], k)) { return true; }; }; return false; };