diff -r 4e66271541e8 -r caa0df8ed095 ui/gtk/model.c --- a/ui/gtk/model.c Thu May 15 20:06:28 2014 +0200 +++ b/ui/gtk/model.c Thu May 15 21:48:53 2014 +0200 @@ -97,13 +97,40 @@ instance->stamp = g_random_int(); } -UiListModel* ui_list_model_new(UiListPtr *list, ui_model_getvalue_f getvalue) { +static GType ui_gtk_type(UiModelType type) { + switch(type) { + case UI_STRING: return G_TYPE_STRING; + case UI_INTEGER: return G_TYPE_INT; + } + return G_TYPE_INVALID; +} + +static void ui_model_set_value(UiModelType type, void *data, GValue *value) { + switch(type) { + case UI_STRING: { + value->g_type = G_TYPE_STRING; + g_value_set_string(value, data); + return; + } + case UI_INTEGER: { + value->g_type = G_TYPE_INT; + int *i = data; + g_value_set_int(value, *i); + return; + } + } + value->g_type = G_TYPE_INVALID; +} + +UiListModel* ui_list_model_new(UiListPtr *list, UiModelInfo *info) { UiListModel *model = g_object_new(list_model_type, NULL); + model->info = info; model->list = list; - model->getvalue = getvalue; model->columntypes = malloc(sizeof(GType)); - model->numcolumns = 1; - model->columntypes[0] = G_TYPE_STRING; + model->numcolumns = info->columns; + for(int i=0;icolumns;i++) { + model->columntypes[i] = ui_gtk_type(info->types[i]); + } return model; } @@ -204,15 +231,15 @@ // TODO: return correct value from column - value->g_type = G_TYPE_STRING; + //value->g_type = G_TYPE_STRING; list->iter = iter->user_data; //list->index = (int)(intptr_t)iter->user_data2; //list->current = iter->user_data3; - if(model->getvalue) { - char *str = model->getvalue(iter->user_data3, column); - g_value_set_string(value, str); + if(model->info->getvalue) { + void *data = model->info->getvalue(iter->user_data3, column); + ui_model_set_value(model->info->types[column], data, value); } else { - g_value_set_string(value, iter->user_data3); + value->g_type = G_TYPE_INVALID; } }