application/demo_bindings.c

changeset 915
ddbbceb8c3a5
parent 914
4d5aa85bc5ed
child 958
749a8a36d74b
--- 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);
         }
     }
     

mercurial