9 static void free_list(struct tui_widget *w, void *cls);
10 static void draw_list(struct tui_widget *w, void *cls);
12 struct tui_widget *tui_list(const char *title, int x, int y, int width, int height, tui_callback cbfunc, void *cbdata)
16 if(!(w = calloc(1, sizeof *w))) {
20 w->title = strdup(title);
26 w->entries = darr_alloc(0, sizeof *w->entries);
29 tui_set_callback((struct tui_widget*)w, TUI_ONMODIFY, cbfunc, cbdata);
31 tui_set_callback((struct tui_widget*)w, TUI_FREE, free_list, 0);
32 tui_set_callback((struct tui_widget*)w, TUI_DRAW, draw_list, 0);
33 return (struct tui_widget*)w;
36 static void free_list(struct tui_widget *w, void *cls)
38 darr_free(((struct tui_list*)w)->entries);
42 void tui_clear_list(struct tui_widget *w)
44 struct tui_list *wl = (struct tui_list*)w;
45 assert(wl->type == TUI_LIST);
46 darr_clear(wl->entries);
49 void tui_add_list_item(struct tui_widget *w, const char *text)
51 struct tui_list *wl = (struct tui_list*)w;
52 assert(wl->type == TUI_LIST);
53 darr_push(wl->entries, &text);
56 static void draw_list(struct tui_widget *w, void *cls)
59 struct tui_list *wl = (struct tui_list*)w;
61 tui_wtoscr(w, 0, 0, &x, &y);
64 tg_rect(wl->title, x, y, wl->width, wl->height, TGFX_FRAME);
66 num = darr_size(wl->entries);
67 if(num > wl->height - 2) {
72 for(i=0; i<num; i++) {
73 tg_text(x, ++y, "%s", wl->entries[i]);