ui/cocoa/menu.m

changeset 570
a2df724b4cb9
parent 569
5c06bb9ea458
child 708
0598e70c6489
--- a/ui/cocoa/menu.m	Thu Apr 17 11:18:57 2025 +0200
+++ b/ui/cocoa/menu.m	Thu Apr 17 17:51:07 2025 +0200
@@ -36,6 +36,22 @@
 #import "window.h"
 #import "EventData.h"
 
+#pragma GCC diagnostic ignored "-Wundeclared-selector"
+#pragma clang diagnostic ignored "-Wundeclared-selector"
+
+// holds all items that need bindings
+// value type: MenuItem*
+static NSMutableArray *bindingItems;
+
+@implementation MenuItem
+
+- (MenuItem*)init:(int)itId {
+    self.itemId = [[NSString alloc] initWithFormat:@"item%d", itId];
+    return self;
+}
+
+@end
+
 static ui_menu_add_f createMenuItem[] = {
     /* UI_MENU                 */ add_menu_widget,
     /* UI_MENU_ITEM            */ add_menuitem_widget,
@@ -80,15 +96,40 @@
 }
 
 void add_menuseparator_widget(NSMenu *parent, int i, UiMenuItemI *item) {
-    
+    NSMenuItem *menuItem = [NSMenuItem separatorItem];
+    [parent addItem:menuItem];
 }
 
+static int nItem = 0;
+
 void add_checkitem_widget(NSMenu *parent, int i, UiMenuItemI *item) {
+    UiMenuCheckItem *it = (UiMenuCheckItem*)item;
     
+    NSString *str = [[NSString alloc] initWithUTF8String:it->label];
+    NSMenuItem *menuItem = [parent addItemWithTitle:str action:@selector(menuCheckItemAction:) keyEquivalent:@""];
+    
+    MenuItem *mItem = [[MenuItem alloc] init:nItem++];
+    mItem.callback = it->callback;
+    mItem.userdata = it->userdata;
+    mItem.checkItem = it;
+    
+    objc_setAssociatedObject(menuItem, "menuitem", mItem, OBJC_ASSOCIATION_RETAIN);
+    [bindingItems addObject:mItem];
 }
 
 void add_radioitem_widget(NSMenu *parent, int index, UiMenuItemI *item) {
+    UiMenuRadioItem *it = (UiMenuRadioItem*)item;
     
+    NSString *str = [[NSString alloc] initWithUTF8String:it->label];
+    NSMenuItem *menuItem = [parent addItemWithTitle:str action:@selector(menuRadioItemAction:) keyEquivalent:@""];
+    
+    MenuItem *mItem = [[MenuItem alloc] init:nItem++];
+    mItem.callback = it->callback;
+    mItem.userdata = it->userdata;
+    mItem.radioItem = it;
+    
+    objc_setAssociatedObject(menuItem, "menuitem", mItem, OBJC_ASSOCIATION_RETAIN);
+    [bindingItems addObject:mItem];
 }
 
 void add_checkitemnv_widget(NSMenu *parent, int i, UiMenuItemI *item) {
@@ -101,6 +142,8 @@
 
 
 void ui_menu_init(void) {
+    bindingItems = [[NSMutableArray alloc] init];
+    
     UiMenu *menus_begin = uic_get_menu_list();
     UiMenu *ls = menus_begin;
     int index = 1;
@@ -117,3 +160,7 @@
         index++;
     }
 }
+
+NSArray* ui_get_binding_items(void) {
+    return bindingItems;
+}

mercurial