107 lines
1.7 KiB
C
107 lines
1.7 KiB
C
// 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;
|
|
}
|