ui/common/context.c

changeset 51
e324291ca9f8
parent 49
2f71f4ee247a
equal deleted inserted replaced
50:9c25e2616bfa 51:e324291ca9f8
160 cxListDestroy(ls); 160 cxListDestroy(ls);
161 } 161 }
162 162
163 static UiVar* ctx_getvar(UiContext *ctx, CxHashKey key) { 163 static UiVar* ctx_getvar(UiContext *ctx, CxHashKey key) {
164 UiVar *var = cxMapGet(ctx->vars, key); 164 UiVar *var = cxMapGet(ctx->vars, key);
165 if(!var) { 165 if(!var && ctx->documents) {
166 CxIterator i = cxListIterator(ctx->documents); 166 CxIterator i = cxListIterator(ctx->documents);
167 cx_foreach(void *, doc, i) { 167 cx_foreach(void *, doc, i) {
168 UiContext *subctx = ui_document_context(doc); 168 UiContext *subctx = ui_document_context(doc);
169 var = ctx_getvar(subctx, key); 169 var = ctx_getvar(subctx, key);
170 if(var) { 170 if(var) {
240 break; 240 break;
241 } 241 }
242 case UI_VAR_RANGE: { 242 case UI_VAR_RANGE: {
243 val = ui_range_new(ctx, NULL); 243 val = ui_range_new(ctx, NULL);
244 break; 244 break;
245 }
246 case UI_VAR_GENERIC: {
247 val = ui_generic_new(ctx, NULL);
245 } 248 }
246 } 249 }
247 return val; 250 return val;
248 } 251 }
249 252
341 t->setextent(t, t->extent); 344 t->setextent(t, t->extent);
342 t->setrange(t, t->min, t->max); 345 t->setrange(t, t->min, t->max);
343 t->set(t, t->value); 346 t->set(t, t->value);
344 break; 347 break;
345 } 348 }
349 case UI_VAR_GENERIC: {
350 UiGeneric *f = fromvalue;
351 UiGeneric *t = to->value;
352 if(!f->obj) break;
353 uic_generic_copy(f, t);
354 t->set(t, t->value, t->type);
355 break;
356 }
346 } 357 }
347 } 358 }
348 359
349 void uic_save_var2(UiVar *var) { 360 void uic_save_var2(UiVar *var) {
350 switch(var->type) { 361 switch(var->type) {
353 case UI_VAR_DOUBLE: uic_double_save(var->value); break; 364 case UI_VAR_DOUBLE: uic_double_save(var->value); break;
354 case UI_VAR_STRING: uic_string_save(var->value); break; 365 case UI_VAR_STRING: uic_string_save(var->value); break;
355 case UI_VAR_TEXT: uic_text_save(var->value); break; 366 case UI_VAR_TEXT: uic_text_save(var->value); break;
356 case UI_VAR_LIST: break; 367 case UI_VAR_LIST: break;
357 case UI_VAR_RANGE: uic_range_save(var->value); break; 368 case UI_VAR_RANGE: uic_range_save(var->value); break;
369 case UI_VAR_GENERIC: uic_generic_save(var->value); break;
358 } 370 }
359 } 371 }
360 372
361 void uic_unbind_var(UiVar *var) { 373 void uic_unbind_var(UiVar *var) {
362 switch(var->type) { 374 switch(var->type) {
365 case UI_VAR_DOUBLE: uic_double_unbind(var->value); break; 377 case UI_VAR_DOUBLE: uic_double_unbind(var->value); break;
366 case UI_VAR_STRING: uic_string_unbind(var->value); break; 378 case UI_VAR_STRING: uic_string_unbind(var->value); break;
367 case UI_VAR_TEXT: uic_text_unbind(var->value); break; 379 case UI_VAR_TEXT: uic_text_unbind(var->value); break;
368 case UI_VAR_LIST: uic_list_unbind(var->value); break; 380 case UI_VAR_LIST: uic_list_unbind(var->value); break;
369 case UI_VAR_RANGE: uic_range_unbind(var->value); break; 381 case UI_VAR_RANGE: uic_range_unbind(var->value); break;
382 case UI_VAR_GENERIC: uic_generic_unbind(var->value); break;
370 } 383 }
371 } 384 }
372 385
373 void uic_reg_var(UiContext *ctx, char *name, UiVarType type, void *value) { 386 void uic_reg_var(UiContext *ctx, char *name, UiVarType type, void *value) {
374 // TODO: do we need/want this? Why adding vars to a context after 387 // TODO: do we need/want this? Why adding vars to a context after
526 } 539 }
527 540
528 cxListAdd(ctx->group_widgets, &gw); 541 cxListAdd(ctx->group_widgets, &gw);
529 } 542 }
530 543
544 UIEXPORT void *ui_ctx_allocator(UiContext *ctx) {
545 return (void*) ctx ? ctx->allocator : NULL;
546 }
547
531 void* ui_malloc(UiContext *ctx, size_t size) { 548 void* ui_malloc(UiContext *ctx, size_t size) {
532 return ctx ? cxMalloc(ctx->allocator, size) : NULL; 549 return ctx ? cxMalloc(ctx->allocator, size) : NULL;
533 } 550 }
534 551
535 void* ui_calloc(UiContext *ctx, size_t nelem, size_t elsize) { 552 void* ui_calloc(UiContext *ctx, size_t nelem, size_t elsize) {

mercurial