| 33 #import <objc/runtime.h> |
33 #import <objc/runtime.h> |
| 34 |
34 |
| 35 #import "menu.h" |
35 #import "menu.h" |
| 36 #import "window.h" |
36 #import "window.h" |
| 37 #import "EventData.h" |
37 #import "EventData.h" |
| |
38 |
| |
39 #pragma GCC diagnostic ignored "-Wundeclared-selector" |
| |
40 #pragma clang diagnostic ignored "-Wundeclared-selector" |
| |
41 |
| |
42 // holds all items that need bindings |
| |
43 // value type: MenuItem* |
| |
44 static NSMutableArray *bindingItems; |
| |
45 |
| |
46 @implementation MenuItem |
| |
47 |
| |
48 - (MenuItem*)init:(int)itId { |
| |
49 self.itemId = [[NSString alloc] initWithFormat:@"item%d", itId]; |
| |
50 return self; |
| |
51 } |
| |
52 |
| |
53 @end |
| 38 |
54 |
| 39 static ui_menu_add_f createMenuItem[] = { |
55 static ui_menu_add_f createMenuItem[] = { |
| 40 /* UI_MENU */ add_menu_widget, |
56 /* UI_MENU */ add_menu_widget, |
| 41 /* UI_MENU_ITEM */ add_menuitem_widget, |
57 /* UI_MENU_ITEM */ add_menuitem_widget, |
| 42 /* UI_MENU_CHECK_ITEM */ add_checkitem_widget, |
58 /* UI_MENU_CHECK_ITEM */ add_checkitem_widget, |
| 78 objc_setAssociatedObject(menuItem, "eventdata", event, OBJC_ASSOCIATION_RETAIN); |
94 objc_setAssociatedObject(menuItem, "eventdata", event, OBJC_ASSOCIATION_RETAIN); |
| 79 } |
95 } |
| 80 } |
96 } |
| 81 |
97 |
| 82 void add_menuseparator_widget(NSMenu *parent, int i, UiMenuItemI *item) { |
98 void add_menuseparator_widget(NSMenu *parent, int i, UiMenuItemI *item) { |
| 83 |
99 NSMenuItem *menuItem = [NSMenuItem separatorItem]; |
| |
100 [parent addItem:menuItem]; |
| 84 } |
101 } |
| 85 |
102 |
| |
103 static int nItem = 0; |
| |
104 |
| 86 void add_checkitem_widget(NSMenu *parent, int i, UiMenuItemI *item) { |
105 void add_checkitem_widget(NSMenu *parent, int i, UiMenuItemI *item) { |
| |
106 UiMenuCheckItem *it = (UiMenuCheckItem*)item; |
| 87 |
107 |
| |
108 NSString *str = [[NSString alloc] initWithUTF8String:it->label]; |
| |
109 NSMenuItem *menuItem = [parent addItemWithTitle:str action:@selector(menuCheckItemAction:) keyEquivalent:@""]; |
| |
110 |
| |
111 MenuItem *mItem = [[MenuItem alloc] init:nItem++]; |
| |
112 mItem.callback = it->callback; |
| |
113 mItem.userdata = it->userdata; |
| |
114 mItem.checkItem = it; |
| |
115 |
| |
116 objc_setAssociatedObject(menuItem, "menuitem", mItem, OBJC_ASSOCIATION_RETAIN); |
| |
117 [bindingItems addObject:mItem]; |
| 88 } |
118 } |
| 89 |
119 |
| 90 void add_radioitem_widget(NSMenu *parent, int index, UiMenuItemI *item) { |
120 void add_radioitem_widget(NSMenu *parent, int index, UiMenuItemI *item) { |
| |
121 UiMenuRadioItem *it = (UiMenuRadioItem*)item; |
| 91 |
122 |
| |
123 NSString *str = [[NSString alloc] initWithUTF8String:it->label]; |
| |
124 NSMenuItem *menuItem = [parent addItemWithTitle:str action:@selector(menuRadioItemAction:) keyEquivalent:@""]; |
| |
125 |
| |
126 MenuItem *mItem = [[MenuItem alloc] init:nItem++]; |
| |
127 mItem.callback = it->callback; |
| |
128 mItem.userdata = it->userdata; |
| |
129 mItem.radioItem = it; |
| |
130 |
| |
131 objc_setAssociatedObject(menuItem, "menuitem", mItem, OBJC_ASSOCIATION_RETAIN); |
| |
132 [bindingItems addObject:mItem]; |
| 92 } |
133 } |
| 93 |
134 |
| 94 void add_checkitemnv_widget(NSMenu *parent, int i, UiMenuItemI *item) { |
135 void add_checkitemnv_widget(NSMenu *parent, int i, UiMenuItemI *item) { |
| 95 |
136 |
| 96 } |
137 } |