client/uiclient.c

changeset 948
94bc57d63128
parent 944
cc23aad6335e
child 953
c98404829cd3
--- a/client/uiclient.c	Wed Dec 03 18:45:05 2025 +0100
+++ b/client/uiclient.c	Thu Dec 04 19:04:08 2025 +0100
@@ -50,6 +50,7 @@
     cxMapPut(msg_types, "grid", msg_vbox);
     cxMapPut(msg_types, "end", msg_end);
     cxMapPut(msg_types, "button", msg_button);
+    cxMapPut(msg_types, "toggle", msg_togglebutton);
     
     objects = cxHashMapCreateSimple(CX_STORE_POINTERS);
 }
@@ -252,3 +253,47 @@
     
     return 0;
 }
+
+int msg_togglebutton(UiObject *parent, const CxJsonValue *value) {
+    CxJsonValue *args_value = cxJsonObjGet(value, "args");
+    cxmutstr id = jsonobj_getstring(value, "id");
+    if(!id.ptr) {
+        return 1;
+    }
+    UiObject *obj = get_msg_obj(parent, value);
+    if(!obj) {
+        return 1;
+    }
+    
+    CxJsonValue *button_type = cxJsonObjGet(value, "button_type");
+    if(!button_type || button_type->type != CX_JSON_INTEGER) {
+        return 1;
+    }
+    
+    CxJsonValue *val = cxJsonObjGet(value, "value");
+    UiInteger *i = NULL;
+    if(val && val->type == CX_JSON_STRING) {
+        i = ui_int_new(obj->ctx, val->value.string.ptr);
+    }
+    
+    UiToggleArgs *args = json2toggle_args(args_value);
+    UIWIDGET w;
+    switch(button_type->value.integer) {
+        default: {
+            w = ui_togglebutton_create(obj, args);
+            break;
+        }
+        case 1: {
+            w = ui_checkbox_create(obj, args);
+            break;
+        }
+        case 2: {
+            w = ui_switch_create(obj, args);
+            break;
+        }
+    }
+    ui_toggle_args_free(args);
+    client_reg_widget(obj, id, w);
+    
+    return 0;
+}

mercurial