ui/cocoa/list.m

changeset 830
13896bdaa151
parent 829
0980245646b4
child 831
32a4415dc69a
--- a/ui/cocoa/list.m	Fri Oct 10 15:30:56 2025 +0200
+++ b/ui/cocoa/list.m	Fri Oct 10 15:54:01 2025 +0200
@@ -438,7 +438,7 @@
     ui_container_add(obj, scrollview, &layout);
     
     // datasource and delegate
-    UiSourceList *data = [[UiSourceList alloc] init:obj];
+    UiSourceList *data = [[UiSourceList alloc] init:obj outline:outline];
     data.sublists = copy_sublists(obj->ctx->allocator, args);
     UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->dynamic_sublist, args->varname, UI_VAR_LIST);
     if(var) {
@@ -471,8 +471,9 @@
 
 @implementation UiSourceList
 
-- (id)init:(UiObject*)obj {
+- (id)init:(UiObject*)obj outline:(NSOutlineView*)view {
     _obj = obj;
+    _outlineView = view;
     _sections = [[NSMutableArray alloc] initWithCapacity:16];
     return self;
 }
@@ -487,11 +488,16 @@
     [_sections removeAllObjects];
     
     CxIterator i = cxListIterator(_sublists);
+    int index = 0;
     cx_foreach(UiSubList *, sl, i) {
         UiSourceListItem *section = [[UiSourceListItem alloc] init:self sublist:sl];
+        section.index = index;
         [section update:-1];
         [_sections addObject:section];
+        index++;
     }
+    
+    [_outlineView reloadData];
 }
 
 // NSOutlineViewDataSource implementation
@@ -529,7 +535,8 @@
 - (void)outlineView:(NSOutlineView *)outlineView
      setObjectValue:(id)object
      forTableColumn:(NSTableColumn *)tableColumn
-             byItem:(id)item {
+             byItem:(id)item
+{
     
 }
 
@@ -537,7 +544,8 @@
 
 - (NSView *)outlineView:(NSOutlineView *)outlineView
      viewForTableColumn:(NSTableColumn *)tableColumn
-                   item:(id)item {
+                   item:(id)item
+{
     UiSourceListItem *i = item;
     
     NSTableCellView *cell = [[NSTableCellView alloc] init];
@@ -545,8 +553,8 @@
     // Icon
     NSImageView *iconView = [[NSImageView alloc] initWithFrame:NSZeroRect];
     iconView.translatesAutoresizingMaskIntoConstraints = NO;
-    //[cell addSubview:iconView];
-    //cell.imageView = iconView;
+    [cell addSubview:iconView];
+    cell.imageView = iconView;
 
     // Label
     NSTextField *textField = [NSTextField labelWithString:@""];
@@ -556,10 +564,8 @@
 
     // Layout constraints
     [NSLayoutConstraint activateConstraints:@[
-        //[iconView.leadingAnchor constraintEqualToAnchor:cell.leadingAnchor constant:0],
-        //[iconView.centerYAnchor constraintEqualToAnchor:cell.centerYAnchor],
-        //[iconView.widthAnchor constraintEqualToConstant:0],
-        //[iconView.heightAnchor constraintEqualToConstant:0],
+        [iconView.leadingAnchor constraintEqualToAnchor:cell.leadingAnchor constant:0],
+        [iconView.centerYAnchor constraintEqualToAnchor:cell.centerYAnchor],
 
         [textField.leadingAnchor constraintEqualToAnchor:cell.leadingAnchor constant:0],
         [textField.centerYAnchor constraintEqualToAnchor:cell.centerYAnchor],
@@ -577,6 +583,44 @@
     return row;
 }
 
+- (BOOL) outlineView:(NSOutlineView *) outlineView
+    shouldSelectItem:(id)item
+{
+    UiSourceListItem *i = item;
+    return [i isSection] ? NO : YES;
+}
+
+- (void) outlineViewSelectionDidChange:(NSNotification *) notification {
+    UiEvent event;
+    event.obj = _obj;
+    event.window = event.obj->window;
+    event.document = event.obj->ctx->document;
+    event.eventdata = NULL; // TODO
+    event.eventdatatype = 0; // TODO
+    event.intval = 0;
+    event.set = ui_get_setop();
+    
+    UiSubListEventData sublistEvent;
+    
+    NSInteger selectedRow = _outlineView.selectedRow;
+    if(selectedRow >= 0) {
+        UiSourceListItem *item = [_outlineView itemAtRow:selectedRow];
+        UiSourceListItem *parent = item.parent;
+        UiVar *var = parent != nil ? parent.var : item.var;
+        if(item && var) {
+            sublistEvent.list = var->value;
+            sublistEvent.sublist_index = parent.index;
+            // TODO
+            
+            event.eventdata = &sublistEvent;
+        }
+    }
+    
+    if(_onactivate) {
+        _onactivate(&event, _onactivatedata);
+    }
+}
+
 @end
 
 @implementation UiSourceListItem
@@ -597,7 +641,8 @@
     return self;
 }
 
-- (id)init:(UiSubListItem*)item {
+- (id)init:(UiSubListItem*)item parent:(UiSourceListItem*)parent {
+    _parent = parent;
     if(item->label) {
         _label = [[NSString alloc]initWithUTF8String:item->label];
     }
@@ -624,7 +669,7 @@
             item.label = strdup(elm);
         }
         
-        [_items addObject:[[UiSourceListItem alloc] init:&item]];
+        [_items addObject:[[UiSourceListItem alloc] init:&item parent:self]];
         
         elm = list->next(list);
         index++;

mercurial