ui/cocoa/menu.m

changeset 709
131d38916ac7
parent 708
0598e70c6489
child 710
6c7f700e4900
equal deleted inserted replaced
708:0598e70c6489 709:131d38916ac7
61 /* UI_MENU_CHECKITEM_LIST */ add_menuitem_list_widget, 61 /* UI_MENU_CHECKITEM_LIST */ add_menuitem_list_widget,
62 /* UI_MENU_RADIOITEM_LIST */ add_menuitem_list_widget, 62 /* UI_MENU_RADIOITEM_LIST */ add_menuitem_list_widget,
63 /* UI_MENU_SEPARATOR */ add_menuseparator_widget 63 /* UI_MENU_SEPARATOR */ add_menuseparator_widget
64 }; 64 };
65 65
66 void ui_add_menu_items(NSMenu *parent, int i, UiMenu *menu) { 66 void ui_add_menu_items(UiObject *obj, NSMenu *parent, int i, UiMenu *menu) {
67 UiMenuItemI *it = menu->items_begin; 67 UiMenuItemI *it = menu->items_begin;
68 int index = 0; 68 int index = 0;
69 while(it) { 69 while(it) {
70 createMenuItem[it->type](parent, index, it); 70 createMenuItem[it->type](obj, parent, index, it);
71 it = it->next; 71 it = it->next;
72 index++; 72 index++;
73 } 73 }
74 } 74 }
75 75
76 void add_menu_widget(NSMenu *parent, int i, UiMenuItemI *item) { 76 void add_menu_widget(UiObject *obj, NSMenu *parent, int i, UiMenuItemI *item) {
77 UiMenu *it = (UiMenu*)item; 77 UiMenu *it = (UiMenu*)item;
78 NSString *str = [[NSString alloc] initWithUTF8String:it->label]; 78 NSString *str = [[NSString alloc] initWithUTF8String:it->label];
79 NSMenu *menu = [[NSMenu alloc] initWithTitle: str]; 79 NSMenu *menu = [[NSMenu alloc] initWithTitle: str];
80 NSMenuItem *menuItem = [parent addItemWithTitle:str action:nil keyEquivalent:@""]; 80 NSMenuItem *menuItem = [parent addItemWithTitle:str action:nil keyEquivalent:@""];
81 [parent setSubmenu:menu forItem:menuItem]; 81 [parent setSubmenu:menu forItem:menuItem];
82 82
83 ui_add_menu_items(menu, i, it); 83 ui_add_menu_items(obj, menu, i, it);
84 } 84 }
85 85
86 void add_menuitem_widget(NSMenu *parent, int i, UiMenuItemI *item) { 86 void add_menuitem_widget(UiObject *obj, NSMenu *parent, int i, UiMenuItemI *item) {
87 UiMenuItem *it = (UiMenuItem*)item; 87 UiMenuItem *it = (UiMenuItem*)item;
88 88
89 NSString *str = [[NSString alloc] initWithUTF8String:it->label]; 89 NSString *str = [[NSString alloc] initWithUTF8String:it->label];
90 NSMenuItem *menuItem = [parent addItemWithTitle:str action:@selector(menuItemAction:) keyEquivalent:@""]; 90 NSMenuItem *menuItem = [parent addItemWithTitle:str action:@selector(menuItemAction) keyEquivalent:@""];
91 91
92 if(it->callback) { 92 if(it->callback) {
93 EventData *event = [[EventData alloc] init:it->callback userdata:it->userdata]; 93 EventData *event = [[EventData alloc] init:it->callback userdata:it->userdata];
94 if(obj) {
95 event.obj = obj;
96 menuItem.target = event;
97 menuItem.action = @selector(handleEvent:);
98 }
94 objc_setAssociatedObject(menuItem, "eventdata", event, OBJC_ASSOCIATION_RETAIN); 99 objc_setAssociatedObject(menuItem, "eventdata", event, OBJC_ASSOCIATION_RETAIN);
95 } 100 }
96 } 101 }
97 102
98 void add_menuseparator_widget(NSMenu *parent, int i, UiMenuItemI *item) { 103 void add_menuseparator_widget(UiObject *obj, NSMenu *parent, int i, UiMenuItemI *item) {
99 NSMenuItem *menuItem = [NSMenuItem separatorItem]; 104 NSMenuItem *menuItem = [NSMenuItem separatorItem];
100 [parent addItem:menuItem]; 105 [parent addItem:menuItem];
101 } 106 }
102 107
103 static int nItem = 0; 108 static int nItem = 0;
104 109
105 void add_checkitem_widget(NSMenu *parent, int i, UiMenuItemI *item) { 110 void add_checkitem_widget(UiObject *obj, NSMenu *parent, int i, UiMenuItemI *item) {
106 UiMenuCheckItem *it = (UiMenuCheckItem*)item; 111 UiMenuCheckItem *it = (UiMenuCheckItem*)item;
107 112
108 NSString *str = [[NSString alloc] initWithUTF8String:it->label]; 113 NSString *str = [[NSString alloc] initWithUTF8String:it->label];
109 NSMenuItem *menuItem = [parent addItemWithTitle:str action:@selector(menuCheckItemAction:) keyEquivalent:@""]; 114 NSMenuItem *menuItem = [parent addItemWithTitle:str action:@selector(menuCheckItemAction:) keyEquivalent:@""];
110 115
115 120
116 objc_setAssociatedObject(menuItem, "menuitem", mItem, OBJC_ASSOCIATION_RETAIN); 121 objc_setAssociatedObject(menuItem, "menuitem", mItem, OBJC_ASSOCIATION_RETAIN);
117 [bindingItems addObject:mItem]; 122 [bindingItems addObject:mItem];
118 } 123 }
119 124
120 void add_radioitem_widget(NSMenu *parent, int index, UiMenuItemI *item) { 125 void add_radioitem_widget(UiObject *obj, NSMenu *parent, int index, UiMenuItemI *item) {
121 UiMenuRadioItem *it = (UiMenuRadioItem*)item; 126 UiMenuRadioItem *it = (UiMenuRadioItem*)item;
122 127
123 NSString *str = [[NSString alloc] initWithUTF8String:it->label]; 128 NSString *str = [[NSString alloc] initWithUTF8String:it->label];
124 NSMenuItem *menuItem = [parent addItemWithTitle:str action:@selector(menuRadioItemAction:) keyEquivalent:@""]; 129 NSMenuItem *menuItem = [parent addItemWithTitle:str action:@selector(menuRadioItemAction:) keyEquivalent:@""];
125 130
130 135
131 objc_setAssociatedObject(menuItem, "menuitem", mItem, OBJC_ASSOCIATION_RETAIN); 136 objc_setAssociatedObject(menuItem, "menuitem", mItem, OBJC_ASSOCIATION_RETAIN);
132 [bindingItems addObject:mItem]; 137 [bindingItems addObject:mItem];
133 } 138 }
134 139
135 void add_checkitemnv_widget(NSMenu *parent, int i, UiMenuItemI *item) { 140 void add_checkitemnv_widget(UiObject *obj, NSMenu *parent, int i, UiMenuItemI *item) {
136 141
137 } 142 }
138 143
139 void add_menuitem_list_widget(NSMenu *parent, int i, UiMenuItemI *item) { 144 void add_menuitem_list_widget(UiObject *obj, NSMenu *parent, int i, UiMenuItemI *item) {
140 145
141 } 146 }
142 147
143 148
144 void ui_menu_init(void) { 149 void ui_menu_init(void) {
152 NSString *str = [[NSString alloc] initWithUTF8String:ls->label]; 157 NSString *str = [[NSString alloc] initWithUTF8String:ls->label];
153 NSMenu *menu = [[NSMenu alloc] initWithTitle: str]; 158 NSMenu *menu = [[NSMenu alloc] initWithTitle: str];
154 NSMenuItem *menuItem = [[NSApp mainMenu] insertItemWithTitle:str action:nil keyEquivalent:@"" atIndex:index]; 159 NSMenuItem *menuItem = [[NSApp mainMenu] insertItemWithTitle:str action:nil keyEquivalent:@"" atIndex:index];
155 [[NSApp mainMenu] setSubmenu:menu forItem:menuItem]; 160 [[NSApp mainMenu] setSubmenu:menu forItem:menuItem];
156 161
157 ui_add_menu_items(menu, 0, ls); 162 ui_add_menu_items(NULL, menu, 0, ls);
158 } 163 }
159 ls = (UiMenu*)ls->item.next; 164 ls = (UiMenu*)ls->item.next;
160 index++; 165 index++;
161 } 166 }
162 } 167 }

mercurial