ui/common/types.c

changeset 102
64ded9f6a6c6
parent 101
7b3a3130be44
--- a/ui/common/types.c	Mon Jan 06 22:22:55 2025 +0100
+++ b/ui/common/types.c	Tue Feb 25 21:11:00 2025 +0100
@@ -231,6 +231,8 @@
     for (int i = 0; i < model->columns; i++) {
         newmodel->titles[i] = model->titles[i] ? cx_strdup_a(a, cx_str(model->titles[i])).ptr : NULL;
     }
+    newmodel->columnsize = cxCalloc(a, model->columns, sizeof(int));
+    memcpy(newmodel->columnsize, model->columnsize, model->columns*sizeof(int));
 
     return newmodel;
 }
@@ -239,6 +241,7 @@
     const CxAllocator* a = ctx ? ctx->allocator : cxDefaultAllocator;
     cxFree(a, mi->types);
     cxFree(a, mi->titles);
+    cxFree(a, mi->columnsize);
     cxFree(a, mi);
 }
 
@@ -301,8 +304,12 @@
 
 
 void ui_int_set(UiInteger* i, int64_t value) {
-    if (i && i->set) {
-        i->set(i, value);
+    if (i) {
+        if (i->set) {
+            i->set(i, value);
+        } else {
+            i->value = value;
+        }
     }
 }
 
@@ -315,8 +322,12 @@
 }
 
 void ui_double_set(UiDouble* d, double value) {
-    if (d && d->set) {
-        d->set(d, value);
+    if (d) {
+        if (d->set) {
+            d->set(d, value);
+        } else {
+            d->value = value;
+        }
     }
 }
 
@@ -330,8 +341,21 @@
 }
 
 void ui_string_set(UiString* s, const char* value) {
-    if (s && s->set) {
-        s->set(s, value);
+    if (s) {
+        if (s->set) {
+            s->set(s, value);
+        } else {
+            if(s->value.free) {
+                s->value.free(s->value.ptr);
+            }
+            if (value) {
+                s->value.ptr = strdup(value);
+                s->value.free = free;
+            } else {
+                s->value.ptr = NULL;
+                s->value.free = NULL;
+            }
+        }
     }
 }
 
@@ -345,8 +369,21 @@
 }
 
 void ui_text_set(UiText* s, const char* value) {
-    if (s && s->set) {
-        s->set(s, value);
+    if (s) {
+        if (s->set) {
+            s->set(s, value);
+        } else {
+            if(s->value.free) {
+                s->value.free(s->value.ptr);
+            }
+            if (value) {
+                s->value.ptr = strdup(value);
+                s->value.free = free;
+            } else {
+                s->value.ptr = NULL;
+                s->value.free = NULL;
+            }
+        }
     }
 }
 

mercurial