ui/cocoa/menu.m

changeset 570
a2df724b4cb9
parent 569
5c06bb9ea458
child 708
0598e70c6489
equal deleted inserted replaced
569:5c06bb9ea458 570:a2df724b4cb9
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 }
99 140
100 } 141 }
101 142
102 143
103 void ui_menu_init(void) { 144 void ui_menu_init(void) {
145 bindingItems = [[NSMutableArray alloc] init];
146
104 UiMenu *menus_begin = uic_get_menu_list(); 147 UiMenu *menus_begin = uic_get_menu_list();
105 UiMenu *ls = menus_begin; 148 UiMenu *ls = menus_begin;
106 int index = 1; 149 int index = 1;
107 while(ls) { 150 while(ls) {
108 if(ls->item.type == UI_MENU) { 151 if(ls->item.type == UI_MENU) {
115 } 158 }
116 ls = (UiMenu*)ls->item.next; 159 ls = (UiMenu*)ls->item.next;
117 index++; 160 index++;
118 } 161 }
119 } 162 }
163
164 NSArray* ui_get_binding_items(void) {
165 return bindingItems;
166 }

mercurial