#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "document.h"
static UcxMap *documents;
void uic_docmgr_init() {
documents = ucx_map_new(
32);
}
void ui_set_document(UiObject *obj,
void *document) {
uic_context_detach_all(obj->ctx);
obj->ctx->attach_document(obj->ctx, document);
}
void ui_detach_document(UiObject *obj) {
uic_context_detach_all(obj->ctx);
}
void* ui_get_document(UiObject *obj) {
return obj->ctx->document;
}
void ui_set_subdocument(
void *document,
void *sub) {
UiContext *ctx = ui_document_context(document);
if(!ctx) {
fprintf(stderr,
"UI Error: pointer is not a document\n");
}
}
void ui_detach_subdocument(
void *document,
void *sub) {
UiContext *ctx = ui_document_context(document);
if(!ctx) {
fprintf(stderr,
"UI Error: pointer is not a document\n");
}
}
void* ui_get_subdocument(
void *document) {
UiContext *ctx = ui_document_context(document);
if(!ctx) {
fprintf(stderr,
"UI Error: pointer is not a document\n");
}
return NULL;
}
void* ui_document_new(
size_t size) {
UcxMempool *mp = ucx_mempool_new(
256);
UiContext *ctx = ucx_mempool_calloc(mp,
1,
sizeof(UiContext));
ctx->attach_document = uic_context_attach_document;
ctx->detach_document2 = uic_context_detach_document2;
ctx->mempool = mp;
ctx->vars = ucx_map_new_a(mp->allocator,
16);
void *document = ucx_mempool_calloc(mp,
1, size);
ucx_map_put(documents, ucx_key(&document,
sizeof(
void*)), ctx);
return document;
}
void ui_document_destroy(
void *doc) {
}
UiContext* ui_document_context(
void *doc) {
if(doc) {
return ucx_map_get(documents, ucx_key(&doc,
sizeof(
void*)));
}
else {
return NULL;
}
}