diff -r 000000000000 -r 1f419bd32da1 ui/common/context.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ui/common/context.c Sat Dec 07 12:14:59 2013 +0100 @@ -0,0 +1,101 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 2014 Olaf Wintermann. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include + +#include "context.h" +#include "../ui/window.h" + +void uic_docmgr_init() { + +} + +UiContext* uic_context(UiObject *toplevel, UcxMempool *mp) { + UiContext *ctx = ucx_mempool_malloc(mp, sizeof(UiContext)); + UcxAllocator *allocator = ucx_mempool_allocator(mp); + ctx->mempool = mp; + ctx->allocator = allocator; + + ctx->toplevel = toplevel; + ctx->vars = ucx_map_new_a(allocator, 16); + + return ctx; +} + +UiVar* uic_getvar(UiObject *obj, char *name) { + return ucx_map_cstr_get(obj->ctx->vars, name); +} + +UiVar* uic_addplaceholder(UiObject *obj, char *name) { + UiVar *var = ucx_mempool_malloc(obj->ctx->mempool, sizeof(UiVar)); + var->type = -1; + var->value = NULL; + ucx_map_cstr_put(obj->ctx->vars, name, var); +} + +void ui_window_addint(UiObject *obj, char *name) { + if(uic_getvar(obj, name)) { + // var already exists + return; + } + UiInteger *i = ucx_mempool_calloc(obj->ctx->mempool, 1, sizeof(UiInteger)); + ui_window_regint(obj, name, i); +} + +void ui_window_regint(UiObject *obj, char *name, UiInteger *i) { + if(uic_getvar(obj, name)) { + // var already exists + return; + } + UiVar *var = ucx_mempool_malloc(obj->ctx->mempool, sizeof(UiVar)); + var->value = i; + var->type = 1; + ucx_map_cstr_put(obj->ctx->vars, name, var); +} + +void ui_window_setint(UiObject *obj, char *name, int val) { + UiVar *var = uic_getvar(obj, name); + if(var && var->type == 1) { + UiInteger *i = var->value; + i->set(i, val); + } else { + // TODO: error message + } +} + +int ui_window_getint(UiObject *obj, char *name) { + UiVar *var = uic_getvar(obj, name); + if(var && var->type == 1) { + UiInteger *i = var->value; + return i->get(i); + } else { + return 0; // TODO: error message + } +}