--- a/ui/cocoa/list.m Sat Aug 23 18:34:09 2025 +0200 +++ b/ui/cocoa/list.m Sat Aug 23 18:41:20 2025 +0200 @@ -55,8 +55,24 @@ UiLayout layout = UI_INIT_LAYOUT(args); ui_container_add(obj, scrollview, &layout, TRUE); + ListDelegate *delegate = [[ListDelegate alloc] init:tableview obj:obj]; + delegate.onactivate = args->onactivate; + delegate.onactivatedata = args->onactivatedata; + delegate.onselection = args->onselection; + delegate.onselectiondata = args->onselectiondata; + tableview.delegate = delegate; + objc_setAssociatedObject(tableview, "ui_listdelegate", delegate, OBJC_ASSOCIATION_RETAIN); + tableview.doubleAction = @selector(activateEvent:); + tableview.target = delegate; + UiVar *var = uic_widget_var(obj->ctx, obj->ctx, args->list, args->varname, UI_VAR_LIST); if(var) { + UiList *list = var->value; + list->obj = (__bridge void*)tableview; + list->update = ui_tableview_update; + list->getselection = ui_tableview_getselection; + list->setselection = ui_tableview_setselection; + ui_getvaluefunc2 getvalue = args->getvalue2; void *getvaluedata = args->getvalue2data; if(!getvalue) { @@ -79,16 +95,29 @@ objc_setAssociatedObject(tableview, "ui_datasource", dataSource, OBJC_ASSOCIATION_RETAIN); } - - ListDelegate *delegate = [[ListDelegate alloc] init:tableview obj:obj]; - delegate.onactivate = args->onactivate; - delegate.onactivatedata = args->onactivatedata; - delegate.onselection = args->onselection; - delegate.onselectiondata = args->onselectiondata; - tableview.delegate = delegate; - objc_setAssociatedObject(tableview, "ui_listdelegate", delegate, OBJC_ASSOCIATION_RETAIN); - tableview.doubleAction = @selector(activateEvent:); - tableview.target = delegate; - + return (__bridge void*)scrollview; } + +void ui_tableview_update(UiList *list, int i) { + NSTableView *tableview = (__bridge NSTableView*)list->obj; + if(i < 0) { + [tableview reloadData]; + } else { + [tableview reloadData]; // TODO: optimize + } +} + +UiListSelection ui_tableview_getselection(UiList *list) { + NSTableView *tableview = (__bridge NSTableView*)list->obj; + return ui_tableview_selection(tableview); +} + +void ui_tableview_setselection(UiList *list, UiListSelection selection) { + NSTableView *tableview = (__bridge NSTableView*)list->obj; + NSMutableIndexSet *indexSet = [NSMutableIndexSet indexSet]; + for(int i=0;i<selection.count;i++) { + [indexSet addIndex:selection.rows[i]]; + } + [tableview selectRowIndexes:indexSet byExtendingSelection:NO]; +}