| 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) { |