ui/cocoa/menu.m

changeset 569
5c06bb9ea458
parent 541
63289f61fb7f
child 570
a2df724b4cb9
equal deleted inserted replaced
568:797b73c2c883 569:5c06bb9ea458
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 }

mercurial