implement actions for list/table events (Cocoa)

Wed, 03 Jun 2026 19:58:39 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Wed, 03 Jun 2026 19:58:39 +0200
changeset 1163
a32411b88442
parent 1162
3a2bf1795579
child 1164
3c037b84e6eb

implement actions for list/table events (Cocoa)

ui/cocoa/ListDelegate.h file | annotate | diff | comparison | revisions
ui/cocoa/ListDelegate.m file | annotate | diff | comparison | revisions
ui/cocoa/container.m file | annotate | diff | comparison | revisions
ui/cocoa/list.m file | annotate | diff | comparison | revisions
--- a/ui/cocoa/ListDelegate.h	Wed Jun 03 19:07:24 2026 +0200
+++ b/ui/cocoa/ListDelegate.h	Wed Jun 03 19:58:39 2026 +0200
@@ -34,8 +34,10 @@
 @property UiObject    *obj;
 @property ui_callback onselection;
 @property void        *onselectiondata;
+@property NSString    *onselection_action;
 @property ui_callback onactivate;
 @property void        *onactivatedata;
+@property NSString    *onactivate_action;
 
 - (id)init:(NSTableView*) tableview obj:(UiObject*)obj;
 
--- a/ui/cocoa/ListDelegate.m	Wed Jun 03 19:07:24 2026 +0200
+++ b/ui/cocoa/ListDelegate.m	Wed Jun 03 19:58:39 2026 +0200
@@ -38,31 +38,36 @@
 
 - (void)activateEvent:(id)sender {
     NSTableView *table = sender;
+    
+    int row = (int)table.clickedRow;
+    
+    UiListSelection sel;
+    sel.count = 1;
+    sel.rows = &row;
+    
+    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 = row;
+    event.set = ui_get_setop();
+    
     if(_onactivate) {
-        int row = (int)table.clickedRow;
-        
-        UiListSelection sel;
-        sel.count = 1;
-        sel.rows = &row;
-        
-        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 = row;
-        event.set = ui_get_setop();
-        
         _onactivate(&event, _onactivatedata);
     }
+    
+    if(_onselection_action) {
+        uic_action_callback(&event, _onselection_action.UTF8String);
+    }
 }
 
 - (void) tableViewSelectionDidChange:(NSNotification *) notification {
-    if(_onselection && ui_selection_events_is_enabled()) {
+    if(ui_selection_events_is_enabled()) {
         UiListSelection sel = ui_tableview_selection(_tableview);
         
-        UiEvent  event;
+        UiEvent event;
         event.obj = _obj;
         event.window = event.obj->window;
         event.document = event.obj->ctx->document;
@@ -70,7 +75,14 @@
         event.eventdatatype = UI_EVENT_DATA_LIST_SELECTION;
         event.intval = 0;
         event.set = ui_get_setop();
-        _onselection(&event, _onselectiondata);
+        
+        if(_onselection) {
+            _onselection(&event, _onselectiondata);
+        }
+        
+        if(_onselection_action) {
+            uic_action_callback(&event, _onselection_action.UTF8String);
+        }
     }
 }
 
--- a/ui/cocoa/container.m	Wed Jun 03 19:07:24 2026 +0200
+++ b/ui/cocoa/container.m	Wed Jun 03 19:58:39 2026 +0200
@@ -143,6 +143,16 @@
     return (__bridge void*)scrollview;
 }
 
+static int64_t tabview_get(UiInteger *i) {
+    NSView<TabView, Container> *tabview = (__bridge id)i->obj;
+    return 0;
+}
+
+static void tabview_set(UiInteger *i, int64_t value) {
+    NSView<TabView, Container> *tabview = (__bridge id)i->obj;
+    
+}
+
 UIWIDGET ui_tabview_create(UiObject *obj, UiTabViewArgs *args) {
     NSView<TabView, Container> *tabview;
     switch(args->tabview) {
--- a/ui/cocoa/list.m	Wed Jun 03 19:07:24 2026 +0200
+++ b/ui/cocoa/list.m	Wed Jun 03 19:58:39 2026 +0200
@@ -54,8 +54,14 @@
     ListDelegate *delegate = [[ListDelegate alloc] init:tableview obj:obj];
     delegate.onactivate = args->onactivate;
     delegate.onactivatedata = args->onactivatedata;
+    if(args->onactivate_action) {
+        delegate.onactivate_action = [[NSString alloc]initWithUTF8String:args->onactivate_action];
+    }
     delegate.onselection = args->onselection;
     delegate.onselectiondata = args->onselectiondata;
+    if(args->onselection_action) {
+        delegate.onselection_action = [[NSString alloc]initWithUTF8String:args->onselection_action];
+    }
     tableview.delegate = delegate;
     objc_setAssociatedObject(tableview, "ui_listdelegate", delegate, OBJC_ASSOCIATION_RETAIN);
     tableview.doubleAction = @selector(activateEvent:);

mercurial