| 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 } |