--- a/application/main.c Wed Nov 19 09:20:18 2025 +0100 +++ b/application/main.c Wed Nov 19 11:41:33 2025 +0100 @@ -1196,38 +1196,34 @@ printf("button clicked\n"); } +typedef struct Person { + char *name; + char *email; +} Person; + +Person person1 = { "Alice", "alice@localhost" }; +Person person2 = { "Bob", "bob@localhost" }; + +void* person_getvalue(void *elm, int col) { + Person *p = (Person *) elm; + if (col == 0) { + return p->name; + } else { + return p->email; + } +} + void application_startup(UiEvent *event, void *data) { UiObject *obj = ui_window("Test w32", NULL); - ui_grid(obj, .margin = 10, .columnspacing = 10, .rowspacing = 10, .fill = TRUE) { - ui_button(obj, .label = "Test", .hfill = TRUE, .hexpand = TRUE, .colspan = 3, .margin = 10); - ui_newline(obj); - ui_textfield(obj, .varname = "text1", .hfill = TRUE, .hexpand = TRUE, .colspan = 2); - ui_newline(obj); - - ui_button(obj, .label = "Test 2-1"); - ui_button(obj, .label = "Test 2-2"); - ui_button(obj, .label = "Test 2-3"); - ui_newline(obj); - - ui_button(obj, .label = "Test 3XX", .colspan = 3, .fill = TRUE, .onclick = action_button); - ui_newline(obj); + UiList *list = ui_list_new(obj->ctx, "persons"); + ui_list_append(list, &person1); + ui_list_append(list, &person2); - ui_button(obj, .label = "End"); - ui_newline(obj); - - ui_togglebutton(obj, .label = "Test"); - ui_newline(obj); - - ui_checkbox(obj, .label = "Checkbox"); - ui_newline(obj); - - ui_hbox(obj, .spacing = 10, .colspan = 3, .hexpand = TRUE, .hfill = TRUE) { - ui_radiobutton(obj, .label = "Option 1", .varname = "radio1"); - ui_radiobutton(obj, .label = "Option 2", .varname = "radio1"); - ui_radiobutton(obj, .label = "Option 3", .varname = "radio1"); - } - + ui_grid(obj, .margin = 10, .columnspacing = 10, .rowspacing = 10, .fill = TRUE) { + UiModel *model = ui_model(obj->ctx, UI_STRING, "Name", UI_STRING, "Email", -1); + ui_table(obj, .fill = TRUE, .varname = "persons", .model = model, .getvalue = person_getvalue); + ui_model_free(obj->ctx, model); }