blob: 579625c846e0570f55504442c5a6c8322bd65b7e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
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);
};
};
};
|