# HG changeset patch # User Olaf Wintermann # Date 1755967280 -7200 # Node ID 3905f542e15021bfbc40e6bbb19a6d3b5c7dab00 # Parent f279d3cf2bf5d99c2feebf30e29857b7c878ba48 implement listview list bindings (Cocoa) diff -r f279d3cf2bf5 -r 3905f542e150 ui/cocoa/list.h --- a/ui/cocoa/list.h Sat Aug 23 18:34:09 2025 +0200 +++ b/ui/cocoa/list.h Sat Aug 23 18:41:20 2025 +0200 @@ -31,3 +31,7 @@ #import "../ui/tree.h" #import "ListDataSource.h" + +void ui_tableview_update(UiList *list, int i); +UiListSelection ui_tableview_getselection(UiList *list); +void ui_tableview_setselection(UiList *list, UiListSelection selection); diff -r f279d3cf2bf5 -r 3905f542e150 ui/cocoa/list.m --- 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