Sat, 23 Aug 2025 18:31:55 +0200
implement listview onselection event (Cocoa)
--- a/ui/cocoa/ListDelegate.h Sat Aug 23 17:45:15 2025 +0200 +++ b/ui/cocoa/ListDelegate.h Sat Aug 23 18:31:55 2025 +0200 @@ -30,14 +30,17 @@ @interface ListDelegate : NSObject <NSTableViewDelegate> +@property (weak) NSTableView *tableview; @property UiObject *obj; @property ui_callback onselection; @property void *onselectiondata; @property ui_callback onactivate; @property void *onactivatedata; -- (id)init:(UiObject*)obj; +- (id)init:(NSTableView*) tableview obj:(UiObject*)obj; - (void)activateEvent:(id)sender; @end + +UiListSelection ui_tableview_selection(NSTableView *tableview);
--- a/ui/cocoa/ListDelegate.m Sat Aug 23 17:45:15 2025 +0200 +++ b/ui/cocoa/ListDelegate.m Sat Aug 23 18:31:55 2025 +0200 @@ -30,7 +30,8 @@ @implementation ListDelegate -- (id)init:(UiObject*)obj { +- (id)init:(NSTableView*) tableview obj:(UiObject*)obj { + _tableview = tableview; _obj = obj; return self; } @@ -57,4 +58,42 @@ } } +- (void) tableViewSelectionDidChange:(NSNotification *) notification { + if(_onselection) { + UiListSelection sel = ui_tableview_selection(_tableview); + + UiEvent event; + event.obj = _obj; + event.window = event.obj->window; + event.document = event.obj->ctx->document; + event.eventdata = &sel; + event.eventdatatype = UI_EVENT_DATA_LIST_SELECTION; + event.intval = 0; + event.set = ui_get_setop(); + + _onselection(&event, _onselectiondata); + } +} + @end + +UiListSelection ui_tableview_selection(NSTableView *tableview) { + NSIndexSet *indexSet = tableview.selectedRowIndexes; + NSUInteger count = [indexSet count]; + + if(count == 0) { + return (UiListSelection){0, NULL}; + } + + int *rows = calloc(count, sizeof(int)); + + __block NSUInteger i = 0; + [indexSet enumerateIndexesUsingBlock:^(NSUInteger index, BOOL *stop) { + rows[i++] = (int)index; + }]; + + UiListSelection sel; + sel.count = (int)count; + sel.rows = rows; + return sel; +}
--- a/ui/cocoa/list.m Sat Aug 23 17:45:15 2025 +0200 +++ b/ui/cocoa/list.m Sat Aug 23 18:31:55 2025 +0200 @@ -76,7 +76,7 @@ objc_setAssociatedObject(tableview, "ui_datasource", dataSource, OBJC_ASSOCIATION_RETAIN); } - ListDelegate *delegate = [[ListDelegate alloc] init:obj]; + ListDelegate *delegate = [[ListDelegate alloc] init:tableview obj:obj]; delegate.onactivate = args->onactivate; delegate.onactivatedata = args->onactivatedata; delegate.onselection = args->onselection;