// 3 june 2018 #include "../ui.h" #include "uipriv.h" #include "table.h" struct uiTableValue { uiTableValueType type; union { char *str; uiImage *img; int i; struct { double r; double g; double b; double a; } color; } u; }; static uiTableValue *newTableValue(uiTableValueType type) { uiTableValue *v; v = uiprivNew(uiTableValue); v->type = type; return v; } void uiFreeTableValue(uiTableValue *v) { switch (v->type) { case uiTableValueTypeString: uiprivFree(v->u.str); break; } uiprivFree(v); } uiTableValueType uiTableValueGetType(const uiTableValue *v) { return v->type; } uiTableValue *uiNewTableValueString(const char *str) { uiTableValue *v; v = newTableValue(uiTableValueTypeString); v->u.str = (char *) uiprivAlloc((strlen(str) + 1) * sizeof (char), "char[] (uiTableValue)"); strcpy(v->u.str, str); return v; } const char *uiTableValueString(const uiTableValue *v) { return v->u.str; } uiTableValue *uiNewTableValueImage(uiImage *img) { uiTableValue *v; v = newTableValue(uiTableValueTypeImage); v->u.img = img; return v; } uiImage *uiTableValueImage(const uiTableValue *v) { return v->u.img; } uiTableValue *uiNewTableValueInt(int i) { uiTableValue *v; v = newTableValue(uiTableValueTypeInt); v->u.i = i; return v; } int uiTableValueInt(const uiTableValue *v) { return v->u.i; } uiTableValue *uiNewTableValueColor(double r, double g, double b, double a) { uiTableValue *v; v = newTableValue(uiTableValueTypeColor); v->u.color.r = r; v->u.color.g = g; v->u.color.b = b; v->u.color.a = a; return v; } void uiTableValueColor(const uiTableValue *v, double *r, double *g, double *b, double *a) { *r = v->u.color.r; *g = v->u.color.g; *b = v->u.color.b; *a = v->u.color.a; }