| 53 scrollview.documentView = tableview; |
53 scrollview.documentView = tableview; |
| 54 |
54 |
| 55 UiLayout layout = UI_INIT_LAYOUT(args); |
55 UiLayout layout = UI_INIT_LAYOUT(args); |
| 56 ui_container_add(obj, scrollview, &layout, TRUE); |
56 ui_container_add(obj, scrollview, &layout, TRUE); |
| 57 |
57 |
| |
58 ListDelegate *delegate = [[ListDelegate alloc] init:tableview obj:obj]; |
| |
59 delegate.onactivate = args->onactivate; |
| |
60 delegate.onactivatedata = args->onactivatedata; |
| |
61 delegate.onselection = args->onselection; |
| |
62 delegate.onselectiondata = args->onselectiondata; |
| |
63 tableview.delegate = delegate; |
| |
64 objc_setAssociatedObject(tableview, "ui_listdelegate", delegate, OBJC_ASSOCIATION_RETAIN); |
| |
65 tableview.doubleAction = @selector(activateEvent:); |
| |
66 tableview.target = delegate; |
| |
67 |
| 58 UiVar *var = uic_widget_var(obj->ctx, obj->ctx, args->list, args->varname, UI_VAR_LIST); |
68 UiVar *var = uic_widget_var(obj->ctx, obj->ctx, args->list, args->varname, UI_VAR_LIST); |
| 59 if(var) { |
69 if(var) { |
| |
70 UiList *list = var->value; |
| |
71 list->obj = (__bridge void*)tableview; |
| |
72 list->update = ui_tableview_update; |
| |
73 list->getselection = ui_tableview_getselection; |
| |
74 list->setselection = ui_tableview_setselection; |
| |
75 |
| 60 ui_getvaluefunc2 getvalue = args->getvalue2; |
76 ui_getvaluefunc2 getvalue = args->getvalue2; |
| 61 void *getvaluedata = args->getvalue2data; |
77 void *getvaluedata = args->getvalue2data; |
| 62 if(!getvalue) { |
78 if(!getvalue) { |
| 63 if(args->getvalue) { |
79 if(args->getvalue) { |
| 64 getvalue = getvalue_wrapper; |
80 getvalue = getvalue_wrapper; |
| 77 tableview.dataSource = dataSource; |
93 tableview.dataSource = dataSource; |
| 78 [tableview reloadData]; |
94 [tableview reloadData]; |
| 79 |
95 |
| 80 objc_setAssociatedObject(tableview, "ui_datasource", dataSource, OBJC_ASSOCIATION_RETAIN); |
96 objc_setAssociatedObject(tableview, "ui_datasource", dataSource, OBJC_ASSOCIATION_RETAIN); |
| 81 } |
97 } |
| 82 |
98 |
| 83 ListDelegate *delegate = [[ListDelegate alloc] init:tableview obj:obj]; |
|
| 84 delegate.onactivate = args->onactivate; |
|
| 85 delegate.onactivatedata = args->onactivatedata; |
|
| 86 delegate.onselection = args->onselection; |
|
| 87 delegate.onselectiondata = args->onselectiondata; |
|
| 88 tableview.delegate = delegate; |
|
| 89 objc_setAssociatedObject(tableview, "ui_listdelegate", delegate, OBJC_ASSOCIATION_RETAIN); |
|
| 90 tableview.doubleAction = @selector(activateEvent:); |
|
| 91 tableview.target = delegate; |
|
| 92 |
|
| 93 return (__bridge void*)scrollview; |
99 return (__bridge void*)scrollview; |
| 94 } |
100 } |
| |
101 |
| |
102 void ui_tableview_update(UiList *list, int i) { |
| |
103 NSTableView *tableview = (__bridge NSTableView*)list->obj; |
| |
104 if(i < 0) { |
| |
105 [tableview reloadData]; |
| |
106 } else { |
| |
107 [tableview reloadData]; // TODO: optimize |
| |
108 } |
| |
109 } |
| |
110 |
| |
111 UiListSelection ui_tableview_getselection(UiList *list) { |
| |
112 NSTableView *tableview = (__bridge NSTableView*)list->obj; |
| |
113 return ui_tableview_selection(tableview); |
| |
114 } |
| |
115 |
| |
116 void ui_tableview_setselection(UiList *list, UiListSelection selection) { |
| |
117 NSTableView *tableview = (__bridge NSTableView*)list->obj; |
| |
118 NSMutableIndexSet *indexSet = [NSMutableIndexSet indexSet]; |
| |
119 for(int i=0;i<selection.count;i++) { |
| |
120 [indexSet addIndex:selection.rows[i]]; |
| |
121 } |
| |
122 [tableview selectRowIndexes:indexSet byExtendingSelection:NO]; |
| |
123 } |