Tue, 18 Nov 2025 18:54:53 +0100
add sub-documents to bindings demo
| application/demo_bindings.c | file | annotate | diff | comparison | revisions | |
| application/demo_bindings.h | file | annotate | diff | comparison | revisions |
--- a/application/demo_bindings.c Tue Nov 18 17:26:15 2025 +0100 +++ b/application/demo_bindings.c Tue Nov 18 18:54:53 2025 +0100 @@ -43,11 +43,25 @@ doc->id = ui_string_new(ctx, "id"); doc->name = ui_string_new(ctx, "name"); - doc->input_name = ui_string_new(ctx, "input_name"); + doc->subdocuments = ui_list_new(ctx, "subdocuments"); ui_set(doc->id, buf); + // create some sub documents + for(int i=0;i<3;i++) { + SubDocument *sub = ui_document_new(sizeof(SubDocument)); + UiContext *subctx = ui_document_context(sub); + sub->id = ui_string_new(subctx, "sub_id"); + sub->name = ui_string_new(subctx, "sub_name"); + sub->input_name = ui_string_new(subctx, "sub_input_name"); + + snprintf(buf, 32, "%d.%d", id, i); + ui_set(sub->id, buf); + + ui_list_append(doc->subdocuments, sub); + } + return doc; } @@ -76,11 +90,36 @@ } } +void switch_subdocument(UiEvent *event, void *userdata) { + MainWindow *wdata = event->window; + Document *doc = event->document; + UiContext *ctx = ui_document_context(doc); + if(doc->current_sub) { + ui_detach_document(ctx, doc->current_sub); + doc->current_sub = NULL; + } + + SubDocument *sub = ui_list_get(doc->subdocuments, event->intval); + if(sub) { + char *s1 = ui_get(sub->id); + char *s2 = ui_get(sub->name); + printf("sub %s - %s\n", s1, s2); + ui_attach_document(ctx, sub); + doc->current_sub = sub; + + } +} + void* doclist_get_value(void *elm, int col) { Document *doc = elm; return ui_get(doc->id); } +void* sublist_get_value(void *elm, int col) { + SubDocument *doc = elm; + return ui_get(doc->id); +} + void application_startup(UiEvent *event, void *data) { UiObject *obj = ui_simple_window("Bindings Demo", NULL); MainWindow *wdata = ui_malloc(obj->ctx, sizeof(MainWindow)); @@ -97,12 +136,24 @@ ui_llabel(obj, .varname = "name", .hfill = TRUE, .hexpand = TRUE, .vfill = TRUE); ui_newline(obj); + ui_rlabel(obj, .label = "Sub Document:"); + ui_llabel(obj, .varname = "sub_id", .hfill = TRUE, .hexpand = TRUE, .vfill = TRUE); + ui_newline(obj); + + ui_rlabel(obj, .label = "Name:"); + ui_llabel(obj, .varname = "sub_name", .hfill = TRUE, .hexpand = TRUE, .vfill = TRUE); + ui_newline(obj); + ui_combobox(obj, .varname = "doclist", .colspan = 2, .onactivate = switch_document, .getvalue = doclist_get_value, .colspan = 2, .hfill = TRUE); ui_newline(obj); ui_frame(obj, .label = "Document", .colspan = 2, .fill = TRUE, .subcontainer = UI_CONTAINER_GRID, .columnspacing = 10, .rowspacing = 10, .padding = 10) { ui_rlabel(obj, .label = "Name:", .vfill = TRUE); ui_textfield(obj, .varname = "input_name", .onchange = update_name); + ui_newline(obj); + ui_separator(obj, .colspan = 2, .hfill = TRUE); + ui_newline(obj); + ui_combobox(obj, .varname = "subdocuments", .getvalue = sublist_get_value, .onactivate = switch_subdocument, .colspan = 2, .hfill = TRUE); } }
--- a/application/demo_bindings.h Tue Nov 18 17:26:15 2025 +0100 +++ b/application/demo_bindings.h Tue Nov 18 18:54:53 2025 +0100 @@ -32,9 +32,22 @@ UiList *doclist; } MainWindow; +typedef struct SubDocument SubDocument; + typedef struct Document { UiString *id; UiString *name; UiString *input_name; + + UiList *subdocuments; + SubDocument *current_sub; } Document; + +struct SubDocument { + UiString *id; + UiString *name; + + UiString *input_name; +}; +