ui/common/types.c

changeset 39
4e66271541e8
parent 16
a499c8a72c15
child 116
480354705c2f
equal deleted inserted replaced
38:8ccdde37275b 39:4e66271541e8
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 }

mercurial