ui/cocoa/list.m

changeset 714
3905f542e150
parent 713
f279d3cf2bf5
child 715
2082c80fb010
--- 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];
+}

mercurial