| 48 - (MenuItem*)init:(int)itId { |
48 - (MenuItem*)init:(int)itId { |
| 49 self.itemId = [[NSString alloc] initWithFormat:@"item%d", itId]; |
49 self.itemId = [[NSString alloc] initWithFormat:@"item%d", itId]; |
| 50 return self; |
50 return self; |
| 51 } |
51 } |
| 52 |
52 |
| |
53 - (void)handleToggleEvent:(id)sender { |
| |
54 NSMenuItem *item = (NSMenuItem*)sender; |
| |
55 if(!_state) { |
| |
56 item.state = NSControlStateValueOn; |
| |
57 } else { |
| |
58 item.state = NSControlStateValueOff; |
| |
59 } |
| |
60 _state = !_state; |
| |
61 |
| |
62 if(_callback) { |
| |
63 UiEvent event; |
| |
64 event.obj = _obj; |
| |
65 event.window = event.obj->window; |
| |
66 event.document = event.obj->ctx->document; |
| |
67 event.eventdata = NULL; |
| |
68 event.eventdatatype = 0; |
| |
69 event.intval = _state; |
| |
70 event.set = ui_get_setop(); |
| |
71 _callback(&event, _userdata); |
| |
72 } |
| |
73 } |
| |
74 |
| 53 @end |
75 @end |
| 54 |
76 |
| 55 static ui_menu_add_f createMenuItem[] = { |
77 static ui_menu_add_f createMenuItem[] = { |
| 56 /* UI_MENU */ add_menu_widget, |
78 /* UI_MENU */ add_menu_widget, |
| 57 /* UI_MENU_ITEM */ add_menuitem_widget, |
79 /* UI_MENU_ITEM */ add_menuitem_widget, |
| 112 |
134 |
| 113 NSString *str = [[NSString alloc] initWithUTF8String:it->label]; |
135 NSString *str = [[NSString alloc] initWithUTF8String:it->label]; |
| 114 NSMenuItem *menuItem = [parent addItemWithTitle:str action:@selector(menuCheckItemAction:) keyEquivalent:@""]; |
136 NSMenuItem *menuItem = [parent addItemWithTitle:str action:@selector(menuCheckItemAction:) keyEquivalent:@""]; |
| 115 |
137 |
| 116 MenuItem *mItem = [[MenuItem alloc] init:nItem++]; |
138 MenuItem *mItem = [[MenuItem alloc] init:nItem++]; |
| |
139 mItem.menuItem = menuItem; |
| |
140 mItem.obj = obj; |
| 117 mItem.callback = it->callback; |
141 mItem.callback = it->callback; |
| 118 mItem.userdata = it->userdata; |
142 mItem.userdata = it->userdata; |
| 119 mItem.checkItem = it; |
143 mItem.checkItem = it; |
| |
144 if(it->varname) { |
| |
145 mItem.varname = [[NSString alloc] initWithUTF8String:it->varname]; |
| |
146 } |
| 120 |
147 |
| 121 objc_setAssociatedObject(menuItem, "menuitem", mItem, OBJC_ASSOCIATION_RETAIN); |
148 objc_setAssociatedObject(menuItem, "menuitem", mItem, OBJC_ASSOCIATION_RETAIN); |
| 122 [bindingItems addObject:mItem]; |
149 |
| |
150 if(!obj) { |
| |
151 [bindingItems addObject:mItem]; |
| |
152 } else { |
| |
153 mItem.var = uic_widget_var(obj->ctx, obj->ctx, NULL, it->varname, UI_VAR_INTEGER); |
| |
154 if(mItem.var) { |
| |
155 UiInteger *i = mItem.var->value; |
| |
156 i->obj = (__bridge void*)mItem; |
| |
157 i->get = ui_menu_toggleitem_get; |
| |
158 i->set = ui_menu_toggleitem_set; |
| |
159 } |
| |
160 menuItem.target = mItem; |
| |
161 menuItem.action = @selector(handleToggleEvent:); |
| |
162 } |
| 123 } |
163 } |
| 124 |
164 |
| 125 void add_radioitem_widget(UiObject *obj, NSMenu *parent, int index, UiMenuItemI *item) { |
165 void add_radioitem_widget(UiObject *obj, NSMenu *parent, int index, UiMenuItemI *item) { |
| 126 UiMenuRadioItem *it = (UiMenuRadioItem*)item; |
166 UiMenuRadioItem *it = (UiMenuRadioItem*)item; |
| 127 |
167 |
| 167 } |
207 } |
| 168 |
208 |
| 169 NSArray* ui_get_binding_items(void) { |
209 NSArray* ui_get_binding_items(void) { |
| 170 return bindingItems; |
210 return bindingItems; |
| 171 } |
211 } |
| |
212 |
| |
213 |
| |
214 int64_t ui_menu_toggleitem_get(UiInteger *i) { |
| |
215 MenuItem *item = (__bridge MenuItem*)i->obj; |
| |
216 i->value = item.state; |
| |
217 return i->value; |
| |
218 } |
| |
219 |
| |
220 void ui_menu_toggleitem_set(UiInteger *i, int64_t value) { |
| |
221 MenuItem *item = (__bridge MenuItem*)i->obj; |
| |
222 i->value = value; |
| |
223 if(value != 0) { |
| |
224 item.menuItem.state = NSControlStateValueOn; |
| |
225 } else { |
| |
226 item.menuItem.state = NSControlStateValueOff; |
| |
227 } |
| |
228 } |