16 void tui_shutdown(void)
21 struct tui_widget *tui_widget(int type)
25 if(!(w = calloc(1, sizeof *w))) {
32 void tui_free(struct tui_widget *w)
35 if(w->cbfunc[TUI_FREE]) {
36 w->cbfunc[TUI_FREE](w, 0);
43 void tui_add_widget(struct tui_widget *par, struct tui_widget *w)
45 if(w->par == par) return;
52 void tui_remove_widget(struct tui_widget *par, struct tui_widget *w)
54 struct tui_widget *iter, dummy;
57 fprintf(stderr, "failed to remove widget %p from %p\n", (void*)w, (void*)par);
61 dummy.next = par->child;
70 par->child = dummy.next;
76 struct tui_widget *tui_parent(struct tui_widget *w)
81 void tui_draw(struct tui_widget *w)
83 struct tui_widget *iter;
85 if(w->cbfunc[TUI_DRAW]) {
86 w->cbfunc[TUI_DRAW](w, 0);
98 void tui_set_callback(struct tui_widget *w, int type, tui_callback func, void *cls)
100 w->cbfunc[type] = func;
101 w->cbcls[type] = cls;
104 struct tui_widget *tui_window(const char *title, int x, int y, int width, int height)
106 struct tui_widget *w;
108 if(!(w = tui_widget(TUI_WINDOW))) {
111 w->title = strdup(title);
119 struct tui_widget *tui_button(const char *title, int x, int y, tui_callback cbfunc, void *cbdata)
121 struct tui_widget *w;
123 if(!(w = tui_widget(TUI_BUTTON))) {
126 w->title = strdup(title);
129 w->width = strlen(title) + 2;
133 tui_set_callback(w, TUI_ONCLICK, cbfunc, cbdata);
138 void tui_wtoscr(struct tui_widget *w, int x, int y, int *retx, int *rety)
149 void tui_scrtow(struct tui_widget *w, int x, int y, int *retx, int *rety)
161 void tui_status(int type, const char *fmt, ...)
165 tui_vstatus(type, fmt, ap);
169 void tui_vstatus(int type, const char *fmt, va_list ap)
174 tg_vtext(0, 25, fmt, ap);
177 void tui_msgbox(int type, const char *title, const char *msg, ...)
181 tui_vmsgbox(type, title, msg, ap);
185 void tui_vmsgbox(int type, const char *title, const char *msg, va_list ap)
190 tg_vtext(0, 25, msg, ap);