ui/common/types.c

changeset 629
0385a450c2a6
parent 622
9090faa4094b
child 631
5d745e140ee7
equal deleted inserted replaced
627:3f0c9fe60c68 629:0385a450c2a6
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 }

mercurial