| 28 |
28 |
| 29 #import <stdio.h> |
29 #import <stdio.h> |
| 30 #import <stdlib.h> |
30 #import <stdlib.h> |
| 31 #import <string.h> |
31 #import <string.h> |
| 32 #import <stdarg.h> |
32 #import <stdarg.h> |
| |
33 #import <objc/runtime.h> |
| 33 |
34 |
| 34 #import "menu.h" |
35 #import "menu.h" |
| 35 #import "window.h" |
36 #import "window.h" |
| |
37 #import "EventData.h" |
| 36 |
38 |
| 37 static ui_menu_add_f createMenuItem[] = { |
39 static ui_menu_add_f createMenuItem[] = { |
| 38 /* UI_MENU */ add_menu_widget, |
40 /* UI_MENU */ add_menu_widget, |
| 39 /* UI_MENU_ITEM */ add_menuitem_widget, |
41 /* UI_MENU_ITEM */ add_menuitem_widget, |
| 40 /* UI_MENU_CHECK_ITEM */ add_checkitem_widget, |
42 /* UI_MENU_CHECK_ITEM */ add_checkitem_widget, |
| 65 add_menu_items(menu, i, it); |
67 add_menu_items(menu, i, it); |
| 66 } |
68 } |
| 67 |
69 |
| 68 void add_menuitem_widget(NSMenu *parent, int i, UiMenuItemI *item) { |
70 void add_menuitem_widget(NSMenu *parent, int i, UiMenuItemI *item) { |
| 69 UiMenuItem *it = (UiMenuItem*)item; |
71 UiMenuItem *it = (UiMenuItem*)item; |
| |
72 |
| 70 NSString *str = [[NSString alloc] initWithUTF8String:it->label]; |
73 NSString *str = [[NSString alloc] initWithUTF8String:it->label]; |
| 71 NSMenuItem *menuItem = [parent addItemWithTitle:str action:nil keyEquivalent:@""]; |
74 NSMenuItem *menuItem = [parent addItemWithTitle:str action:@selector(menuItemAction:) keyEquivalent:@""]; |
| |
75 |
| |
76 if(it->callback) { |
| |
77 EventData *event = [[EventData alloc] init:it->callback userdata:it->userdata]; |
| |
78 objc_setAssociatedObject(menuItem, "eventdata", event, OBJC_ASSOCIATION_RETAIN); |
| |
79 } |
| 72 } |
80 } |
| 73 |
81 |
| 74 void add_menuseparator_widget(NSMenu *parent, int i, UiMenuItemI *item) { |
82 void add_menuseparator_widget(NSMenu *parent, int i, UiMenuItemI *item) { |
| 75 |
83 |
| 76 } |
84 } |
| 93 |
101 |
| 94 |
102 |
| 95 void ui_menu_init(void) { |
103 void ui_menu_init(void) { |
| 96 UiMenu *menus_begin = uic_get_menu_list(); |
104 UiMenu *menus_begin = uic_get_menu_list(); |
| 97 UiMenu *ls = menus_begin; |
105 UiMenu *ls = menus_begin; |
| |
106 int index = 1; |
| 98 while(ls) { |
107 while(ls) { |
| 99 if(ls->item.type == UI_MENU) { |
108 if(ls->item.type == UI_MENU) { |
| 100 NSString *str = [[NSString alloc] initWithUTF8String:ls->label]; |
109 NSString *str = [[NSString alloc] initWithUTF8String:ls->label]; |
| 101 NSMenu *menu = [[NSMenu alloc] initWithTitle: str]; |
110 NSMenu *menu = [[NSMenu alloc] initWithTitle: str]; |
| 102 NSMenuItem *menuItem = [[NSApp mainMenu] addItemWithTitle:str action:nil keyEquivalent:@""]; |
111 NSMenuItem *menuItem = [[NSApp mainMenu] insertItemWithTitle:str action:nil keyEquivalent:@"" atIndex:index]; |
| 103 [[NSApp mainMenu] setSubmenu:menu forItem:menuItem]; |
112 [[NSApp mainMenu] setSubmenu:menu forItem:menuItem]; |
| 104 |
113 |
| 105 add_menu_items(menu, 0, ls); |
114 add_menu_items(menu, 0, ls); |
| 106 } |
115 } |
| 107 ls = (UiMenu*)ls->item.next; |
116 ls = (UiMenu*)ls->item.next; |
| |
117 index++; |
| 108 } |
118 } |
| 109 } |
119 } |