1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #include <stdio.h>
30 #include <stdlib.h>
31 #include <string.h>
32
33 #include "document.h"
34
35 static UcxMap *documents;
36
37 void uic_docmgr_init() {
38 documents = ucx_map_new(
32);
39 }
40
41 void ui_set_document(UiObject *obj,
void *document) {
42 uic_context_detach_all(obj->ctx);
43 obj->ctx->attach_document(obj->ctx, document);
44 }
45
46 void ui_detach_document(UiObject *obj) {
47 uic_context_detach_all(obj->ctx);
48 }
49
50 void* ui_get_document(UiObject *obj) {
51 return obj->ctx->document;
52 }
53
54 void ui_set_subdocument(
void *document,
void *sub) {
55 UiContext *ctx = ui_document_context(document);
56 if(!ctx) {
57 fprintf(stderr,
"UI Error: pointer is not a document\n");
58 }
59
60 }
61
62 void ui_detach_subdocument(
void *document,
void *sub) {
63 UiContext *ctx = ui_document_context(document);
64 if(!ctx) {
65 fprintf(stderr,
"UI Error: pointer is not a document\n");
66 }
67
68 }
69
70 void* ui_get_subdocument(
void *document) {
71 UiContext *ctx = ui_document_context(document);
72 if(!ctx) {
73 fprintf(stderr,
"UI Error: pointer is not a document\n");
74 }
75
76 return NULL;
77 }
78
79 void* ui_document_new(
size_t size) {
80 UcxMempool *mp = ucx_mempool_new(
256);
81 UiContext *ctx = ucx_mempool_calloc(mp,
1,
sizeof(UiContext));
82 ctx->attach_document = uic_context_attach_document;
83 ctx->detach_document2 = uic_context_detach_document2;
84 ctx->mempool = mp;
85 ctx->vars = ucx_map_new_a(mp->allocator,
16);
86
87 void *document = ucx_mempool_calloc(mp,
1, size);
88 ucx_map_put(documents, ucx_key(&document,
sizeof(
void*)), ctx);
89 return document;
90 }
91
92 void ui_document_destroy(
void *doc) {
93
94 }
95
96 UiContext* ui_document_context(
void *doc) {
97 if(doc) {
98 return ucx_map_get(documents, ucx_key(&doc,
sizeof(
void*)));
99 }
else {
100 return NULL;
101 }
102 }
103