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); |