26 * POSSIBILITY OF SUCH DAMAGE. |
26 * POSSIBILITY OF SUCH DAMAGE. |
27 */ |
27 */ |
28 |
28 |
29 #include <stdio.h> |
29 #include <stdio.h> |
30 #include <stdlib.h> |
30 #include <stdlib.h> |
|
31 #include <stdarg.h> |
31 |
32 |
32 #include "../../ucx/list.h" |
33 #include "../../ucx/list.h" |
|
34 #include "../ui/tree.h" |
33 #include "types.h" |
35 #include "types.h" |
|
36 #include "context.h" |
34 |
37 |
35 UiObserver* ui_observer_new(ui_callback f, void *data) { |
38 UiObserver* ui_observer_new(ui_callback f, void *data) { |
36 UiObserver *observer = malloc(sizeof(UiObserver)); |
39 UiObserver *observer = malloc(sizeof(UiObserver)); |
37 observer->callback = f; |
40 observer->callback = f; |
38 observer->data = data; |
41 observer->data = data; |
144 } |
147 } |
145 |
148 |
146 void ui_list_notify(UiList *list) { |
149 void ui_list_notify(UiList *list) { |
147 ui_notify(list->observers, list); |
150 ui_notify(list->observers, list); |
148 } |
151 } |
|
152 |
|
153 |
|
154 typedef struct { |
|
155 int type; |
|
156 char *name; |
|
157 } UiColumn; |
|
158 |
|
159 UiModelInfo* ui_model_info(UiContext *ctx, ...) { |
|
160 UiModelInfo *info = ui_calloc(ctx, 1, sizeof(UiModelInfo)); |
|
161 |
|
162 va_list ap; |
|
163 va_start(ap, ctx); |
|
164 |
|
165 UcxList *cols = NULL; |
|
166 int type; |
|
167 while((type = va_arg(ap, int)) != -1) { |
|
168 char *name = va_arg(ap, char*); |
|
169 |
|
170 UiColumn *column = malloc(sizeof(UiColumn)); |
|
171 column->type = type; |
|
172 column->name = name; |
|
173 |
|
174 cols = ucx_list_append(cols, column); |
|
175 } |
|
176 |
|
177 va_end(ap); |
|
178 |
|
179 size_t len = ucx_list_size(cols); |
|
180 info->columns = len; |
|
181 info->types = ui_calloc(ctx, len, sizeof(UiModelType)); |
|
182 info->titles = ui_calloc(ctx, len, sizeof(char*)); |
|
183 |
|
184 int i = 0; |
|
185 UCX_FOREACH(elm, cols) { |
|
186 UiColumn *c = elm->data; |
|
187 info->types[i] = c->type; |
|
188 info->titles[i] = c->name; |
|
189 free(c); |
|
190 i++; |
|
191 } |
|
192 ucx_list_free(cols); |
|
193 |
|
194 return info; |
|
195 } |
|
196 |
|
197 void ui_model_info_free(UiContext *ctx, UiModelInfo *mi) { |
|
198 ucx_mempool_free(ctx->mempool, mi->types); |
|
199 ucx_mempool_free(ctx->mempool, mi->titles); |
|
200 ucx_mempool_free(ctx->mempool, mi); |
|
201 } |