| 36 #include "../ui/tree.h" |
36 #include "../ui/tree.h" |
| 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 |
42 |
| 42 |
43 |
| 43 UiObserver* ui_observer_new(ui_callback f, void *data) { |
44 UiObserver* ui_observer_new(ui_callback f, void *data) { |
| 44 UiObserver *observer = malloc(sizeof(UiObserver)); |
45 UiObserver *observer = malloc(sizeof(UiObserver)); |
| 45 observer->callback = f; |
46 observer->callback = f; |
| 93 } |
94 } |
| 94 } |
95 } |
| 95 |
96 |
| 96 /* --------------------------- UiList --------------------------- */ |
97 /* --------------------------- UiList --------------------------- */ |
| 97 |
98 |
| 98 UiList* ui_list_new(UiContext *ctx, char *name) { |
99 void uic_ucx_list_init(UiContext *ctx, UiList *list) { |
| 99 UiList *list = malloc(sizeof(UiList)); |
100 list->data = cxArrayListCreate(ctx->mp->allocator, NULL, CX_STORE_POINTERS, 32); |
| 100 list->first = ui_list_first; |
101 list->first = ui_list_first; |
| 101 list->next = ui_list_next; |
102 list->next = ui_list_next; |
| 102 list->get = ui_list_get; |
103 list->get = ui_list_get; |
| 103 list->count = ui_list_count; |
104 list->count = ui_list_count; |
| 104 list->observers = NULL; |
105 } |
| 105 |
106 |
| 106 list->data = cxArrayListCreate(cxDefaultAllocator, NULL, CX_STORE_POINTERS, 32); |
107 UiList* ui_list_new(UiContext *ctx, const char *name) { |
| 107 list->iter = NULL; |
108 return ui_list_new2(ctx, name, default_list_init ? default_list_init : uic_ucx_list_init); |
| 108 |
109 } |
| 109 list->update = NULL; |
110 |
| 110 list->getselection = NULL; |
111 UiList* ui_list_new2(UiContext *ctx, const char *name, ui_list_init_func listinit) { |
| 111 list->obj = NULL; |
112 UiList *list = cxMalloc(ctx->mp->allocator, sizeof(UiList)); |
| |
113 memset(list, 0, sizeof(UiList)); |
| |
114 listinit(ctx, list); |
| 112 |
115 |
| 113 if(name) { |
116 if(name) { |
| 114 uic_reg_var(ctx, name, UI_VAR_LIST, list); |
117 uic_reg_var(ctx, name, UI_VAR_LIST, list); |
| 115 } |
118 } |
| 116 |
119 |
| 659 } |
662 } |
| 660 |
663 |
| 661 int ui_get_setop(void) { |
664 int ui_get_setop(void) { |
| 662 return ui_set_op; |
665 return ui_set_op; |
| 663 } |
666 } |
| |
667 |
| |
668 /* ---------------- List initializers and wrapper functions ---------------- */ |
| |
669 |
| |
670 void ui_global_list_initializer(ui_list_init_func func) { |
| |
671 default_list_init = func; |
| |
672 } |
| |
673 |
| |
674 void ui_list_class_set_first(UiList *list, void*(*first)(UiList *list)) { |
| |
675 list->first = first; |
| |
676 } |
| |
677 |
| |
678 void ui_list_class_set_next(UiList *list, void*(*next)(UiList *list)) { |
| |
679 list->next = next; |
| |
680 } |
| |
681 |
| |
682 void ui_list_class_set_get(UiList *list, void*(*get)(UiList *list, int i)) { |
| |
683 list->get = get; |
| |
684 } |
| |
685 |
| |
686 void ui_list_class_set_count(UiList *list, int(*count)(UiList *list)) { |
| |
687 list->count = count; |
| |
688 } |
| |
689 |
| |
690 void ui_list_class_set_data(UiList *list, void *data) { |
| |
691 list->data = data; |
| |
692 } |
| |
693 |
| |
694 void ui_list_class_set_iter(UiList *list, void *iter) { |
| |
695 list->iter = iter; |
| |
696 } |