ui/common/types.c

changeset 631
5d745e140ee7
parent 629
0385a450c2a6
child 659
d6baaa93f7be
equal deleted inserted replaced
630:998a4c096b4b 631:5d745e140ee7
37 #include "types.h" 37 #include "types.h"
38 #include "context.h" 38 #include "context.h"
39 #include "../ui/image.h" 39 #include "../ui/image.h"
40 40
41 static ui_list_init_func default_list_init; 41 static ui_list_init_func default_list_init;
42 42 static void *default_list_init_userdata;
43 43
44 UiObserver* ui_observer_new(ui_callback f, void *data) { 44 UiObserver* ui_observer_new(ui_callback f, void *data) {
45 UiObserver *observer = malloc(sizeof(UiObserver)); 45 UiObserver *observer = malloc(sizeof(UiObserver));
46 observer->callback = f; 46 observer->callback = f;
47 observer->data = data; 47 observer->data = data;
94 } 94 }
95 } 95 }
96 96
97 /* --------------------------- UiList --------------------------- */ 97 /* --------------------------- UiList --------------------------- */
98 98
99 void uic_ucx_list_init(UiContext *ctx, UiList *list) { 99 void uic_ucx_list_init(UiContext *ctx, UiList *list, void *unused) {
100 list->data = cxArrayListCreate(ctx->mp->allocator, NULL, CX_STORE_POINTERS, 32); 100 list->data = cxArrayListCreate(ctx->mp->allocator, NULL, CX_STORE_POINTERS, 32);
101 list->first = ui_list_first; 101 list->first = ui_list_first;
102 list->next = ui_list_next; 102 list->next = ui_list_next;
103 list->get = ui_list_get; 103 list->get = ui_list_get;
104 list->count = ui_list_count; 104 list->count = ui_list_count;
105 } 105 }
106 106
107 UiList* ui_list_new(UiContext *ctx, const char *name) { 107 UiList* ui_list_new(UiContext *ctx, const char *name) {
108 return ui_list_new2(ctx, name, default_list_init ? default_list_init : uic_ucx_list_init); 108 return ui_list_new2(ctx, name, default_list_init ? default_list_init : uic_ucx_list_init, default_list_init_userdata);
109 } 109 }
110 110
111 UiList* ui_list_new2(UiContext *ctx, const char *name, ui_list_init_func listinit) { 111 UiList* ui_list_new2(UiContext *ctx, const char *name, ui_list_init_func listinit, void *userdata) {
112 UiList *list = cxMalloc(ctx->mp->allocator, sizeof(UiList)); 112 UiList *list = cxMalloc(ctx->mp->allocator, sizeof(UiList));
113 memset(list, 0, sizeof(UiList)); 113 memset(list, 0, sizeof(UiList));
114 listinit(ctx, list); 114 listinit(ctx, list, userdata);
115 115
116 if(name) { 116 if(name) {
117 uic_reg_var(ctx, name, UI_VAR_LIST, list); 117 uic_reg_var(ctx, name, UI_VAR_LIST, list);
118 } 118 }
119 119
665 return ui_set_op; 665 return ui_set_op;
666 } 666 }
667 667
668 /* ---------------- List initializers and wrapper functions ---------------- */ 668 /* ---------------- List initializers and wrapper functions ---------------- */
669 669
670 void ui_global_list_initializer(ui_list_init_func func) { 670 void ui_global_list_initializer(ui_list_init_func func, void *userdata) {
671 default_list_init = func; 671 default_list_init = func;
672 default_list_init_userdata = userdata;
672 } 673 }
673 674
674 void ui_list_class_set_first(UiList *list, void*(*first)(UiList *list)) { 675 void ui_list_class_set_first(UiList *list, void*(*first)(UiList *list)) {
675 list->first = first; 676 list->first = first;
676 } 677 }

mercurial