ui/cocoa/menu.m

changeset 710
6c7f700e4900
parent 709
131d38916ac7
equal deleted inserted replaced
709:131d38916ac7 710:6c7f700e4900
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 }

mercurial