ui/common/document.c

changeset 163
b70e2a77dea0
parent 140
c03c338a7dcf
child 174
0358f1d9c506
equal deleted inserted replaced
162:18892c0a9adc 163:b70e2a77dea0
37 void uic_docmgr_init() { 37 void uic_docmgr_init() {
38 documents = ucx_map_new(32); 38 documents = ucx_map_new(32);
39 } 39 }
40 40
41 void ui_set_document(UiObject *obj, void *document) { 41 void ui_set_document(UiObject *obj, void *document) {
42 obj->ctx->set_document(obj->ctx, document); 42 uic_context_detach_all(obj->ctx);
43 obj->ctx->attach_document(obj->ctx, document);
43 } 44 }
44 45
45 void ui_detach_document(UiObject *obj) { 46 void ui_detach_document(UiObject *obj) {
46 obj->ctx->detach_document(obj->ctx); 47 uic_context_detach_all(obj->ctx);
47 } 48 }
48 49
49 void* ui_get_document(UiObject *obj) { 50 void* ui_get_document(UiObject *obj) {
50 return obj->ctx->document; 51 return obj->ctx->document;
51 } 52 }
53 void ui_set_subdocument(void *document, void *sub) { 54 void ui_set_subdocument(void *document, void *sub) {
54 UiContext *ctx = ui_document_context(document); 55 UiContext *ctx = ui_document_context(document);
55 if(!ctx) { 56 if(!ctx) {
56 fprintf(stderr, "UI Error: pointer is not a document\n"); 57 fprintf(stderr, "UI Error: pointer is not a document\n");
57 } 58 }
58 uic_context_set_document(ctx, sub); 59 // TODO
59 } 60 }
60 61
61 void ui_detach_subdocument(void *document, void *sub) { 62 void ui_detach_subdocument(void *document, void *sub) {
62 UiContext *ctx = ui_document_context(document); 63 UiContext *ctx = ui_document_context(document);
63 if(!ctx) { 64 if(!ctx) {
64 fprintf(stderr, "UI Error: pointer is not a document\n"); 65 fprintf(stderr, "UI Error: pointer is not a document\n");
65 } 66 }
66 uic_context_detach_document(ctx); 67 // TODO
67 } 68 }
68 69
69 void* ui_get_subdocument(void *document) { 70 void* ui_get_subdocument(void *document) {
70 UiContext *ctx = ui_document_context(document); 71 UiContext *ctx = ui_document_context(document);
71 if(!ctx) { 72 if(!ctx) {
72 fprintf(stderr, "UI Error: pointer is not a document\n"); 73 fprintf(stderr, "UI Error: pointer is not a document\n");
73 } 74 }
74 return ctx->document; 75 // TODO
76 return NULL;
75 } 77 }
76 78
77 void* ui_document_new(size_t size) { 79 void* ui_document_new(size_t size) {
78 UcxMempool *mp = ucx_mempool_new(256); 80 UcxMempool *mp = ucx_mempool_new(256);
79 UiContext *ctx = ucx_mempool_calloc(mp, 1, sizeof(UiContext)); 81 UiContext *ctx = ucx_mempool_calloc(mp, 1, sizeof(UiContext));
80 ctx->set_document = uic_context_set_document; 82 ctx->attach_document = uic_context_attach_document;
81 ctx->detach_document = uic_context_detach_document; 83 ctx->detach_document2 = uic_context_detach_document2;
82 ctx->mempool = mp; 84 ctx->mempool = mp;
83 ctx->vars = ucx_map_new_a(mp->allocator, 16); 85 ctx->vars = ucx_map_new_a(mp->allocator, 16);
84 86
85 void *document = ucx_mempool_calloc(mp, 1, size); 87 void *document = ucx_mempool_calloc(mp, 1, size);
86 ucx_map_put(documents, ucx_key(&document, sizeof(void*)), ctx); 88 ucx_map_put(documents, ucx_key(&document, sizeof(void*)), ctx);

mercurial