implement static_elements arg for the listview (Cocoa) default tip

Sat, 13 Dec 2025 16:26:27 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sat, 13 Dec 2025 16:26:27 +0100
changeset 1003
b58ad5b65c1b
parent 1002
2cfd243dc8b0

implement static_elements arg for the listview (Cocoa)

ui/cocoa/ListDataSource.h file | annotate | diff | comparison | revisions
ui/cocoa/ListDataSource.m file | annotate | diff | comparison | revisions
ui/cocoa/list.m file | annotate | diff | comparison | revisions
--- a/ui/cocoa/ListDataSource.h	Sat Dec 13 16:07:34 2025 +0100
+++ b/ui/cocoa/ListDataSource.h	Sat Dec 13 16:26:27 2025 +0100
@@ -40,3 +40,11 @@
 - (id) init:(NSArray<NSTableColumn*>*) columns var:(UiVar*)var getvalue:(ui_getvaluefunc2) getvaluefunc getvaluedata:(void*)userdata;
 
 @end
+
+@interface ArrayDataSource : NSObject <NSTableViewDataSource>
+
+@property NSMutableArray<NSString*> *data;
+
+- (id)init:(char**)elements size:(size_t)nelm;
+
+@end
--- a/ui/cocoa/ListDataSource.m	Sat Dec 13 16:07:34 2025 +0100
+++ b/ui/cocoa/ListDataSource.m	Sat Dec 13 16:26:27 2025 +0100
@@ -114,3 +114,27 @@
 }
 
 @end
+
+@implementation ArrayDataSource
+
+- (id)init:(char**)elements size:(size_t)nelm {
+    _data = [[NSMutableArray alloc]init];
+    for(int i=0;i<nelm;i++) {
+        NSString *s = [[NSString alloc]initWithUTF8String:elements[i]];
+        _data[i] = s;
+    }
+    return self;
+}
+
+- (NSInteger) numberOfRowsInTableView:(NSTableView *) tableView {
+    return _data.count;
+}
+
+- (id) tableView:(NSTableView *) tableView
+objectValueForTableColumn:(NSTableColumn *) tableColumn
+             row:(NSInteger) row
+{
+    return _data[row];
+}
+
+@end
--- a/ui/cocoa/list.m	Sat Dec 13 16:07:34 2025 +0100
+++ b/ui/cocoa/list.m	Sat Dec 13 16:26:27 2025 +0100
@@ -87,6 +87,8 @@
     
     add_listdelegate(obj, tableview, args);
     
+    char **static_elements = args->static_elements;
+    size_t static_nelm = args->static_nelm;
     UiVar *var = uic_widget_var(obj->ctx, obj->ctx, args->list, args->varname, UI_VAR_LIST);
     if(var) {
         UiList *list = var->value;
@@ -112,6 +114,15 @@
         [tableview reloadData];
         
         objc_setAssociatedObject(tableview, "ui_datasource", dataSource, OBJC_ASSOCIATION_RETAIN);
+    } else if(static_elements && static_nelm) {
+        NSTableColumn *column = [[NSTableColumn alloc] initWithIdentifier:@"column"];
+        [tableview addTableColumn:column];
+        
+        ArrayDataSource *dataSource = [[ArrayDataSource alloc]init:static_elements size:static_nelm];
+        tableview.dataSource = dataSource;
+        [tableview reloadData];
+        
+        objc_setAssociatedObject(tableview, "ui_datasource", dataSource, OBJC_ASSOCIATION_RETAIN);
     }
 
     return (__bridge void*)scrollview;

mercurial